Hi Andreas,
Am Saturday 07 June 2003 10:58 schrieb Andreas Bartholome:
Ich möchte ein Bibliotheksprogramm mit QT schreiben. Dazu muss
ich an eine Daztenbank z.B. postgresql anbinden.
Entwerfe ich die Maske mit QTdesigner so funktioniert beim
Preview alles prächtig. Die Anbindung mit dem Treiber QPSQL7 an
Postgresql funktioniert
Du musst den Connect selber implementieren!
Der Designer erledigt das nicht für Dich, funzt zwar in der
Vorschau, aber ansonsten nicht ...
Auch Compilieren geht gut.
Aber wenn ich das erstellte Programm aufrufe meldet es :
QSqlDatabase warning: QPSQL7 driver not loaded
QSqlDatabase: available drivers: QMYSQL3 QPSQL7 QODBC3
Ummoeglich die Paepste Datenbank zu oeffen: Driver not loaded
Driver not loaded
Ich poste mal mein ersten Versuch mit Qt und Datenbank.
Darin sind bestimmt viele kleine Sachen, die man nicht macht :)
Zum testen reicht's aber alle mal...
(Wenn ich mal Zeit habe, passe ich den Kram an Scott Meyer's
Empfehlungen an *g*)
---------------- Klappt bei mir -------------------
#ifndef CONNECTOR_H_
#define CONNECTOR_H_
#include
#include <iostream>
#include
#include
#include
using namespace std;
class Connector : public QObject
{
public:
// Kontruktor für mysql
Connector::Connector()
{
this->HOST ="localhost";
this->USER ="root";
this->PASSWORD ="";
this->DRIVER="QMYSQL3";
this->DATABASE="mysql";
this->PORT=3306;
}
// Kontruktor für ???
Connector::Connector(QString h, QString db,
QString usr, QString pwd, QString drv,int port)
{
this->HOST = h;
this->USER = usr;
this->PASSWORD = pwd;
this->DRIVER = drv;
this->DATABASE = db;
this->PORT = port;
}
// Destruktor
Connector::~Connector()
{
}
// setXXX
void setHOST( QString );
void setUSER( QString );
void setPASSWORD( QString );
void setDRIVER( QString );
void setDATABASE( QString );
void setPORT( int );
void setInnerDefaultDB( QSqlDatabase * );
// getXXX
QString getHOST();
QString getUSER();
QString getPASSWORD();
QString getDRIVER();
QString getDATABASE();
QSqlQuery getQuery( char * );
int getPORT();
// _BOOL_
bool isConnect();
bool createDB( char * );
bool singleQuery( char * );
private:
QString HOST,USER,PASSWORD,DRIVER, DATABASE;
QSqlDatabase *innerDefaultDB;
int PORT;
};
inline QSqlQuery Connector::getQuery( char *MyQuery )
{
QSqlQuery query( QString( MyQuery ) + ";", innerDefaultDB );
return query;
}
inline bool Connector::singleQuery( char *MyQuery )
{
if ( ! innerDefaultDB->open() )
return false;
QSqlQuery query( QString( MyQuery ) + ";", innerDefaultDB );
if ( query.isActive() )
{
return true;
}
}
inline bool Connector::createDB( char *newdb )
{
if ( ! innerDefaultDB->open() )
return false;
QSqlQuery query( "CREATE DATABASE " + QString( newdb ) + ";",
innerDefaultDB );
if ( query.isActive() )
return true;
return false;
}
inline bool Connector::isConnect()
{
innerDefaultDB = QSqlDatabase::addDatabase( DRIVER );
innerDefaultDB->setDatabaseName( DATABASE );
innerDefaultDB->setUserName( USER );
innerDefaultDB->setPassword( PASSWORD );
innerDefaultDB->setHostName( HOST );
innerDefaultDB->setPort( PORT );
if ( ! innerDefaultDB->open() )
return false;
return true;
}
// getXXX
inline QString Connector::getHOST()
{
return this->HOST;
}
inline QString Connector::getUSER()
{
return this->USER;
}
inline QString Connector::getPASSWORD()
{
return this->PASSWORD;
}
inline QString Connector::getDRIVER()
{
return this->DRIVER;
}
inline QString Connector::getDATABASE()
{
return this->DATABASE;
}
inline int Connector::getPORT()
{
return this->PORT;
}
// setXXX
inline void Connector::setInnerDefaultDB( QSqlDatabase *defaultDB )
{
this->innerDefaultDB = defaultDB;
}
inline void Connector::setHOST( QString s )
{
this->HOST = s;
}
inline void Connector::setUSER( QString s )
{
this->USER = s;
}
inline void Connector::setPASSWORD( QString s )
{
this->PASSWORD = s;
}
inline void Connector::setDRIVER( QString s )
{
this->DRIVER = s;
}
inline void Connector::setDATABASE( QString s )
{
this->DATABASE = s;
}
inline void Connector::setPORT( int s )
{
this->PORT = s;
}
#endif // Connector Class
------------------------ Benutzung ---------------
Connector myConnect(
QString("www.netdynamite.de"),
QString("DATABASE"),
QString("User"), QString("Passwd"),
QString("QMYSQL3"), 3306);
// myConnect.setInnerDefaultDB( defaultDB );
if (! myConnect.isConnect() )
{
cout << "Kein Connect!" << endl;
}
QSqlQuery query = myConnect.getQuery("SELECT switch FROM server;");
if ( query.isActive() )
{
cout << "SQL query abgesetzt " << endl;
while ( query.next() )
{
if (! query.isNull(0) )
{
if ( query.value(0).toString() != "" )
{
cout << query.value(0).toString() << endl;
}
}
}
}
----------------------- schnipp -------------
Viel spass ...
Bye
Andre