![]() |
#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. Проверьте существование объекта и правильность имени и пути. Помогите. |
|
![]() |
#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 |
|
![]() |
#3 |
Участник
|
Уверен.... Дебагер выдал.
|
|
![]() |
#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 |
|
![]() |
#5 |
Участник
|
А все сработало.... прошу прощения....
|
|
![]() |
#6 |
Administrator
|
Дык это.... не путайте мух с котлетами
![]() Совет. Создайте файлик с расщирением .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). |
![]() |
#7 |
Administrator
|
Ну значит совет используйте просто - как некую базу знаний
![]() |
|
![]() |
#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(); //<-ошибка тут ![]() |
|
![]() |
#9 |
Участник
|
kuvg
Вы не пробовали читать до конца данную тему? Цитата:
Connection strings for DBF / FoxPro |
|
|
За это сообщение автора поблагодарили: kuvg (1). |
![]() |
#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(); //<-ошибка тут ![]() Говорю же до сих пор работало без проблем... |
|
![]() |
#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; } |
|
![]() |
#12 |
NavAx
|
Права на доступ к файлу не менялись?
|
|
![]() |
#13 |
MCTS
|
Имя файла не должно быть слишком длинным (8 символов), иначе будет ошибка
Последний раз редактировалось Eldar9x; 20.07.2014 в 04:02. |
|
Теги |
ado, dbf, чтение данных |
|
|