Seite 1 von 1

QSql mit ODBC + QString ??

Verfasst: 28. November 2007 11:43
von Zendel
Ich habe folgendes Problem mit dem Zugriff auf eine PervasiveDatenbank mit Hilfe von ODBC(Win).

Wenn ich in einer Abfrage eine Zeichenkette abfrage, bekomme ich diese immer ein Zeichen kürzer als in der Datenbank eingetragen zurück, d.h. es wird bei der Umwandlung aus dem Record in einen QString das letzte Zeichen abgeschnitten. (Mit MS Query/Excel bekomme ich per ODBC den richtigen String aus der Datenbank.)

Code: Alles auswählen


QSqlQuery query(db);
QString str_Query = "Select LU_NAM,LU_KDR,LU_VMT,PPointer from LU_MASKEP order by LU_KDR";
query.prepare(str_Query);
query.exec();
	
QSqlRecord record = query.record();
	
while ( query.next()){
 QString kdr = query.value(record.indexOf("LU_KDR")).toString(); 
}

macht aus "12331" [Datenbank] -> "1233" [QString/Query]
(Ein Integerwert wird vollständig als int übergeben.)

Hat jemand von euch ne Idee woran das liegen kann? Ich benutze OpenSource Qt version 4.3.2 und WinXP bzw Win2000 tritt dieses auch auf.

Verfasst: 3. Dezember 2007 08:52
von QT-Junkee
bool QSqlResult::prepare ( const QString & query ) [virtual protected]
Prepares the given query for execution; the query will normally use placeholders so that it can be executed repeatedly. Returns true if the query is prepared successfully; otherwise returns false.

Wahrscheinlich sind die Platzhalter daran schuld, versuch statt prepare lieber einen QString zu basteln und dann Query.exec(QString) auszuführen
z.B :


Code: Alles auswählen

		QSqlQuery query;
		QString sNumber, sText;
		sNumber = "[No]";   
		QString select = "SELECT ";
		select.append(sNumber);
		select.append(" ,");
		select.append(sLanguage);
		select.append(" FROM T_Texte WHERE [No] <= 1000");
		// After the build of the select string, execute it
		query.exec(select);
		while (query.next()) 
		{
			sNumber = query.value(0).toString();
			sText = query.value(1).toString();
			sText.replace(QString("'"), QString("''"));
			map.insert(sNumber, sText);
		}

QSql mit ODBC + QString ??

Verfasst: 3. Dezember 2007 13:10
von Zendel
Leider war es das nicht, ich habe ja den Select Befehl nur in das Prepare geschrieben, damit ich später einen Filter leichter hinzufügen kann.

Ich habe direkt diesen QString in das EXEC() geschrieben, hat auch nichts geholfen.

Code: Alles auswählen

query.exec("Select LU_NAM,LU_KDR,LU_VMT,PPointer from LU_MASKEP");
Ich vermut das der Speicher für den String zu kurz allokiert wird.

(Mit MySQL DB Zugriff wird das Abfrageergebnis richtig angezeigt/übergeben. Ich brauche aber unbedingt ODBC-Pervasive)