SQL Verbindung reisst immer ab

Alles rund um die Programmierung mit Qt
Antworten
KalinkaFettarmerKefir
Beiträge: 1
Registriert: 13. August 2009 21:43
Kontaktdaten:

SQL Verbindung reisst immer ab

Beitrag von KalinkaFettarmerKefir »

hallo zusammen

bin neu im forum und hoffe wir können uns nett über qt und c++ unterhalten ;)

zur zeit arbeite ich an einem datenbank projekt und möchte darum mal eine frage in die runde werfen:

ich arbeite mit qt 4.5.2 und visual studio 2008, und habe mein qt mit mysql treibern selbst kompiliert.
der treiber ist also geladen, und mysql verbindungen kommen auch zustande. allerdings reisst die verbindung immer sofort ab, sobald die funktion verlassen wird, in welcher die verbindung mit

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");

... und so weiter, erzeugt wurde.
in der gleichen funktion noch, gibt sogar db.isOpen() ein true zurück, aber sobald die funktion verlassen wird, ists damit vorbei.

ich vermute, dass das db objekt nur kurzzeitig existiert, und habe darum db schon im header deklariert, aber das hat nichts geholfen...
sollte ich vielleicht bei der erzeugung von db den new operator einsetzen? meine versuche in der richtung haben natürlich auch nicht funktioniert... -_-

wenn jemand was weiss wäre ich sehr dankbar!

:wink:
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Du postest ja gleich in mehreren Foren ;-)

Wie wir dir dort schon geschrieben haben....

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");

bei ner mySqlDB is recht naja sagen wir sinnlos ;-)
Das die Variable nach dem verlassen des Funktionscopes nicht mehr zu sehen ist liegt daran das db auf dem heap angelegt ist.

Was du machen kannst.... in ner anderen Fkt checken ob die DB noch da ist und offen

bool isOpen = QSqlDatabase::database ( "name den du der db gegeben hast", false ).isOpen();

------
Edit habe grade gesehen das der Code so auch im Assistant drin sthet..... das ja aber höchst verwirrend, vor allem da über den Code noch steht das man so ne MySql Db öffnet....
Ich hätts so gemacht:
QSqlDatabase::addDatabase("QMYSQL");
sowas
Beiträge: 105
Registriert: 19. September 2006 16:02

SQL Verbindung reisst immer ab

Beitrag von sowas »

Hallo,
es fehlt die Angabe wie du die Verbindung mit der Datenbank herstellt über eine GUI oder direkt aus der Konsole.
Falls aus der Konsole, dann müsste der folgende Auszug aus den Torlls-Beispielen laufen, oder du könntest ein anderes Beispiel nehmen und nur den richtigen Treiber für
Postgresql "QPSQL" einsetzen.

// aus den Trolltech Beispielen
// sql-Tabelle
/*
create table person
(
id integer primary key,
firstname varchar(20),
lastname varchar(20)
);
insert into person values(101, 'Danny', 'Young');
insert into person values(102, 'Christine', 'Holand');
insert into person values(103, 'Lars', 'Gordon');
insert into person values(104, 'Roberto', 'Robitaille');
insert into person values(105, 'Maria', 'Papadopoulos');
*/


#include <QApplication>
#include <QtSql>

int main( int argc, char* argv[] )
{
QApplication app( argc, argv );
QSqlDatabase datenbank = QSqlDatabase::addDatabase("QPSQL");
// datenbank.setHostName(""); ------ > nicht notwendig wenn lokal
datenbank.setDatabaseName("deine_psql_datei");
// datenbank.setUserName(""); -"-
// datenbank.setPassword(""); -"-

if (!datenbank.open()) {
return false;
}

QSqlQuery query;
int numRows;
query.exec("SELECT * from person");

if ( datenbank.driver()->hasFeature(QSqlDriver::QuerySize)) {
numRows = query.size();
} else {
query.last();
numRows = query.at() + 1;
}
qDebug("... %d Anzahl", numRows);

return 0;
}

tschüss
Antworten