- Remove From My Forums
-
Question
-
Cross post from Windows Server 2008 Forums (MSFT Suggestion). Original Post:
I am trying to set up Perfmon to log directly to a SQL 2008 Server
(trying to avoid binary file + relog). The SQL server is running
locally on the same server I am trying to record perf counters from.
Note that I am NOT using SQL 2008’s data collection features, and I am
trying to log non-sql related counters.I set up a SQL 2008
Native Client System DSN with Windows Authentication, but when I try
and start my data collecter set I get an error message that «Call to
SQLExecDirect failed with %1», and the in event viewer I get «Call to
SQLExecDirect failed with .». The set is running as System, which has
rights to the database. SQL does not log any errors or a failed logon
attempt.The ODBC DNS ‘Test’ button says it connected successfully, and I am
able to connect to the same database via Management Studio and ASP.Net. I don’t think its a SQL problem, but its hard to say when the error message is blank.Any help fixing this, or ruling out SQL as the problem, would be appreciated.
Joe
-
Proposed as answer by
Thursday, September 23, 2010 11:09 PM
FYI, I had this same issue and switching to SQL Server driver instead of SQL Server Native solved the problem.
-
Proposed as answer by
Finy
Monday, October 11, 2010 7:38 AM
SQL Server Native Client has a very detailed tracing built-in. Please enable it using the approach described here http://msdn.microsoft.com/en-us/library/aa964124.aspx. If you won’t be able to tell what’s wrong please share the trace with us.
FYI, I had this same issue and switching to SQL Server driver instead of SQL Server Native solved the problem.
Not knowing why, but using «SQL Server» driver instead of «SQL Server Native Client» driver is really a good solution!
I have switched to sql server ODBC driver 6.01.7600.16385, SQLSRV32.DLL and still have the issue.
[Resolved]
error msg : Call to SQLExecDirect failed with %1
I was having the issue with NT AUTHORITYSYSTEM permission.
Please try using the below steps.
step1: Go to the SQL server security tab -> NT AUTHORITYSYSTEM
Step2 : Double click on NT AUTHORITYSYSTEM
Step3: Click on server Roles and check sysadmin and click ok.
After completing the above steps please try to start the Perf counter.
—Pramodsingh
The main difference seems to be the odbc driver version. My version is 2014.120.2000.08
. I dont think it is due to the different visual studio versions — I think they all use the same odbc32.lib
under the hood.
The following code works for me: I changed the stored procedure to return something that is not 0 (to verify I can actually read the data returned):
@retValue int = 0 output
AS
BEGIN
SET NOCOUNT ON
SET @retValue = 3499
SELECT myTestCol
FROM tTestTable
IF @@ERROR <> 0
BEGIN
SET @retValue = -1
END
END
And I used the following code in Visual Studio 2013:
void printErrDbc(SQLHDBC hDbc)
{
SQLSMALLINT recNr = 1;
SQLRETURN ret = SQL_SUCCESS;
while (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLWCHAR errMsg[SQL_MAX_MESSAGE_LENGTH + 1];
SQLWCHAR sqlState[5 + 1];
errMsg[0] = 0;
SQLINTEGER nativeError;
SQLSMALLINT cb = 0;
ret = SQLGetDiagRec(SQL_HANDLE_DBC, hDbc, recNr, sqlState, &nativeError, errMsg, SQL_MAX_MESSAGE_LENGTH + 1, &cb);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
std::wcerr << L"ERROR; native: " << nativeError << L"; state: " << sqlState << L"; msg: " << errMsg << std::endl;
}
++recNr;
}
}
void printErrStmt(SQLHSTMT hStmt)
{
SQLSMALLINT recNr = 1;
SQLRETURN ret = SQL_SUCCESS;
while (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLWCHAR errMsg[SQL_MAX_MESSAGE_LENGTH + 1];
SQLWCHAR sqlState[5 + 1];
errMsg[0] = 0;
SQLINTEGER nativeError;
SQLSMALLINT cb = 0;
ret = SQLGetDiagRec(SQL_HANDLE_STMT, hStmt, recNr, sqlState, &nativeError, errMsg, SQL_MAX_MESSAGE_LENGTH + 1, &cb);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
std::wcerr << L"ERROR; native: " << nativeError << L"; state: " << sqlState << L"; msg: " << errMsg << std::endl;
}
++recNr;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//DB connect example
SQLRETURN nResult = 0;
SQLHANDLE handleEnv = 0;
nResult = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, (SQLHANDLE*)&handleEnv);
//nResult = SQLSetEnvAttr( handleEnv, SQL_ATTR_ODBC_VERSION, ( SQLPOINTER )SQL_OV_ODBC2, SQL_IS_INTEGER );
nResult = SQLSetEnvAttr(handleEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
nResult = SQLSetEnvAttr(handleEnv, SQL_ATTR_CONNECTION_POOLING, (SQLPOINTER)SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
SQLHANDLE handleDBC = 0;
nResult = SQLAllocHandle(SQL_HANDLE_DBC, handleEnv, (SQLHANDLE*)&handleDBC);
SQLWCHAR strConnect[256] = L"DSN=test;UID=sa;PWD=MySecretPassword";
SQLWCHAR strConnectOut[1024] = { 0 };
SQLSMALLINT nNumOut = 0;
nResult = SQLDriverConnect(handleDBC, NULL, (SQLWCHAR*)strConnect, SQL_NTS, (SQLWCHAR*)strConnectOut, sizeof(strConnectOut),
&nNumOut, SQL_DRIVER_NOPROMPT);
if (!SQL_SUCCEEDED(nResult))
{
printErrDbc(handleDBC);
}
SQLHSTMT handleStatement = 0;
//nResult = ::SQLAllocStmt( handleDBC, &handleStatement );
nResult = SQLAllocHandle(SQL_HANDLE_STMT, handleDBC, (SQLHANDLE*)&handleStatement);
SQLHSTMT hstmt = handleStatement;
int sqlResultOutput = 0;
SQLINTEGER cbValue = 0;
nResult = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &sqlResultOutput, 0, &cbValue);
//here is the problem
nResult = SQLExecDirect(hstmt, (SQLWCHAR*)L"{CALL my_TEST_SP(?)}", SQL_NTS);
if (!SQL_SUCCEEDED(nResult))
{
printErrStmt(hstmt);
}
nResult = SQLMoreResults(hstmt);
if (!(SQL_SUCCEEDED(nResult) || nResult == SQL_NO_DATA))
{
printErrStmt(hstmt);
}
std::wcout << L"Value of sqlResultOutput is: " << sqlResultOutput << std::endl;
return 0;
}
In the ODBC Data Source Administrator I created a corresponding DSN named test
using ODBC Driver 11 for SQL Server
with version 2014.120.2000.08. At the end the DSN entry shows the following properties (in the dialog where you can hit Test Data Source...
):
Microsoft ODBC Driver for SQL Server Version 12.00.2000
Data Source Name: test
Data Source Description:
Server: .SQLSERVERINSTANCE
Use Integrated Security: Yes
Database: Test
Language: (Default)
Data Encryption: No
Trust Server Certificate: No
Multiple Active Result Sets(MARS): No
Mirror Server:
Translate Character Data: Yes
Log Long Running Queries: No
Log Driver Statistics: No
Use Regional Settings: No
Use ANSI Quoted Identifiers: Yes
Use ANSI Null, Paddings and Warnings: Yes
If I run this sample app I get the expected output:
Value of sqlResultOutput is: 3499
So I would suggest that you try with the latest ODBC Driver for SQL Server. I think it is this download here: http://www.microsoft.com/de-ch/download/details.aspx?id=36434
- Remove From My Forums
-
Question
-
Hi
I am using SERVER 2k8 R2 and SQL Server 2008 sp1. I have already created two perf counters which are running fine. When I create 3rd one it stops with this error «Call to SQLExecDirect failed with %1». When I see windiws event log the error is «[Microsoft][ODBC
SQL Server Driver][SQL Server]Violation of PRIMARY KEY constraint ‘PK__CounterD__1FB2147B03317E3D’. Cannot insert duplicate key in object ‘dbo.CounterData’. 430A «. I thought may be i ducpicated one of the counter with my other datacollector but that is not
the case. I also took SQL trace. and the only two inserts I found was— insert bulk CounterData(«GUID» uniqueidentifier,»CounterID» int,»RecordIndex» int,»CounterDateTime» char(24) COLLATE SQL_Latin1_General_CP1_CI_AS,»CounterValue» float,»FirstValueA» int,»FirstValueB» int,»SecondValueA» int,»SecondValueB» int,»MultiCount»
int)
— insert bulk CounterData(«GUID» uniqueidentifier,»CounterID» int,»RecordIndex» int,»CounterDateTime» char(24) COLLATE SQL_Latin1_General_CP1_CI_AS,»CounterValue» float,»FirstValueA» int,»FirstValueB» int,»SecondValueA» int,»SecondValueB» int,»MultiCount» int)Also I am not using SQL Native Client. I am using SQL Server ODBS driver to connect to DB.
I dont know how to solve this.
Thanks
привет там я изучаю C и ODBC
я получил ошибку при вызове функции SQLExecDirect.
Помогите мне, пожалуйста
вот код
#include <Windows.h>
#include <sql.h>
#include <sqlext.h>
int main( void )
{
//DB connect example
SQLRETURN nResult = 0;
SQLHANDLE handleEnv = 0;
nResult = SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, ( SQLHANDLE* )&handleEnv );
//nResult = SQLSetEnvAttr( handleEnv, SQL_ATTR_ODBC_VERSION, ( SQLPOINTER )SQL_OV_ODBC2, SQL_IS_INTEGER );
nResult = SQLSetEnvAttr( handleEnv, SQL_ATTR_ODBC_VERSION, ( SQLPOINTER )SQL_OV_ODBC3, SQL_IS_INTEGER );
nResult = SQLSetEnvAttr( handleEnv, SQL_ATTR_CONNECTION_POOLING, (SQLPOINTER)SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
SQLHANDLE handleDBC = 0;
nResult = SQLAllocHandle( SQL_HANDLE_DBC, handleEnv, ( SQLHANDLE* )&handleDBC );
SQLCHAR strConnect[ 256 ] = "DSN=MY TEST DB; UID=TESTsa; PWD=TESTpw";
SQLCHAR strConnectOut[ 1024 ] = {0};
SQLSMALLINT nNumOut = 0;
nResult = SQLDriverConnect( handleDBC, NULL, ( SQLCHAR* )strConnect, SQL_NTS, ( SQLCHAR* )strConnectOut, sizeof(strConnectOut),
&nNumOut, SQL_DRIVER_NOPROMPT );
SQLHSTMT handleStatement = 0;
//nResult = ::SQLAllocStmt( handleDBC, &handleStatement );
nResult = SQLAllocHandle( SQL_HANDLE_STMT, handleDBC, ( SQLHANDLE* )&handleStatement );
SQLHSTMT hstmt = handleStatement;
int sqlResultOutput = 0;
SQLINTEGER cbValue = 0;
nResult = SQLBindParameter( hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &sqlResultOutput, 0, &cbValue );
//here is the problem
nResult = SQLExecDirect( hstmt, (SQLTCHAR*) "{CALL my_TEST_SP(?)}", SQL_NTS );
//nResult Value is -1 and SQL State is 24000
return 0;
}
каждый результат звонка в порядке. вернуть SQL_SUCCESS все, кроме одного
Функция SQLExecDirect возвращает -1, а SQLState — 24000
хранимая процедура проста, как это
CREATE PROCEDURE my_TEST_SP
@retValue int = 0 output
AS
BEGIN
SET NOCOUNT ON
SET @retValue = 0
SELECT myTestCol
FROM tTestTable
IF @@ERROR <> 0
BEGIN
SET @retValue = -1
END
END
моя ОС windows7.
Использование Visual Studio 2010 SP1, SQL Server 2012
что я скучаю? пожалуйста, скажите мне и хорошего дня 🙂
2
Решение
Основным отличием является версия драйвера odbc. Моя версия 2014.120.2000.08
, Я не думаю, что это связано с различными версиями Visual Studio — я думаю, что они все используют одинаково odbc32.lib
под капотом.
Следующий код работает для меня: я изменил хранимую процедуру, чтобы она возвращала что-то, что не равно 0 (чтобы убедиться, что я действительно могу прочитать возвращенные данные):
@retValue int = 0 output
AS
BEGIN
SET NOCOUNT ON
SET @retValue = 3499
SELECT myTestCol
FROM tTestTable
IF @@ERROR <> 0
BEGIN
SET @retValue = -1
END
END
И я использовал следующий код в Visual Studio 2013:
void printErrDbc(SQLHDBC hDbc)
{
SQLSMALLINT recNr = 1;
SQLRETURN ret = SQL_SUCCESS;
while (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLWCHAR errMsg[SQL_MAX_MESSAGE_LENGTH + 1];
SQLWCHAR sqlState[5 + 1];
errMsg[0] = 0;
SQLINTEGER nativeError;
SQLSMALLINT cb = 0;
ret = SQLGetDiagRec(SQL_HANDLE_DBC, hDbc, recNr, sqlState, &nativeError, errMsg, SQL_MAX_MESSAGE_LENGTH + 1, &cb);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
std::wcerr << L"ERROR; native: " << nativeError << L"; state: " << sqlState << L"; msg: " << errMsg << std::endl;
}
++recNr;
}
}
void printErrStmt(SQLHSTMT hStmt)
{
SQLSMALLINT recNr = 1;
SQLRETURN ret = SQL_SUCCESS;
while (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
SQLWCHAR errMsg[SQL_MAX_MESSAGE_LENGTH + 1];
SQLWCHAR sqlState[5 + 1];
errMsg[0] = 0;
SQLINTEGER nativeError;
SQLSMALLINT cb = 0;
ret = SQLGetDiagRec(SQL_HANDLE_STMT, hStmt, recNr, sqlState, &nativeError, errMsg, SQL_MAX_MESSAGE_LENGTH + 1, &cb);
if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
std::wcerr << L"ERROR; native: " << nativeError << L"; state: " << sqlState << L"; msg: " << errMsg << std::endl;
}
++recNr;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//DB connect example
SQLRETURN nResult = 0;
SQLHANDLE handleEnv = 0;
nResult = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, (SQLHANDLE*)&handleEnv);
//nResult = SQLSetEnvAttr( handleEnv, SQL_ATTR_ODBC_VERSION, ( SQLPOINTER )SQL_OV_ODBC2, SQL_IS_INTEGER );
nResult = SQLSetEnvAttr(handleEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
nResult = SQLSetEnvAttr(handleEnv, SQL_ATTR_CONNECTION_POOLING, (SQLPOINTER)SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
SQLHANDLE handleDBC = 0;
nResult = SQLAllocHandle(SQL_HANDLE_DBC, handleEnv, (SQLHANDLE*)&handleDBC);
SQLWCHAR strConnect[256] = L"DSN=test;UID=sa;PWD=MySecretPassword";
SQLWCHAR strConnectOut[1024] = { 0 };
SQLSMALLINT nNumOut = 0;
nResult = SQLDriverConnect(handleDBC, NULL, (SQLWCHAR*)strConnect, SQL_NTS, (SQLWCHAR*)strConnectOut, sizeof(strConnectOut),
&nNumOut, SQL_DRIVER_NOPROMPT);
if (!SQL_SUCCEEDED(nResult))
{
printErrDbc(handleDBC);
}
SQLHSTMT handleStatement = 0;
//nResult = ::SQLAllocStmt( handleDBC, &handleStatement );
nResult = SQLAllocHandle(SQL_HANDLE_STMT, handleDBC, (SQLHANDLE*)&handleStatement);
SQLHSTMT hstmt = handleStatement;
int sqlResultOutput = 0;
SQLINTEGER cbValue = 0;
nResult = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &sqlResultOutput, 0, &cbValue);
//here is the problem
nResult = SQLExecDirect(hstmt, (SQLWCHAR*)L"{CALL my_TEST_SP(?)}", SQL_NTS);
if (!SQL_SUCCEEDED(nResult))
{
printErrStmt(hstmt);
}
nResult = SQLMoreResults(hstmt);
if (!(SQL_SUCCEEDED(nResult) || nResult == SQL_NO_DATA))
{
printErrStmt(hstmt);
}
std::wcout << L"Value of sqlResultOutput is: " << sqlResultOutput << std::endl;
return 0;
}
В ODBC Data Source Administrator я создал соответствующий DSN с именем test
с помощью ODBC Driver 11 for SQL Server
с версией 2014.120.2000.08. В конце записи DSN отображаются следующие свойства (в диалоговом окне, где вы можете нажать Test Data Source...
):
Microsoft ODBC Driver for SQL Server Version 12.00.2000
Data Source Name: test
Data Source Description:
Server: .SQLSERVERINSTANCE
Use Integrated Security: Yes
Database: Test
Language: (Default)
Data Encryption: No
Trust Server Certificate: No
Multiple Active Result Sets(MARS): No
Mirror Server:
Translate Character Data: Yes
Log Long Running Queries: No
Log Driver Statistics: No
Use Regional Settings: No
Use ANSI Quoted Identifiers: Yes
Use ANSI Null, Paddings and Warnings: Yes
Если я запускаю этот пример приложения, я получаю ожидаемый результат:
Value of sqlResultOutput is: 3499
Поэтому я бы посоветовал вам попробовать последнюю версию драйвера ODBC для SQL Server. Я думаю, что это скачать здесь: http://www.microsoft.com/de-ch/download/details.aspx?id=36434
0
Другие решения
Других решений пока нет …
|
От: |
grigor |
|
Дата: | 21.10.03 07:43 | ||
Оценка: |
Уважаемые коллеги!
Помогите пожалуйста разобраться в следующей проблеме:
Имеется файл .DBF (test.dbf), который имеет 5 полей: pk_num — числовое (тип ‘I’, 4 байта),
а остальные (param1, param2, param3, param4) — символьные, размером 32 байта каждое.
Файл прекрасно смотрится Exсel’ем.
Требуется его проиндексировать по какому-либо полю. Причем это нужно сделать на VC++
c использованием ODBC. DBF — файл описывается в System DSN как Microsoft dBase Driver (*.dbf).
Соединение с базой (SQLAllocHandle, SQLConnect и пр.) происходит нормально.
далее идет следующий код:
CHAR szQuery[256];
ZeroMemory(szQuery,sizeof(szQuery));
wsprintf(szQuery,»CREATE UNIQUE INDEX a1 ON test (pk_num)»);
retcode = SQLExecDirect(hstmt,(SQLCHAR*)szQuery,SQL_NTS);
где a1 — имя создаваемого индексного файла (*.idx), а test — имя таблицы, в случае DBF
(насколько мне известно) совпадает с именем базы.
Функция SQLExecDirect завершается с ошибкой и при последующем анализе ошибки функцией SQLGetDiagRec
строковое сообщение об ошибке имеет вид:
«[Microsoft][Драйвер ODBC dBase] Непредвиденная ошибка драйвера внешней базы данных (8961).»
Что здесь не так?
|
От: |
algol |
about:blank |
Дата: | 21.10.03 11:29 | ||
Оценка: |
Здравствуйте, grigor, Вы писали:
G>Уважаемые коллеги!
G>Помогите пожалуйста разобраться в следующей проблеме:
G>Имеется файл .DBF (test.dbf), который имеет 5 полей: pk_num — числовое (тип ‘I’, 4 байта),
G>а остальные (param1, param2, param3, param4) — символьные, размером 32 байта каждое.
G>Файл прекрасно смотрится Exсel’ем.
G>Требуется его проиндексировать по какому-либо полю. Причем это нужно сделать на VC++
G>c использованием ODBC. DBF — файл описывается в System DSN как Microsoft dBase Driver (*.dbf).
G>Соединение с базой (SQLAllocHandle, SQLConnect и пр.) происходит нормально.
G>далее идет следующий код:
G> CHAR szQuery[256];
G> ZeroMemory(szQuery,sizeof(szQuery));
G> wsprintf(szQuery,»CREATE UNIQUE INDEX a1 ON test (pk_num)»);
G> retcode = SQLExecDirect(hstmt,(SQLCHAR*)szQuery,SQL_NTS);
G>где a1 — имя создаваемого индексного файла (*.idx), а test — имя таблицы, в случае DBF
G>(насколько мне известно) совпадает с именем базы.
G>Функция SQLExecDirect завершается с ошибкой и при последующем анализе ошибки функцией SQLGetDiagRec
G>строковое сообщение об ошибке имеет вид:
G>»[Microsoft][Драйвер ODBC dBase] Непредвиденная ошибка драйвера внешней базы данных (8961).»
G>Что здесь не так?
Похоже, что это таблица не dBase, а FoxPro (тип данных I, индексный файл idx). ISAM драйвер dBase может не поддерживать такие файлы. Лучше взять ODBC драйвер Visual FoxPro. При этом запрос изменится на «INDEX ON pk_num TO a1 UNIQUE».
|
От: | Аноним | |
Дата: | 22.10.03 11:41 | ||
Оценка: |
Здравствуйте, algol, Вы писали:
A>Здравствуйте, grigor, Вы писали:
G>>Уважаемые коллеги!
G>>Помогите пожалуйста разобраться в следующей проблеме:
G>>Имеется файл .DBF (test.dbf), который имеет 5 полей: pk_num — числовое (тип ‘I’, 4 байта),
G>>а остальные (param1, param2, param3, param4) — символьные, размером 32 байта каждое.
G>>Файл прекрасно смотрится Exсel’ем.
G>>Требуется его проиндексировать по какому-либо полю. Причем это нужно сделать на VC++
G>>c использованием ODBC. DBF — файл описывается в System DSN как Microsoft dBase Driver (*.dbf).
G>>Соединение с базой (SQLAllocHandle, SQLConnect и пр.) происходит нормально.
G>>далее идет следующий код:
G>> CHAR szQuery[256];
G>> ZeroMemory(szQuery,sizeof(szQuery));
G>> wsprintf(szQuery,»CREATE UNIQUE INDEX a1 ON test (pk_num)»);
G>> retcode = SQLExecDirect(hstmt,(SQLCHAR*)szQuery,SQL_NTS);
G>>где a1 — имя создаваемого индексного файла (*.idx), а test — имя таблицы, в случае DBF
G>>(насколько мне известно) совпадает с именем базы.
G>>Функция SQLExecDirect завершается с ошибкой и при последующем анализе ошибки функцией SQLGetDiagRec
G>>строковое сообщение об ошибке имеет вид:
G>>»[Microsoft][Драйвер ODBC dBase] Непредвиденная ошибка драйвера внешней базы данных (8961).»
G>>Что здесь не так?
A>Похоже, что это таблица не dBase, а FoxPro (тип данных I, индексный файл idx). ISAM драйвер dBase может не поддерживать такие файлы. Лучше взять ODBC драйвер Visual FoxPro. При этом запрос изменится на «INDEX ON pk_num TO a1 UNIQUE».
Извините, сам разобрался. Оказывается мой DBF — файл формировался немного некорректно, а именно — в заголовке не заполнялось поле даты последней модификации. После заполнения этого поля инструкция CREATE UNIQUE INDEX a1 ON test (pk_num ASC) срабатывает нормально. Правда формируется индексный файл *.mdx и текстовый *.inf, а не *.idx.
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.