Добрый день,
Подскажите где читать (или примерчиком): надо все действия с подключением к БД вынести в динамическую библиотечку, как тогда юзать эту БД?
спасибо...
а как бы ты юзал БД еслиб подключение создавалось, например, в файле connect.h а использовать надо в файле app.cpp, при этом первый приинклюден только к main.cpp?
Прошу прощения, но не совсем понимаю... (новичек я в С...)
пробую таким образом:
#include <QtGui>
#include <QtSql>
int main(int argc, char* argv[]) {
QApplication app (argc, argv);
QLibrary libdb("../db/bin/libdb");
if (libdb.load()) {
qDebug() << "==> main.cpp - libdb ok";
} else {
qDebug() << "==> main.cpp - libdb bad" << libdb.errorString();
}
typedef bool (*Fct) ();
Fct fct = (Fct)(libdb.resolve("createConnections"));
if (fct) {
qDebug() << "==> main.cpp - connect ok";
} else {
qDebug() << "==> main.cpp - connect bad";
}
QSqlDatabase db = QSqlDatabase::database("psql");
if ( !db.open() ) {
qDebug() << "Failed to open database: " << db.lastError().driverText();
}
}
#include "db.h"
bool createConnections()
{
QSqlDatabase db = QSqlDatabase::addDatabase( "QPSQL", "psql" );
db.setDatabaseName( "ArisPSQLBase" );
db.setUserName( "sanya" );
db.setPassword( "*****" );
db.setHostName( "192.168.87.1" );
if ( !db.open() ) {
qDebug() << "Failed to open database: " << db.lastError().driverText();
return FALSE;
}
return TRUE;
}
#ifndef __DB_H__
#define __DB_H__
#include <QtSql>
extern "C" {
bool createConnections();
}
#endif // __DB_H__
запусти демку %QTDIR%\demos\sqlbrowser и посмотри подключается она к твоей БД или нет (о результатах отпишись)
если приведенный код не полный, выкладывай полный тестовый код библиотеки и основной программы с pro-файлами
касяк где-то в соединении т.к. у меня тоже пишет
==> main.cpp - libdb ok
==> main.cpp - connect ok
хотя у меня нет ни базы ни постгреэскуэль
поковыраю еще может что найду
похоже косяк найден, у меня БД нет проверяй сам:
Fct fct = (Fct)(libdb.resolve("createConnections"));
if (fct)
{
fct(); // <<<< Вызов самой функции
qDebug() << "==> main.cpp - connect ok";
}
else
{
qDebug() << "==> main.cpp - connect bad";
}
typedef bool (*Fct) ();
Fct fct = (Fct)(libdb.resolve("createConnections"));
if (fct)
{
if (fct())
{
qDebug() << "==> main.cpp - connect ok";
}
else
{
qDebug() << "==> main.cpp - connect bad";
}
}
else
{
return 1;
}
да, все работает, спасибки
скобки забыл...
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)