Здравствуйте, 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".