Проблема с подключением Embedded через ODBC
Модератор: kdv
Проблема с подключением Embedded через ODBC
У меня есть проект на MS Access (база 1 Гиг) и соответственно стал вопрос о переносе на сервер.
Переписать интерфейс не реально по срокам (>100 тыс. строк кода в интерфейсной части) и было принято логику оставить в Access, базу загнать в FB.
Продукт ставится как на сервер и несколько клиентов, так и на отдельные ПК.
Предвидя проблему столкнуться с ПО юзающим другие релизы IB/FB попытался использовать Embedded и вышла лажа: ODBC не хочет коннектиться к базе.
Использую Firebird-2.0.0.12748-0-Win32_pdb и Firebird-2.0.0.12748-0_embed_win32 и Firebird_ODBC_2.0.0-Win32.
fbembed.dll переименован в gds32.dll
Настройки ODBC:
Имя: smetaxxi
Драйвер: Firebird/Interbase(r) driver MT
Клиент: D:\IT\fb smeta xxi.xp\local\gds32.dll (полный путь)
остальные поля либо пустые, либо по умолчанию
Строка соединения: Set db = OpenDatabase("smetaxxi", dbDriverNoPrompt, False, "ODBC;DATABASE=d:\smetaxxi.mdb;UID=sysdba;PWD=masterkey;DSN=smetaxxi")
Не хочет работать в Embedded и все . Запускаю сервер - та же ошибка (?хотя все говорят, что можно работать в режиме клиента?).
Меняю в настройках ODBC путь к gds32 от сервера и все запускается.
Проект на Builder 6 с Embedded отрабатывает великолепно.
Помогите кто чем может.
Переписать интерфейс не реально по срокам (>100 тыс. строк кода в интерфейсной части) и было принято логику оставить в Access, базу загнать в FB.
Продукт ставится как на сервер и несколько клиентов, так и на отдельные ПК.
Предвидя проблему столкнуться с ПО юзающим другие релизы IB/FB попытался использовать Embedded и вышла лажа: ODBC не хочет коннектиться к базе.
Использую Firebird-2.0.0.12748-0-Win32_pdb и Firebird-2.0.0.12748-0_embed_win32 и Firebird_ODBC_2.0.0-Win32.
fbembed.dll переименован в gds32.dll
Настройки ODBC:
Имя: smetaxxi
Драйвер: Firebird/Interbase(r) driver MT
Клиент: D:\IT\fb smeta xxi.xp\local\gds32.dll (полный путь)
остальные поля либо пустые, либо по умолчанию
Строка соединения: Set db = OpenDatabase("smetaxxi", dbDriverNoPrompt, False, "ODBC;DATABASE=d:\smetaxxi.mdb;UID=sysdba;PWD=masterkey;DSN=smetaxxi")
Не хочет работать в Embedded и все . Запускаю сервер - та же ошибка (?хотя все говорят, что можно работать в режиме клиента?).
Меняю в настройках ODBC путь к gds32 от сервера и все запускается.
Проект на Builder 6 с Embedded отрабатывает великолепно.
Помогите кто чем может.
Re: Проблема с подключением Embedded через ODBC
Какая ошибка-то ?Urslan писал(а): Не хочет работать в Embedded и все . Запускаю сервер - та же ошибка (?хотя все говорят, что можно работать в режиме клиента?).
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Визард-то есть, но у меня проект на DAO и читает только файлы *.MDB, а в проекте [/quote](>100 тыс. строк кода в интерфейсной части)[/quote]Dimitry Sibiryakov писал(а):Брось, с акцесса лучше мигрировать на MS SQL. Там даже специальный визард есть на эту задачу.
Птичка - отличается умом и сообразительностью. База то под вторую причку, а расширение только чтобы DAO не ругался. Gemini ODBC и FB расширение файла до одного (sorry) места.Dimitry Sibiryakov писал(а):Уж не пытаешься ли ты заставить птичку читать акцессовскую базу???
Лучше скажите можно ли вообще подконектиться к Embedded через ODBC? Ведь есть ограничение на расположение файлов сервера.
Re: Проблема с подключением Embedded через ODBC
Путь без пробелов не пробовал ?Urslan писал(а): Клиент: D:\IT\fb smeta xxi.xp\local\gds32.dll (полный путь)
ODBC работает как с сервером Classic так и Embedded.kdv писал(а):А если в ODBC создать System DSN
В случае Classic работает и с пробелами. A вот расширения кроме *.MDB DAO воспринимать не хочет (библиотеку то писали именно для Access'a).Urslan писал(а):Set db = OpenDatabase("smetaxxi", dbDriverNoPrompt, False, "ODBC;DATABASE=D:\IT\fb smeta xxi.xp\local\smetaxxi.mdb;UID=sysdba;PWD=masterkey;DSN=smetaxxi")
объясняю. embedded - это dll, которая грузится тем, кто ее вызвал.
Поскольку это не коннект из компонент прямого доступа, то это не access, а dll ODBC-драйвера. Следовательно, dll ODBC-драйвера банально не может найти gds32.dll, которая нужна драйверу.
запустите filemon, посмотрите всю цепочку, кого там дергает access.
А вообще такой метод доступа (через "третьи руки") весьма сомнителен.
и приплетать тут классик (да хоть и супер), коннект к которому идет или по tcp или через локальный протокол, совершенно не надо.
кстати, я не знаю тонкостей, но думаю что gemini odbc понятия не имеет про fbembed.dll. и ищет просто gds32.dll.
Поскольку это не коннект из компонент прямого доступа, то это не access, а dll ODBC-драйвера. Следовательно, dll ODBC-драйвера банально не может найти gds32.dll, которая нужна драйверу.
запустите filemon, посмотрите всю цепочку, кого там дергает access.
А вообще такой метод доступа (через "третьи руки") весьма сомнителен.
и приплетать тут классик (да хоть и супер), коннект к которому идет или по tcp или через локальный протокол, совершенно не надо.
кстати, я не знаю тонкостей, но думаю что gemini odbc понятия не имеет про fbembed.dll. и ищет просто gds32.dll.
Спасибо всем за участие.
Проект уже приконнектил.
Правда обнаружился новый глюк.
Когда работаю с библиотекой АДО, то не отрабатывает метод Update у переменной типа ADODB.Recordset.
Run-time error '-2147467259 (80004005)'
Dynamic SQL Error.
SQL Error Code = -104.
Unexpected end of command - line 1, column 34.
Прочитал у Gemini, что есть более новый релиз драйверов с исправленным багом ADO Update. Скачал, не помогло.
Проверил с DAO тот же рекордсет - все работает.
Есть ли существенная разница между драйверами ODBC и OLE DB.
Проект уже приконнектил.
Правда обнаружился новый глюк.
Когда работаю с библиотекой АДО, то не отрабатывает метод Update у переменной типа ADODB.Recordset.
Run-time error '-2147467259 (80004005)'
Dynamic SQL Error.
SQL Error Code = -104.
Unexpected end of command - line 1, column 34.
Прочитал у Gemini, что есть более новый релиз драйверов с исправленным багом ADO Update. Скачал, не помогло.
Проверил с DAO тот же рекордсет - все работает.
Есть ли существенная разница между драйверами ODBC и OLE DB.
дык хрен знает, что у тебя драйвер на сервер посылает. включи ему trace, и посмотри, какой именно запрос к ошибке приводит.
Вообще вся эта левизна с "обновлением" рекордсетов и т.п. давно уже плешь проела еще в BDE - www.ibase.ru/devinfo/bde.htm (см. про "живые" запросы). Так что предлагаю не маяться ..., и формировать запросы вручную. Автоматизация редко доводит до добра. Особенно, когда понятия не имеешь, как именно эта автоматизация происходит.
Вообще вся эта левизна с "обновлением" рекордсетов и т.п. давно уже плешь проела еще в BDE - www.ibase.ru/devinfo/bde.htm (см. про "живые" запросы). Так что предлагаю не маяться ..., и формировать запросы вручную. Автоматизация редко доводит до добра. Особенно, когда понятия не имеешь, как именно эта автоматизация происходит.
В администраторе ODBC нужно просто зарегистрировать запись с необходимым именем, остальные параметры можно не указывать.
А вот строку коннекта прописать более полную:
Set db = OpenDatabase("smetaxxi", dbDriverNoPrompt, False, "ODBC; DATABASE=D:\IT\fb smeta xxi.xp\local\smetaxxi.mdb; UID=sysdba; PWD=masterkey; Client=D:\IT\fb smeta xxi.xp\local\gds32.dll; DSN=smetaxxi")
Выделенные параметры ОБЯЗАТЕЛЬНЫ для встроенного сервера.
А вот строку коннекта прописать более полную:
Set db = OpenDatabase("smetaxxi", dbDriverNoPrompt, False, "ODBC; DATABASE=D:\IT\fb smeta xxi.xp\local\smetaxxi.mdb; UID=sysdba; PWD=masterkey; Client=D:\IT\fb smeta xxi.xp\local\gds32.dll; DSN=smetaxxi")
Выделенные параметры ОБЯЗАТЕЛЬНЫ для встроенного сервера.