Страница 1 из 2
Проблема с подключением Embedded через ODBC
Добавлено: 18 янв 2007, 17:08
Urslan
У меня есть проект на 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 отрабатывает великолепно.
Помогите кто чем может.
Re: Проблема с подключением Embedded через ODBC
Добавлено: 18 янв 2007, 17:25
hvlad
Urslan писал(а):
Не хочет работать в Embedded и все

. Запускаю сервер - та же ошибка (?хотя все говорят, что можно работать в режиме клиента?).
Какая ошибка-то ?
Добавлено: 18 янв 2007, 19:12
Urslan
3151 ODBC - ошибка подключения к <имя>
То есть не нравится ему БД.
Добавлено: 19 янв 2007, 08:23
Dimitry Sibiryakov
DATABASE=d:\smetaxxi.mdb
Уж не пытаешься ли ты заставить птичку читать акцессовскую базу???
Брось, с акцесса лучше мигрировать на MS SQL. Там даже специальный визард есть на эту задачу.
Добавлено: 19 янв 2007, 14:59
Urslan
Dimitry Sibiryakov писал(а):Брось, с акцесса лучше мигрировать на MS SQL. Там даже специальный визард есть на эту задачу.
Визард-то есть, но у меня проект на DAO и читает только файлы *.MDB, а в проекте [/quote](>100 тыс. строк кода в интерфейсной части)[/quote]
Dimitry Sibiryakov писал(а):Уж не пытаешься ли ты заставить птичку читать акцессовскую базу???
Птичка - отличается умом и сообразительностью. База то под вторую причку, а расширение только чтобы DAO не ругался. Gemini ODBC и FB расширение файла до одного (sorry) места.
Лучше скажите можно ли вообще подконектиться к Embedded через ODBC? Ведь есть ограничение на расположение файлов сервера.
Re: Проблема с подключением Embedded через ODBC
Добавлено: 19 янв 2007, 17:02
hvlad
Urslan писал(а): Клиент: D:\IT\fb smeta xxi.xp\local\gds32.dll (полный путь)
Путь без пробелов не пробовал ?
Добавлено: 19 янв 2007, 20:38
kdv
расширение только чтобы DAO не
так DAO тоже какие-то там файлы по барабану, если он через ODBC работает. А если в ODBC создать System DSN, работает или нет?
Добавлено: 19 янв 2007, 22:48
Urslan
kdv писал(а):А если в ODBC создать System DSN
ODBC работает как с сервером Classic так и Embedded.
Urslan писал(а):Set db = OpenDatabase("smetaxxi", dbDriverNoPrompt, False, "ODBC;DATABASE=D:\IT\fb smeta xxi.xp\local\smetaxxi.mdb;UID=sysdba;PWD=masterkey;DSN=smetaxxi")
В случае Classic работает и с пробелами. A вот расширения кроме *.MDB DAO воспринимать не хочет (библиотеку то писали именно для Access'a).
Добавлено: 20 янв 2007, 01:01
kdv
*.MDB DAO воспринимать не хочет
сильно я сомневаюсь, что DAO нужен файл в случае работы через ODBC. Если DAO лезет к файлу помимо, то отсюда и ошибка.
то есть - коннект через ODBC есть. А из DAO к ODBC - нет. Кто виноват? Логика очень простая.
Добавлено: 21 янв 2007, 14:49
Urslan
kdv писал(а):Кто виноват?
Повторяю основной вопрос:
Почему работает Classic, но не Embedded?
Добавлено: 27 янв 2007, 10:33
Urslan
Ау!
Есть какой-то ответ на вопрос?
Во всех источниках указано, что Embedded ничем не отличается от Classic и может работать как клиент Classic, но у меня не проходит ни первый ни второй вариант.
Если какой-то момент я не учел, плз, укажите where is dog?

Добавлено: 27 янв 2007, 19:32
hvlad
Сначала научись на вопросы отвечать, хотя бы читать их
Добавлено: 27 фев 2007, 16:02
Urslan
Sorry, если что-то не понял или не так объяснил.
Попытаюсь сформулировать вопрос как можно проще:
Почему я не могу из MS Access подключиться через Gemini ODBC к базе FB2 при помощи fbembed.dll.
Аналогичный коннект с Classic Server успешно работает.
Если это где-то указывали, плз, ткните мордочкой.
Добавлено: 27 фев 2007, 18:03
kdv
объясняю. embedded - это dll, которая грузится тем, кто ее вызвал.
Поскольку это не коннект из компонент прямого доступа, то это не access, а dll ODBC-драйвера. Следовательно, dll ODBC-драйвера банально не может найти gds32.dll, которая нужна драйверу.
запустите filemon, посмотрите всю цепочку, кого там дергает access.
А вообще такой метод доступа (через "третьи руки") весьма сомнителен.
и приплетать тут классик (да хоть и супер), коннект к которому идет или по tcp или через локальный протокол, совершенно не надо.
кстати, я не знаю тонкостей, но думаю что gemini odbc понятия не имеет про fbembed.dll. и ищет просто gds32.dll.
Добавлено: 23 мар 2007, 17:13
Urslan
Спасибо всем за участие.
Проект уже приконнектил.
Правда обнаружился новый глюк.
Когда работаю с библиотекой АДО, то не отрабатывает метод 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.
Добавлено: 24 мар 2007, 00:00
kdv
дык хрен знает, что у тебя драйвер на сервер посылает. включи ему trace, и посмотри, какой именно запрос к ошибке приводит.
Вообще вся эта левизна с "обновлением" рекордсетов и т.п. давно уже плешь проела еще в BDE -
www.ibase.ru/devinfo/bde.htm (см. про "живые" запросы). Так что предлагаю не маяться ..., и формировать запросы вручную. Автоматизация редко доводит до добра. Особенно, когда понятия не имеешь, как именно эта автоматизация происходит.
Добавлено: 26 мар 2007, 15:09
Urslan
Спасибо всем!
Для меня все стало ясно теперь.
Добавлено: 26 мар 2007, 17:46
kdv
тогда поделись. а то нам неясно, что ж там у тебя было.
Добавлено: 18 апр 2007, 11:18
Urslan
В администраторе 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")
Выделенные параметры ОБЯЗАТЕЛЬНЫ для встроенного сервера.
Добавлено: 18 апр 2007, 11:55
hvlad
Urslan писал(а):В администраторе ODBC нужно просто зарегистрировать запись с необходимым именем, остальные параметры можно не указывать
Осталось ещё почитать про dsnless соединения, и ничего нигде не регистрировать
