Für ein kleines DB-Import/Export-Programm lese ich mittels QSqlQuery alle Datensätze aus mehreren MySQL-Tabellen und erstelle daraus QStrings welche anschliessend in ein *.sql-File wandern.
So weit so gut, doch leider haben die Datum/Zeit-Werte, welche ich mittels QSqlQuery::exec(sql) aus den Tabellenspalten mit Typ "datetime" lese, das Format YYYY-MM-DDTHH-MM-SS. Beim anschliessenden Versuch, die Datensätze wieder zu importieren, liefert MySQL die Fehlermeldung, dass die Daten kein gültiges Format haben. Was nicht ganz abwegig ist, sind diese doch ursprünglich im Format YYYY-MM-DD HH-MM-SS (ohne T vor der Zeit) gespeichert...
Hat jemand eine Idee, wie ich es unterbinden kann, dass Qt dieses T einfügt? Da es sich um einigermassen grosse Datenmengen aus Tabellen verschiedener Strukturen handelt, würde ich das gerne direkt beim Auslesen oder dem Schreiben der Daten erledigen, ohne gross mit QString::replace oder ähnlichem die Datensätze durchforsten zu müssen.
Sorry, falls dies eine doofe Anfängerfrage ist, aber Qt/C++ ist noch ziemliches Neuland für mich.
Hier die minimalisierten Methoden, welche zum Einsatz kommen:
Code: Alles auswählen
// erstmal die daten holen
QSqlQuery ImportExport::getData(const QString &table) {
QSqlQuery query("SELECT * FROM "+table);
return query;
}
// dann das query an die methode übergeben, welche den sql-string erstellt
QStringList ImportExport::createSql(QSqlQuery &query, const QString &table) {
QStringList sql; // der rückgabewert
QString line; // einzelne zeilen welche in die QSringList eingefügt werden
QString escapeString; // modifizierte zeile mit geschützten apostrophs
QSqlRecord row;
QString before1("\\'");
QString after1("\'");
QString before2("\'");
QString after2("\\'");
sql.append("\n# "+table+" --------------------------\n\n");
while(query.next()) {
row = query.record();
line = "INSERT INTO "+table+" VALUES ("; // zeile beginnen
for(int i=0;i<row.count();++i) { // alle spalten der row in die zeile packen
escapeString = row.value(i).toString().replace(before1,after1,Qt::CaseInsensitive);
escapeString = escapeString.replace(before2,after2,Qt::CaseInsensitive);
line += "'"+escapeString+"'";
if(i<(row.count()-1))
line += ", ";
}
line += ");\n"; // zeile fertig
sql.append(line);
}
return sql;
}