Bonjour.
J'étais en train de suivre le tutoriel "Accès aux données" présent dans la partie QT. La table contient uniquement 2 champs : id_rubrique,libelle_rubrique
L'environnement est une Debian ETCH, la base de données est une Sybase ASA 9. Connexion OBBC avec unixODBC + FreeTDS en driver. Qt 4.7.0 fraichement compilé.
Lorsque je souhaite utiliser un QSqlTableModel j'ai l'erreur suivante :
Le code utilisé est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 qGetStringData: Error while fetching data ( "[FreeTDS][SQL Server]Column out of range"
Le lastQuery() ne m'affiche que "SELECT" dans la console.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName(QString("XXXX")); db.setUserName("XXX"); db.setPassword("XXX"); if (! db.open() ) { qDebug() << db.lastError().text(); } QSqlTableModel *model = new QSqlTableModel; model->setTable("Rubrique"); model->select(); qDebug() << model->query().lastQuery();
Trace ODBC : (remarquez le <b>Column Number = 6</b>)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 [ODBC][29691][SQLGetData.c][224] Entry: Statement = 0x809e2c8 Column Number = 6 Target Type = 1 SQL_CHAR Buffer Length = 256 Target Value = 0xbfe9c2bc StrLen Or Ind = 0xbfe9c3c8 [ODBC][29691][SQLGetData.c][470] Exit:[SQL_ERROR] Buffer = [id_rubrique] Strlen Or Ind = 0xbfe9c3c8 -> 0 DIAG [S1002] [FreeTDS][SQL Server]Column out of range
Cependant le code suivant est parfaitement fonctionnel :
Je sèche complètement :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName(QString("XXXX")); db.setUserName("XXX"); db.setPassword("XXX"); QSqlQuery requeteur; if (! db.open() ) { qDebug() << db.lastError().text(); } requeteur.exec("SELECT * FROM Rubrique"); while ( requeteur.next() ) { int id_rubrique = requeteur.value(0).toInt(); QString libelle_rubrique=requeteur.value(1).toString(); QMessageBox::information( 0, QObject::tr("Information récupérée"), "Id : " + QString::number(id_rubrique) + "\nLibellé : " + libelle_rubrique ); }
Merci d'avance pous vos pistes.
Partager