Russian Qt Forum
Май 17, 2024, 20:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Error opening database [Firebird]  (Прочитано 29036 раз)
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
« Последнее редактирование: Март 30, 2008, 12:45 от fear » Записан
Tonal
Гость
« Ответ #1 : Март 30, 2008, 12:36 »

TestDB в алиасах прописал?
Путь верный?
Если вместо TestDB указать полный путь к базе что получается?
Записан
fear
Гость
« Ответ #2 : Март 30, 2008, 12:48 »

TestDB в алиасах прописал?
Путь верный?
Если вместо TestDB указать полный путь к базе что получается?
testdb в алиасах есть
путь верный, пробовал подключаться и с помощью указания пути и с помощью алиаса, эффект один и тод же
Записан
fear
Гость
« Ответ #3 : Март 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
« Последнее редактирование: Март 30, 2008, 13:24 от fear » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 30, 2008, 16:15 »

Попробуй логин и пароль:
SYSDBA
MASTERKEY
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
fear
Гость
« Ответ #5 : Март 30, 2008, 17:02 »

Попробуй логин и пароль:
SYSDBA
MASTERKEY
Пробовал, результат тод же
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Март 30, 2008, 17:10 »

1. Сделай не
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", "TestMyDB"), а
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE")
2. Попробуй приконектиться из демосовского примера.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
fear
Гость
« Ответ #7 : Март 30, 2008, 17:13 »

1. Сделай не
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", "TestMyDB"), а
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE")
2. Попробуй приконектиться из демосовского примера.
так тоже пробовал - в обоих случаях та же самая ошибка
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Март 30, 2008, 17:39 »

Грустный
1. Проверь, есть ли fbclient.dll в области видимости.
2. Попробуй пересобрать кутю и сделать sql драйвера не плагинами, а статиком.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
fear
Гость
« Ответ #9 : Март 30, 2008, 17:50 »

1. Проверь, есть ли fbclient.dll в области видимости.
занёс путь к Firebird`овскому bin`у в PATH - эффект нулевой
2. Попробуй пересобрать кутю и сделать sql драйвера не плагинами, а статиком.
счас попробую qt пересобрать
кстати, после сборки интегратор запускать надо или можно подменить qt`шную директорию новой сборкой?
« Последнее редактирование: Март 30, 2008, 18:33 от fear » Записан
Tonal
Гость
« Ответ #10 : Март 30, 2008, 18:41 »

Ну, совать IBExpert-у Qt-ёвый драйвер - это конечно сильно. Веселый

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

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

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

Пересобирать Qt в статик по моему не стоит.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Март 30, 2008, 19:00 »

1. Не кутю в статик, а sql в статик (-qt-sql-ibase).
2. fear уже писал, что sqlbrowser пробовал и не помогло.
3. А вот на счет незапущенного сервера - это может быть... Хотя IBExpert ведь коннектится....
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
fear
Гость
« Ответ #12 : Март 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 отреагировал на попытку подключения к новой базе как и раньше - с ошибкой.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Март 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, для студии может отличаться...
« Последнее редактирование: Март 30, 2008, 20:39 от panter_dsd » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Вячеслав
Гость
« Ответ #14 : Март 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 драйвер ...
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 20.