|  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, чтение данных | 
|  | 
| 
 |