Russian Qt Forum

Qt => Базы данных => Тема начата: fear от Март 30, 2008, 02:33



Название: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 02:33
Собрал ibase драйвер с заголовками и либами firebird, с помощью IBExpert создал тестовую базу. При подключении - следующая ошибка: "Unsuccessful execution caused by a system error that precludes successful execution of subsequent statements Error opening database". Что не так?

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);
  QTextStream out(stdout);
 
  QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", "TestMyDB");
  db.setHostName("localhost");
  db.setDatabaseName("testdb");
  //db.setDatabaseName("D:/Temp/test.fdb");
  db.setUserName("TEST");
  db.setPassword("ABC");

  if(!db.open())
  {
    QString error = db.lastError().text();
    out<<"db open error: "<<error<<endl;
  }
  else
    out<<"db connection...";

  return 0;
}

_____________________________________________
Qt 4.3.1, VS2005, Vista, Firebird-2.0.1.12855-1-Win32


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Март 30, 2008, 12:36
TestDB в алиасах прописал?
Путь верный?
Если вместо TestDB указать полный путь к базе что получается?


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 12:48
TestDB в алиасах прописал?
Путь верный?
Если вместо TestDB указать полный путь к базе что получается?
testdb в алиасах есть
путь верный, пробовал подключаться и с помощью указания пути и с помощью алиаса, эффект один и тод же


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 13:10
Попытался создать новую БД IBExpert`ом указав ему не стандартную библиотеку gds32.dll, а собранную мной Qt\plugins\sqldrivers\qsqlibase4.dll. Получил в ответ ошибки:
"R6034 An aplication has made an attempt to load C runtime library incorrectly"
"Client Library is missing or invalid"


Собирал библиотеку следующим образом:
1) Заменил содержимое '\Qt\src\plugins\sqldrivers\ibase\ibase.pro' на
------------------------------------------------------------------------------------
TARGET    = qsqlibase
HEADERS      = ../../../sql/drivers/ibase/qsql_ibase.h
SOURCES      = main.cpp \
        ../../../sql/drivers/ibase/qsql_ibase.cpp

unix:!contains( LIBS, .*gds.* ):!contains( LIBS, .*libfb.* ):LIBS    *= -lgds

win32:!contains( LIBS, .*gds.* ):!contains( LIBS, .*fbclient.* ) {   
INCLUDEPATH += D:\Programs\Firebird\Firebird_2_0\include
LIBS += -LD:\Programs\Firebird\Firebird_2_0\lib
   !win32-borland:LIBS *= -lfbclient_ms
   win32-borland:LIBS  += fbclient_bor.lib
}

include(../qsqldriverbase.pri)
------------------------------------------------------------------------------------
2) Собрал проект
   cd \Qt\src\plugins\sqldrivers\ibase
   qmake ibase.pro && nmake


Название: Re: Error opening database [Firebird]
Отправлено: Пантер от Март 30, 2008, 16:15
Попробуй логин и пароль:
SYSDBA
MASTERKEY


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 17:02
Попробуй логин и пароль:
SYSDBA
MASTERKEY
Пробовал, результат тод же


Название: Re: Error opening database [Firebird]
Отправлено: Пантер от Март 30, 2008, 17:10
1. Сделай не
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", "TestMyDB"), а
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE")
2. Попробуй приконектиться из демосовского примера.


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 17:13
1. Сделай не
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", "TestMyDB"), а
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE")
2. Попробуй приконектиться из демосовского примера.
так тоже пробовал - в обоих случаях та же самая ошибка


Название: Re: Error opening database [Firebird]
Отправлено: Пантер от Март 30, 2008, 17:39
:(
1. Проверь, есть ли fbclient.dll в области видимости.
2. Попробуй пересобрать кутю и сделать sql драйвера не плагинами, а статиком.


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 17:50
1. Проверь, есть ли fbclient.dll в области видимости.
занёс путь к Firebird`овскому bin`у в PATH - эффект нулевой
2. Попробуй пересобрать кутю и сделать sql драйвера не плагинами, а статиком.
счас попробую qt пересобрать
кстати, после сборки интегратор запускать надо или можно подменить qt`шную директорию новой сборкой?


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Март 30, 2008, 18:41
Ну, совать IBExpert-у Qt-ёвый драйвер - это конечно сильно. :D

Попробуй стандартный демос sqlbrowser.
У меня он подключается и по алиасу и по путям.

Если не подключится - запусти под Depend-ом или отладчиком, и смотри - мож каких длл-ек ему не хватает.

Хотя такое сообщение ещё выдаётся если сервер не работает.

Пересобирать Qt в статик по моему не стоит.


Название: Re: Error opening database [Firebird]
Отправлено: Пантер от Март 30, 2008, 19:00
1. Не кутю в статик, а sql в статик (-qt-sql-ibase).
2. fear уже писал, что sqlbrowser пробовал и не помогло.
3. А вот на счет незапущенного сервера - это может быть... Хотя IBExpert ведь коннектится....


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 20:09
Qt собрать не получилось, пробовал конфигурить так:
Цитировать
-debug-and-release -qt-sql-ibase -I D:\Programs\Firebird\Firebird_2_0\include -L D:\Programs\Firebird\Firebird_2_0\lib -l fbclient_ms -qt-style-windowsvista

Сервер запущен, соответствующие службы весят. На всякий случай убедился, создав новую базу средствами поставляемого с ним термина - isql, база создалась. IBExpert походу пользует firebird embedded, т.к. новую базу он увидел только после того как ему был указан путь к ней. Qt`ный sql browser отреагировал на попытку подключения к новой базе как и раньше - с ошибкой.


Название: Re: Error opening database [Firebird]
Отправлено: Пантер от Март 30, 2008, 20:37
В файле Qt/4.3.3/src/sql/drivers/drivers.pri нужно прописать:
Код:
contains(sql-drivers, ibase) {^
    HEADERS += drivers/ibase/qsql_ibase.h^
    SOURCES += drivers/ibase/qsql_ibase.cpp^
    ^
    unix:LIBS *= -lgds  ^
    ^
    win32 {^
        INCLUDEPATH += путь\Firebird_2_0\include^
        LIBS += -Lпуть\Firebird_2_0/lib^
        !win32-borland:LIBS *= -lfbclient_ms^
        win32-borland:LIBS  += fbclient_bor.lib    }^
}^
Файл Qt/4.3.3/src/plugins/sqldrivers/ibase/ibase.pro должен быть таким:
Код:
TARGET   = qsqlibase

HEADERS         = ../../../sql/drivers/ibase/qsql_ibase.h
SOURCES         = main.cpp \
                  ../../../sql/drivers/ibase/qsql_ibase.cpp

unix:!contains( LIBS, .*gds.* ):!contains( LIBS, .*libfb.* ):LIBS    *= -lgds

win32:!contains( LIBS, .*gds.* ):!contains( LIBS, .*fbclient.* ) {
        INCLUDEPATH += путь\Firebird_2_0\include
        LIBS += -Lпуть\Firebird_2_0/lib
        !win32-borland:LIBS *= -lfbclient_ms
        win32-borland:LIBS  += fbclient_bor.lib
}

include(../qsqldriverbase.pri)
Собираешь с ключиком -qt-sql-ibase
Слово "путь" заменяешь на расположение огнептица. Если что-то не понятно - в поиск, вопрос неоднократно поднимался и был ответ, который я и предоставил (по памяти).
Только это решение для MinGW, для студии может отличаться...


Название: Re: Error opening database [Firebird]
Отправлено: Вячеслав от Март 30, 2008, 22:02
Qt собрать не получилось, пробовал конфигурить так:
Цитировать
-debug-and-release -qt-sql-ibase -I D:\Programs\Firebird\Firebird_2_0\include -L D:\Programs\Firebird\Firebird_2_0\lib -l fbclient_ms -qt-style-windowsvista

Сервер запущен, соответствующие службы весят. На всякий случай убедился, создав новую базу средствами поставляемого с ним термина - isql, база создалась. IBExpert походу пользует firebird embedded, т.к. новую базу он увидел только после того как ему был указан путь к ней. Qt`ный sql browser отреагировал на попытку подключения к новой базе как и раньше - с ошибкой.
IBE юзает то,что ему сказано - по умолчанию gsd32.dll .Инсталятор птица создает копию fbclient.dll с этим именем (для совместимости) в widdows/system32. размер fbembed несколько больше чем fbclient.dll (который лежит вместе с птицем) так-что разберись _какой_ драйвер пытается грузить QT ( Если юзаешь студию - смотри при загрузке какой модуль она цепляет).У меня были грабли с qt-шным плагином когда сдуру поменял птица на 2.1 на ходу(не пересобирая плагин - хотя почему -хз) :( ... А так - пути для инклюдов и либы поставил и nmake в зубы ...
Как уже сказали - тренируйся на sqlBrowser'e - он должен показывать QIBASE драйвер ...


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 30, 2008, 22:06
Как уже сказали - тренируйся на sqlBrowser'e - он должен показывать QIBASE драйвер ...
Так он и показывает его.

Повторил действия под Windows XP x32 - всё гладко. Значит проблема с совместимостью с Vista x64. Попробую пересобрать qt с статическим ibase драйвером, либо придётсясидеть под VMware :)


Название: Re: Error opening database [Firebird]
Отправлено: Вячеслав от Март 30, 2008, 23:09
Vista, Firebird-2.0.1.12855-1-Win32
Таки может птица 64 битного поставить для начала ?


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 31, 2008, 02:00
Vista, Firebird-2.0.1.12855-1-Win32
Таки может птица 64 битного поставить для начала ?

Если верить офф сайту, под win такого не существует...


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Март 31, 2008, 06:55
Добейся чтобы IBExpert по алиасу подключаелся со стандартным клиентом.
Потом можно и Qt мучать. :-)


Название: Re: Error opening database [Firebird]
Отправлено: Вячеслав от Март 31, 2008, 09:52
Vista, Firebird-2.0.1.12855-1-Win32
Таки может птица 64 битного поставить для начала ?

Если верить офф сайту, под win такого не существует...
Цитировать
Win64 Superserver/Classic & Embedded
Windows Installer, Firebird-2.1.0.17755_0_x64.exe   7 Mb
Zip kit, Firebird-2.1.0.17755-0_x64.zip   9 Mb
Embedded, separate download, zip kit, Firebird-2.1.0.17755-0_x64_embed.zip   5 Mb
Debug Builds
Zip kit, Firebird-2.1.0.17755-0_x64_pdb.zip   15 Mb
Embedded, separate download, zip kit, Firebird-2.1.0.17755-0_x64_embed_pdb.zip   8 Mb
Не пойдет ? для пробы ?
Таки все-таки _какой_ клиент цепляет IBE и какой QT ?


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Март 31, 2008, 10:24
Так ты собирал Qt под x64?
Тады естественно, работать не будет - нужно и клиента от птица x64 брать.
Если я не ошибаюсь, интероп 32-64 в винде далеко не прозрачный. :-)


Название: Re: Error opening database [Firebird]
Отправлено: Вячеслав от Март 31, 2008, 10:43
Ну тогда почти все ясно ;) IBE- 32 бита тож ?


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 31, 2008, 13:33
Цитировать
Windows Installer, Firebird-2.1.0.17755_0_x64.exe   7 Mb
дай ссылку, откуда это...

Цитировать
Таки все-таки _какой_ клиент цепляет IBE и какой QT ?
IBE и qt цепляют FBCLIENT.DLL

Цитировать
IBE- 32 бита тож ?
да

Цитировать
Так ты собирал Qt под x64?
Qt собиралось как x32

А с каким составом приложение поставлять на чистую винду?
Цитировать
DatabaseTest.exe
Microsoft.VC80.CRT.manifest
msvcm80.dll
msvcp80.dll
msvcr80.dll
QtCore4.dll
QtGui4.dll
QtSql4.dll
qsqlibase4.dll
fbclient.dll
с таким составом пишет что драйвер не загружен



Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Март 31, 2008, 16:20
Для птица 2.0.х забыл MSVCR71.dll


Название: Re: Error opening database [Firebird]
Отправлено: pastor от Март 31, 2008, 17:04
Если верить офф сайту, под win такого не существует...

Наверное у нас с вами разные офф сайты ;)

Цитировать
Firebird 2.1 Release Candidate 2 is available for field testing on 64-bit and 32-bit Windows, Linux and MacOSX x86.

http://www.firebirdsql.org/index.php?op=files&id=fb210_RC2


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 31, 2008, 17:21
Для птица 2.0.х забыл MSVCR71.dll
ничего не меняет, поидее и 'fbclient.dll' не к чему... Microsoft.VC80.CRT.manifest редактировать не надо случайно, стандартный подойдёт?
lastError после попытке открытия возвращает "Driver not loaded Driver not loaded".


Название: Re: Error opening database [Firebird]
Отправлено: pastor от Март 31, 2008, 17:45
lastError после попытке открытия возвращает "Driver not loaded Driver not loaded".

Попробуёте поюзать поиск по форуму на предмет "Driver not loaded". Эта тема обсуждалась много раз, возможно найдете решение этой проблемы


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 31, 2008, 18:21
Цитировать
Наверное у нас с вами разные офф сайты
http://www.firebirdsql.org/index.php?op=files&id=fb210_RC2
спасибо, не обратил внимание на тестируемые версии

поиск действительно помог :) приложение над поставлять в след. виде:
Цитировать
DatabaseTest.exe
Microsoft.VC80.CRT.manifest
msvcm80.dll
msvcp80.dll
msvcr80.dll
QtCore4.dll
QtGui4.dll
QtSql4.dll
sqldrivers/qsqlibase4.dll


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 31, 2008, 18:58
попробовал счас пересобрать плагин с 64х битной птицей, sqlbrowser при конекте выкидывает ошибку "can`t format message 13:98 -- message file D:\Lang\Qt\4.3.1\demos\sqlbrowser\firebird.msg not found error opening database"


Название: Re: Error opening database [Firebird]
Отправлено: Пантер от Март 31, 2008, 19:12
Закинь из огнептица firebird.msg куда он просит и увидишь свою ошибку.


Название: Re: Error opening database [Firebird]
Отправлено: fear от Март 31, 2008, 19:43
Закинь из огнептица firebird.msg куда он просит и увидишь свою ошибку.
да ошибка та же самая, а что файл такой firebird.msg, для чего?


Название: Re: Error opening database [Firebird]
Отправлено: Пантер от Март 31, 2008, 21:43
Этот файл содержит описания ошибок огнептица. Его нужно закидывать на все клиенты, чтобы выдавало не код ошибки, а ее наименование. У меня на всех клиентах этот файл в корневике диска c:\.


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Апрель 01, 2008, 07:11
Так, значит собираем в кучу:
1) Клиент птица, драйвер Qt и сама Qt должны быть одной битности. Или всё 64, или все 32.
2) Клиент птица версий до 2.0.3 включительно линкован с MSVCR71.dll. версия 2.1 - msvcr80.dll и тербует манифест или установленного рантайма. снапшоты 2.0.4 - не в курсе. :)
3) IBE 32-битный и будет работать только с 32-битным клиентом.
4) firebird.msg - файл с описаниями ошибок должен лежать там же, где и прога, или его положение можно указать ключиком в реестре - смотри доку. :)


Название: Re: Error opening database [Firebird]
Отправлено: fear от Апрель 01, 2008, 13:33
1) Клиент птица, драйвер Qt и сама Qt должны быть одной битности. Или всё 64, или все 32.
на чём основано это утверждение? кто-то собирал qt x64?

2) Клиент птица версий до 2.0.3 включительно линкован с MSVCR71.dll. версия 2.1 - msvcr80.dll и тербует манифест или установленного рантайма. снапшоты 2.0.4 - не в курсе. :)
любое приложение собранное в VS .NET, должно поставляться с манифестом

3) IBE 32-битный и будет работать только с 32-битным клиентом.
IBE 32x отлично работает с 64х битным клиентом


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Апрель 01, 2008, 20:07
1) http://dnjonline.com/article.aspx?ID=jun07_access3264
http://en.wikipedia.org/wiki/Windows_XP_Professional_x64_Edition раздел Compatibility with 32-bit applications
http://www.codeproject.com/KB/system/64BitOSAndPortingIssues.aspx
В общем выдача гугля по запросу "64 bit dll in 32 bit applications" - чиселки можно поменять местами :-)
2) Программы, собранные VC .Net и VC 2003 (7.0 и 7.1 соответственно) не требовали манифеста (птиц 2.0.3 с сайта собран VC 2003 и манифеста не требует)
3) Мистика. :-)


Название: Re: Error opening database [Firebird]
Отправлено: fear от Апрель 01, 2008, 23:39
2) Программы, собранные VC .Net и VC 2003 (7.0 и 7.1 соответственно) не требовали манифеста (птиц 2.0.3 с сайта собран VC 2003 и манифеста не требует)
манифест может быть встроен в exe`шник

3) Мистика. :-)
факт :-)


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Апрель 02, 2008, 07:16
мистики никакой нет, манифест можно встроить в exe`шник
Ну и напусти редактор ресурсов на те же fbserver.exe, gbak.exe, gfix.exe, isql.exe от 2.0.3
И посмотри, что там кроме версии есть. :-)

А про IBE - ты же говорил, что он у тебя через embedded бегает.
Может ты имеешь в виду, что конектишся к 64-битному серверу? Эт нормально.

Ну и можно таки чистый эксперимент провести - написать примитивные прогу и дллку разными битностями, и посмотреть как их можно сочетать - всего-то 6 случаев надо проверить. :-)


Название: Re: Error opening database [Firebird]
Отправлено: fear от Апрель 02, 2008, 19:39
А про IBE - ты же говорил, что он у тебя через embedded бегает.
Может ты имеешь в виду, что конектишся к 64-битному серверу? Эт нормально.
это я предпологал, а на самом деле, IBE конектится к 64х серверу через клиента-dll`ку от того самого 64х сервера. Получается эт тоже нормально :-)

Ну и можно таки чистый эксперимент провести - написать примитивные прогу и дллку разными битностями, и посмотреть как их можно сочетать - всего-то 6 случаев надо проверить. :-)
да что-то не охото :-)


Название: Re: Error opening database [Firebird]
Отправлено: Tonal от Апрель 03, 2008, 07:00
это я предпологал, а на самом деле, IBE конектится к 64х серверу через клиента-dll`ку от того самого 64х сервера. Получается эт тоже нормально :-)
Цитировать
Маммой кланус! (с) Гоблин