Seite 1 von 1

[gelöst] Qt 4.2.3 vs. MySQL 5.0.37: Datum/Zeit-Formate

Verfasst: 2. August 2007 17:40
von xdecrepitx
Hallo Community

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. :oops:

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;
}

Verfasst: 2. August 2007 18:19
von xdecrepitx
Nachdem ich den Kopf eingeschaltet habe, weiss ich nun, dass nicht das andere Format das Problem verursacht hat, sondern ein gar nicht vorhandenes Datum in einem Datensatz.

:oops: