Re: QODBC, query not valid ??? strange sqlcursor message...

Gerd König <[email protected]>
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
Hallo Thomas,

vielen Dank fÃŒr Deine Antwort. Leider bringen Deine Hinweise noch keine 
Verbesserung des Problems. Alternativ zur QSqlQuery habe ich jetzt mal 
einen QSqlCursor probiert, leider auch ohne Erfolg (s.u.).

Thomas Wedehase schrieb:
> Hallo
> 
> Am Wednesday, 1. June 2005 11:13 schrieb Gerd König:
> 
>>Hallo,
>>
>>ich versuche mich gerade an einem ersten QT-Datenbank-Programm.
>>Ich verbinde mich ÃŒber ODBC an die DB und versuche ein einfaches select
>>abzusetzen und mir die Daten anzeigen zu lassen.
>>
>>Soweit so gut, aber nach AusfÃŒhren des Select's bekomme ich keine Daten,
>>obwohl angeblich Ìber 5000 DatensÀtze "affected" sind.
> 
> Kann diese Anzahl stimmen? Mal auf einer Konsole gegen geprÃŒft.?

Die Anzahl stimmt, es sollten wirklich so viele EintrÀge kommen.
> 
> 
>>query.at() liefert mir stets "-1", auch nach einem query.first().
>>
>>Warum sagt mir query.isValid() "false", bzw. was genau sagt das aus ?
>>
>>Die Datenbank ist ordnungsgemÀß geöffnet und die Query wurde problemlos
>>ausgefÃŒhrt (query.isActive() = true).
>>
>>
>>code:
>>....
>>if ( defaultDB->open() ) {
>>QSqlQuery query = defaultDB->exec( "SELECT id, name FROM company");
> 
> 
> Ich nehme an defaultDB->exec ist folgendes:
> QSqlQuery QSqlDatabase::exec ( const QString & query = QString::null ) const 
> Executes a SQL statement (e.g. an INSERT, UPDATE or DELETE statement) on the 
> database <<<< SELECT fehlt hier, vielleicht liegt da der Fehler
..das ist richtig. Jedoch habe ich die betreffenden Code-Zeilen aus der 
QT-Doku zu QSqlQuery kopiert (da war dies als Beispiel aufgefÃŒhrt).

Den Alternativweg ÃŒber einen Cursor hat mich zu folgender Fehlermeldung 
gebracht:
"QSqlCursor::setName: unable to build record, does 'company' exist ?
"

Code:

QSqlCursor cur( "company" , TRUE, defaultDB);
cur.select();
while ( cur.next() ) {
   qDebug( cur.value( "id" ).toString() + ": " + cur.value( "name" 
).toString() );
}


> 
> Meines Wissens wird nach einem exec erstmal auf einen invalid Record gezeigt. 
> Bevor man also weitermacht, sollte man ein query.next() aufrufen um zum 
> ersten Datensatz zu springen.
> 
> 
>>qDebug("no. of affected rows: %d, isValid ? %d, isActive ? %d",
>>query.numRowsAffected(), query.isValid(), query.isActive());
>>if ( query.isActive() ) {
>>     query.first();
>>     qDebug("query is active, at: %d", query.at());
>>     while ( query.next() ) {
>>       qDebug("ID:%d, name:%s",query.value(0),
>>query.value(1) );
>>
>>     }
>>}
>>QMessageBox::about( this, tr("id, name"),qstr);
>>}
>>....
>>
>>fÃŒr jede Hilfe dankbar.....GERD....
> 
> 


-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfÃŒgbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.