Länge eines Feldes in einer SQL-Tabelle nicht richtig
Länge eines Feldes in einer SQL-Tabelle nicht richtig
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 ) );
}
}
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 ) );
}
}
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
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
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
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