QSqlField

Alles rund um die Programmierung mit Qt
Antworten
dust2
Beiträge: 22
Registriert: 7. Juni 2007 16:16

QSqlField

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Weil nichts drin steht? Oder der Typ wird nicht unterstützt.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
dust2
Beiträge: 22
Registriert: 7. Juni 2007 16:16

Hallo macman

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Hallo macman

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
dust2
Beiträge: 22
Registriert: 7. Juni 2007 16:16

Beitrag von dust2 »

Hallo macman,

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


Daniel
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
dust2
Beiträge: 22
Registriert: 7. Juni 2007 16:16

Beitrag 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
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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???????
	}
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Antworten