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

Alles rund um die Programmierung mit Qt
Antworten
andy2003
Beiträge: 5
Registriert: 25. August 2007 16:53
Wohnort: NRW, Solingen

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

Beitrag 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 ) );
}
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ist das noch Qt3? Könntest du auch ein Beispiel dafür geben, was du erwartest und was wirklich ausgegeben wird?
andy2003
Beiträge: 5
Registriert: 25. August 2007 16:53
Wohnort: NRW, Solingen

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Der Wert -1 ist aber in der Doku erwähnt.
andy2003
Beiträge: 5
Registriert: 25. August 2007 16:53
Wohnort: NRW, Solingen

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hast du verschiedene Datenbank-Typen getestet, oder nur eine?
andy2003
Beiträge: 5
Registriert: 25. August 2007 16:53
Wohnort: NRW, Solingen

Beitrag von andy2003 »

Hi

nur eine - > MySql

Andy
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...
andy2003
Beiträge: 5
Registriert: 25. August 2007 16:53
Wohnort: NRW, Solingen

Beitrag 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
Antworten