16.05.2005, 16:55 | #1 |
Участник
|
проблема с ADO
По поиску нашел похожие тему, но так и не разобрался.
Пытаюсь открыть dbf и на строчке кода cn.open("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq="+_str+";"); вываливает следующее: Метод 'execute' в COM-объекте класса 'ADODB.Command' возвратил код ошибки 0x80040E37 (<неизвестно>), который означает: [Microsoft][Драйвер ODBC dBase] Объект '.DBF' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути. Помогите. |
|
16.05.2005, 17:13 | #2 |
Administrator
|
Вы уверены, что на этой строчке?
Может все-таки на строчке с использованием CCADOCommand?
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
16.05.2005, 17:15 | #3 |
Участник
|
Уверен.... Дебагер выдал.
|
|
16.05.2005, 17:19 | #4 |
Administrator
|
Какого класса объект cn?
Вообще, постройте Connection String с помощью, например, MS Excel, а потом скопируйте себе в приложение.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
16.05.2005, 17:20 | #5 |
Участник
|
А все сработало.... прошу прощения....
|
|
16.05.2005, 17:21 | #6 |
Administrator
|
Дык это.... не путайте мух с котлетами ... Строчка Driver={Microsoft dBASE Driver (*.dbf)}; от ODBC, и она ессно не соответствует строчке OLEDB, которую ожидает увидеть ADO.
Совет. Создайте файлик с расщирением .UDL и щелкните по нему. Это своеобразный конструктор строк подключения для OLEDB (и соотв ADO). После контруирования, внутри файлика (он текстовый) будет лежать нужная строчка. Нюанс. Теоретически, за подключение к .DBF отвечает драйвер Jet (Microsoft Jet OLE DB Provider). Однако там можно указать только путь к базе Access (.MDB) Варианты решения: 1. Попробовать указать в поле путь - путь к каталогу, где лежит (лежат) DBF-ник(и). В этом случае имя таблицы будет соответствовать имени файла. По такой схеме работает драйвер Jet из под Access и SQL Server. Однако в данном случае я не пробовал 2. Отказаться от ADO. Делать через ODBC (класс ODBCConnection). Однако в этом случае необходимо иметь уже созданный ODBC (просто драйвер задать не удастся. Можно конечно изменить драйвер у уже созданного ODBC, однако это уже извращение) |
|
|
За это сообщение автора поблагодарили: Logger (3). |
16.05.2005, 17:22 | #7 |
Administrator
|
Ну значит совет используйте просто - как некую базу знаний
|
|
18.01.2010, 11:27 | #8 |
Участник
|
Всем привет!
Сегодня вдруг стала появляться аналогичная ошибка "Метод "execute" в COM-объекте класса "ADODB.Command" возвратил код ошибки 0x80040E37 (<неизвестно>), который означает: [Microsoft][Драйвер ODBC dBase] Объект 'fileName' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути." X++: CCADOCommand command = new CCADOCommand(); CCADORecordset rs = new CCADORecordset(); CCADOConnection cn = new CCADOConnection(); ; cn.open("Driver={Microsoft dBASE Driver (*.dbf)}; DriverID=277; Dbq="+_filePath+";"); command.activeConnection(cn); command.commandText("select * from "+_fileName); rs = command.execute(); //<-ошибка тут |
|
18.01.2010, 11:37 | #9 |
Участник
|
kuvg
Вы не пробовали читать до конца данную тему? Цитата:
Connection strings for DBF / FoxPro |
|
|
За это сообщение автора поблагодарили: kuvg (1). |
18.01.2010, 12:00 | #10 |
Участник
|
Ок. Делаю:
X++: CCADOCommand command = new CCADOCommand(); CCADORecordset rs = new CCADORecordset(); CCADOConnection cn = new CCADOConnection(); ; cn.open(strFmt("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%1;Extended Properties=dBASE IV;User ID=Admin;Password=;", _filePath)); command.activeConnection(cn); command.commandText("select * from "+_fileName); rs = command.execute(); //<-ошибка тут Говорю же до сих пор работало без проблем... |
|
18.01.2010, 12:26 | #11 |
Участник
|
Работающий у меня пример.
X++: static server void test_ADOConnection() { CCADOConnection adoConnection; CCADOCommand adoCommand; str strCommand; FileFolder_RU fileFolder_RU; CCADOFields adoFields; CCADOField adoField_0, adoField_1, adoField_2, adoField_3, adoField_4; ; // Путь доступа к директории, где находится DBF fileFolder_RU = "C:\\MyFolder"; // Подключение к DBF adoConnection = new CCADOConnection(); adoConnection.connectionString(strFmt("Driver={Microsoft dBase Driver (*.dbf)};DriverID=277;Dbq=%1;",fileFolder_RU)); adoConnection.open(); adoCommand = new CCADOCommand(); adoCommand.activeConnection(adoConnection); adoCommand.commandType(1); // Возможно, этой настройки не хватает? // Выполнение команды strCommand = "Select * from MyTable.dbf"; adoCommand.commandText(strCommand); adoRecordSet = adoCommand.execute(); adoFields = adoRecordSet.fields(); adoField_0 = adoFields.itemIdx(0); adoField_1 = adoFields.itemIdx(1); adoField_2 = adoFields.itemIdx(2); adoField_3 = adoFields.itemIdx(3); adoField_4 = adoFields.itemIdx(4); // Просмотр результата while (! adoRecordSet.EOF()) { print " adoField_0=",adoField_0.value(); print " adoField_1=",adoField_1.value(); print " adoField_2=",adoField_2.value(); print " adoField_3=",adoField_3.value(); print " adoField_4=",adoField_4.value(); adoRecordSet.moveNext(); } pause; adoConnection.close(); return; } |
|
18.01.2010, 13:40 | #12 |
NavAx
|
Права на доступ к файлу не менялись?
|
|
20.07.2014, 03:55 | #13 |
MCTS
|
Имя файла не должно быть слишком длинным (8 символов), иначе будет ошибка
Последний раз редактировалось Eldar9x; 20.07.2014 в 04:02. |
|
Теги |
ado, dbf, чтение данных |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|