IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Discussion :

Problème avec QSqlTableModel


Sujet :

Bases de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 59
    Points
    59
    Par défaut Problème avec QSqlTableModel
    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.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    J'ai récupéré unixODBC 2.3.1 que j'ai recompile ainsi que FreeTDS 0.91.
    Mêmes erreurs :/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 59
    Points
    59
    Par défaut
    Enfin trouvé le problème. J'aurais du le faire tout de suite :

    J'ai activé les logs de ma base et j'ai vu que le driver FreeTDS fait des requêtes pour connaître les colonnes de la table SQL mais erreurs de syntaxe. La solution est de modifier FreeTDS.. Si cela peut servir à quelqu'un d'autre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/02/2010, 19h28
  2. Réponses: 3
    Dernier message: 25/03/2009, 19h15
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo