Seite 1 von 1

QSqlField

Verfasst: 21. Juni 2007 10:35
von dust2
Hallo

Code: Alles auswählen

record=query.record();
for (int i = 0; i < record.count(); i++)
{ 
    item.name = record.field(i).name();    //gibt namen zurück ok
  item.value= query.value(i).toString() ; //gibt wert zurück ok
  item.value= record.field(i).value().toString(); //gibt nichts zurück???????

  QSqlField myfield = record.field(i);
  item.name = myfield().name();                //gibt namen zurück ok
  item.value=  myfield().value() .toString(); //gibt nichts zurück???????

}
laut Doku :QVariant QSqlField::value () const Returns the value of the field as a QVariant.

Im o.g. Beispiel gibt die .value Methode nichts zurück warum?

Daniel

Verfasst: 21. Juni 2007 10:40
von macman
Weil nichts drin steht? Oder der Typ wird nicht unterstützt.

Hallo macman

Verfasst: 21. Juni 2007 10:51
von dust2
Hallo macman,

sorry für die Frage, aber ich würde es gerne verstehen:
Wieso steht nichts drin?
Die zuweisung QSqlField field = record.field(i); kopiert doch das aktuelle Feld aus dem Record?
Neben dem zu Recht bemängelten schlampigen Stil war noch ein Schreibfehler im Posting:

Code: Alles auswählen

item.name = myfield.name();                //gibt namen zurück ok
item.value=  myfield.value().toString(); //gibt nichts zurück???????

Daniel

Re: Hallo macman

Verfasst: 21. Juni 2007 11:04
von macman
dust2 hat geschrieben:Die zuweisung QSqlField field = record.field(i); kopiert doch das aktuelle Feld aus dem Record?
Richtig, aber wenn in dem Feld nichts drin steht, dann kommt auch nichts zurück. Ich gehe aber mal davon aus, das ehr der Typ nicht passt. Das die Felder nicht leer sind, solltest Du schon geprüft haben.
Aus der Doku:
QString QVariant::toString () const
Returns the variant as a QString if the variant has type() String, Bool, ByteArray, Char, Date, DateTime, Double, Int, LongLong, StringList, Time, UInt, or ULongLong; otherwise returns an empty string.
See also canConvert() and convert().
Man beachte das canConvert() am Ende. Pack den Inhalt des Feldes in einen QVariant und prüfe es genauer.

Verfasst: 21. Juni 2007 11:43
von dust2
Hallo macman,

also der QVariant-Rückgabewert von record.field(i).value() bzw. myfield.value() ist isNull () und isValid()!


Daniel

Verfasst: 21. Juni 2007 12:03
von macman
Ich kann noch keinen Fehler von Qt sehen. Muss dazu sagen, das ich mit Datenbanken und Qt bisher sehr wenig zu tun hatte. Mit Datenbanken hatte ich bisher in Verbindung mit RealBasic, VisualBasic und PHP zu tun.

In Datenbanken können Felder NULL sein, das käme dann auch in den QVariant. Nach den bisherigen Informationen würde ich den Fehler in der Datenbank suchen.

Verfasst: 21. Juni 2007 13:22
von dust2
Datenbank und Query sind meiner Meinung nach ok, da

Code: Alles auswählen

item.value= query.value(i).toString();
ja den korrekten Wert zurückgibt.
Nur wenn ich über das record auf den Wert zugreifen will, gehts schief!
Muss also was mit der Zuweisung vom Query zum Record zu tun haben?

Danke erstmal für Euer Bemühen

Daniel

Verfasst: 21. Juni 2007 15:10
von macman
Habe es gerade mal mit dem masterdetail-Example probiert und kann nur sagen, das es da so funktioniert wie erwartet.

Code: Alles auswählen

void MainWindow::showArtistProfile(QModelIndex index)
{
    QSqlRecord record = model->relationModel(2)->record(index.row());

	for (int i=0; i<record.count();i++)
	{
		QString str;
		str = record.field(i).name();    //gibt namen zurück ok
		str = record.field(i).value().toString(); //gibt nichts zurück???????

		QSqlField myfield = record.field(i);
		str = myfield.name();                //gibt namen zurück ok
		str = myfield.value().toString(); //gibt nichts zurück???????
	}