Проблема с Ado (e_fail)
Сообщение возникает при некоторых sql-запросах, например: SELECT tbl1.fld1, tbl2.fld2 FROM tbl1 LEFT JOIN tbl2 ON tbl1.idx1=tbl2.idx2. При этом DataSet->Active = true отрабатывает без проблем, а исключение возникает в какой-то момент при листании DataSet->Next() или при вызове Count = DataSet->RecordCount – сразу.
Соединение с БД происходит через ADOConnection с использованием Microsoft OLE DB Provider for ODBC Drivers.
Проблема как-то связана с «Поставщиком данных», т.к. устраняется подключением БД через Microsoft Jet 4.0 OLE DB Provider. Аналогичный sql-запрос отрабатывает на MsAccess-е так-же без проблем
Задача написана на Cbuilder 6 с установленным Update Pack 4.
Может нужны еще какие-то обновления? Как порешить проблему?
Заранее спасибо…
Кто-нибудь сталкивался с проблемой когда: при выборке данных возникает EOleException "Поставщик данных или другая служба вернули состояние E_FAIL"?
Сообщение возникает при некоторых sql-запросах, например: SELECT tbl1.fld1, tbl2.fld2 FROM tbl1 LEFT JOIN tbl2 ON tbl1.idx1=tbl2.idx2. При этом DataSet->Active = true отрабатывает без проблем, а исключение возникает в какой-то момент при листании DataSet->Next() или при вызове Count = DataSet->RecordCount – сразу.
Соединение с БД происходит через ADOConnection с использованием Microsoft OLE DB Provider for ODBC Drivers.
Проблема как-то связана с «Поставщиком данных», т.к. устраняется подключением БД через Microsoft Jet 4.0 OLE DB Provider. Аналогичный sql-запрос отрабатывает на MsAccess-е так-же без проблем
Задача написана на Cbuilder 6 с установленным Update Pack 4.
Может нужны еще какие-то обновления? Как порешить проблему?
Заранее спасибо…
Попробуй поставить runtime MDAC и JET посвежее (мелкомягкие раздают соотв. сервиспаки свободно). Ещё вопрос такой: как я понимаю, подключение идёт к базе даннах MDB, тогда зачем подключаться через ODBC, если можно Microsoft Jet 4.0 OLE DB Provider? Во втором случае прослойка между программой и БД будет несколько тоньше. Т.е. либо (1) программа -> ADO -> OLEDB -> ODBC -> JET -> БД либо (2) программа -> ADO -> OLEDB -> JET -> БД.
Насчет версий: стоит WinXP SP2 - не должно быть проблемы с версией MsJet... Насчет поставщика данных - так выходит универсально, не нужна пересборка программы при смене БД, настройка клиента опять же проще - любая версия Windows (от Win98SE)...
M$ Jet OLE DB Provider под Windows 98 тоже работает.
Точно. Кроме того, смена БД -- не только смена OLDEB-провайдера, но и частично замена SQL-команд. Например, преобразование строки к дате в Jet/Access, M$ SQL Server и Oracle происходит тремя разными способами; в Oracle, в отличие от Jet/Access, нет такого типа переменных как "счётчик", зато есть триггеры и последовательности и т.д.
Словом, универсальность -- очень трудоёмкая штука.
А Jet runtime и MDAC всё-таки качни...
Кстати, последние новости: Micro$oft решила отказаться от дальнейшей поддержки Jet (см. статью), новые верии больше не планируются. Разработчикам рекомендуется переходить на MSDE или SQL Server 2005 Express.