Seite 1 von 1

Länge eines Feldes in einer SQL-Tabelle nicht richtig

Verfasst: 4. Mai 2008 15:34
von andy2003
Hallo,

Bei folgendem Programmteil wird aller richtig bis auf die Feldlänge
angezeigt. Für Tips oder Antworten bedanke ich mich schon mal im voraus.

Andy

------------------------------------------------------------------

void frmDatenbankinfo::datenSlot( const QString &tabelle )
{

QSqlCursor cur( tabelle );
cur.select();
QSqlRecord *wRecord = cur.editBuffer( TRUE );

int wAnzahlFelder = wRecord->count();
txtFelder->setText( QString( "%1" ).arg( wAnzahlFelder ) );

// Anzahl Dateifelder
int wSpalten = cur.count();

// Reihen löschen
tableDatenfelder->setNumRows( 0 );

// Zuerst Header schreiben
for ( int i=0; i<wSpalten; i++) {

QSqlField *wField = wRecord->field( i );
QString wFieldname = wField->name();

// Tabelle um eine Reihe erhoehen
tableDatenfelder->setNumRows( tableDatenfelder->numRows() + 1 );

int wType = wField->type();
QString wTypename = "undefined";
switch ( wType ) {
case ( QVariant::Bool ): wTypename = "Bool" ; break;
case ( QVariant::Date ): wTypename = "Date"; break;
case ( QVariant::DateTime ): wTypename = "DateTime"; break;
case ( QVariant::Double ): wTypename = "Double"; break;
case ( QVariant::Int ): wTypename = "Int"; break;
case ( QVariant::LongLong ): wTypename = "LongLong"; break;
case ( QVariant::ULongLong ): wTypename = "ULongLong"; break;
case ( QVariant::String ): wTypename = "String"; break;
case ( QVariant::CString ): wTypename = "CString"; break;
case ( QVariant::Time ): wTypename = "Time"; break;
case ( QVariant::UInt ): wTypename = "UInt"; break;
}

QSqlFieldInfo wFieldinfo = QSqlFieldInfo( wFieldname, wType );
int wLaenge = wFieldinfo.length();
tableDatenfelder->setText ( i, 0, wFieldname );
tableDatenfelder->setText ( i, 1, wTypename );
tableDatenfelder->setText ( i, 2, QString( "%1" ).arg( wLaenge ) );
}
}

Verfasst: 4. Mai 2008 19:01
von upsala
Ist das noch Qt3? Könntest du auch ein Beispiel dafür geben, was du erwartest und was wirklich ausgegeben wird?

Verfasst: 5. Mai 2008 17:43
von andy2003
Hallo,

Ja es ist QT 3.
In einer Datenbank mit der Tabelle Bsp. Artikel ist ein Feld für die Artikelbeschreibung und diese ist 30 Char lang, angezeigt wird grundsätzlich die Länge -1 für jedes Datenfeld.

Andy

Verfasst: 5. Mai 2008 18:26
von upsala
Der Wert -1 ist aber in der Doku erwähnt.

Verfasst: 6. Mai 2008 18:13
von andy2003
Hallo Upsala,

das stimmt, aber bei QSqlFieldInfo sollte bei length() die Länge bei Char-Felder zurückgegeben werden, bei int, long, double usw sind die Feldlängen fest vorgegeben. Dieser Programmteil dient zur Überprüfung der Datentabellen, da das Hauptprogramm es immer wieder erweitert wird und hier und da auch Felder in einer Tabelle hinzugefügt werden.
Ich nehme an, daß die Programmzeile

QSqlFieldInfo wFieldinfo = QSqlFieldInfo( wFieldname, wType );

nicht richtig ist!


Andy

Verfasst: 6. Mai 2008 20:15
von upsala
Hast du verschiedene Datenbank-Typen getestet, oder nur eine?

Verfasst: 6. Mai 2008 20:48
von andy2003
Hi

nur eine - > MySql

Andy

Verfasst: 6. Mai 2008 21:32
von upsala
Eine Suche im Netz ergab, daß diese Funktion auch bei anderen Datenbanken Probleme zu machen scheint. Ich würde sie vorerst ignorieren und die Werte über SQL-Funktionen selbst ermitteln.

Oder vielleicht mal eine aktuellere Qt-Version verwenden...

Verfasst: 7. Mai 2008 16:49
von andy2003
Hallo Upsala,

ich danke dir recht herzlich, eine frühere QT-Version möchte ich an sich nicht verwenden, da ich eher auf 4. wechseln möchte. Die Länge lässt sich natürlich auch anders ermitteln und ich glaube, dass Trolltech wohl nicht an der 3er Version noch etwas ändern wird. Bis demnächst mal.

Andy