Seite 1 von 1

[gelöst] MySQL-Datenbank in Qt anlegen

Verfasst: 19. November 2011 15:48
von dontinelli
Hallo zusammen

Im Betreff ist die Frage eigentlich schon gestellt: Wie kann man in Qt eine MySQL-Datenbank (nicht Tabelle!) anlegen? Ich habe dies mit folgendem Befehl versucht:

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase(ui->databaseDriver->currentText());
db.exec("DROP DATABASE IF EXISTS '"+ui->databaseName->text()+"'");
db.exec("CREATE DATABASE '"+ui->databaseName->text()+"'");
Dies liefert mir jedoch keine neue Datenbank, sonder nur eine Fehlermeldung (welche ich durchaus nachvollziehen kann):

Code: Alles auswählen

QSqlQuery::exec: database not open
QSqlQuery::exec: database not open
Das Problem ist aber ja, dass ich mich noch gar nicht zu der Datenbank verbinden kann, da diese zuvor noch erstellt werdne muss. Kann man diesen Teufelskreis durchbrechen, ohne über Konsolen-Befehle gehen zu müssen?

LG
Dontinelli

Re: MySQL-Datenbank in Qt anlegen

Verfasst: 19. November 2011 16:26
von solarix
dontinelli hat geschrieben: Das Problem ist aber ja, dass ich mich noch gar nicht zu der Datenbank verbinden kann, da diese zuvor noch erstellt werdne muss.
Falsch: Das Problem ist, dass du noch gar keine Verbindung hast.. siehe:
http://doc.qt.nokia.com/stable/sql-connecting.html


Du verbindest du ja nicht auf ein Datenbank-Schema oder -Tabelle (welche du erstellen möchtest), sondern zu einem Server..


hth..

Re: MySQL-Datenbank in Qt anlegen

Verfasst: 19. November 2011 17:48
von dontinelli
D.h. ich kann das "db.setDatabaseName();" weglassen und trotzdem verbinden? Habe immer gedacht, dass man da eine Datenbank angeben muss...

Re: [gelöst] MySQL-Datenbank in Qt anlegen

Verfasst: 19. November 2011 18:14
von dontinelli
Ja, es klappt. Vielen Dank solarix für den Hinweis.

Für andere mit dem selben Problem hier die Lösung:

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase(ui->databaseDriver->currentText());
QSqlQuery q(db);
QString query;

db.setHostName(ui->databaseHost->text());
db.setUserName(ui->databaseUsername->text());
db.setPassword(ui->databasePassword->text().toAscii());
if(!db.open()) qDebug()<<db.lastError().text();

query=QString("CREATE DATABASE IF NOT EXISTS %1").arg(ui->databaseName->text());
if(!q.exec(query)) qDebug()<<q.lastError().text();