[gelöst] MySQL-Datenbank in Qt anlegen

Alles rund um die Programmierung mit Qt
Antworten
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

[gelöst] MySQL-Datenbank in Qt anlegen

Beitrag 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
Zuletzt geändert von dontinelli am 19. November 2011 18:11, insgesamt 1-mal geändert.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: MySQL-Datenbank in Qt anlegen

Beitrag 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..
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

Re: MySQL-Datenbank in Qt anlegen

Beitrag von dontinelli »

D.h. ich kann das "db.setDatabaseName();" weglassen und trotzdem verbinden? Habe immer gedacht, dass man da eine Datenbank angeben muss...
dontinelli
Beiträge: 146
Registriert: 22. September 2006 20:53

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

Beitrag 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();
Antworten