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 :
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 code utilisé est le suivant :
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();
Le lastQuery() ne m'affiche que "SELECT" dans la console.

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 :
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 );
 }
Je sèche complètement :/

Merci d'avance pous vos pistes.