Bonjour,

Avec Linux pas de problème sérieux. Mais je parle içi de mésaventures avec Windows Vista.

J'ai installé Qt 4.5 de manière standard sur Vista. Donc en standard peu de drivers sur les bases de données. Uniquement SQLITE et ODBC.

ODBC c'est déjà bien, on peut théoriquement accéder à un grand nombre de base de données.

Résumons :
-On est sur Vista.
-Firebird 2.1 est installé.
-Son serveur est lancé.
-ODBC firebird de Phoenix est installé, configuré et testé.
-Qt 4.5 est installé.

On a donc toutes les chances de pouvoir se connecter avec SYSDBA et sa fameuse masterkey à la table country par exemple.

Ben non ou presque.
exemple :

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
 
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("employee"); 
    db.setUserName("sysdba");
    db.setPassword("masterkey");
    db.setHostName("localhost");
 
    if( ! db.open())
    {
        cout << "Database Error" << endl 
        <<  db.lastError().text().toStdString() << endl ;
    }
    else
    cout << "Ouverture Ok Employee " << endl ;
    doListTables( db ) ;
C'est tout justement dans cette dernière instruction doListTables que les choses se gâtent.

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
 
void doListTables( const QSqlDatabase& db )
{  
  if ( db.tables().size() < 0 )
  {
    cout << "peut pas accéder aux tables de la QsqlDatabase" << endl;
    return ;
  }
  QStringList li = db.tables() ;
 
  for( int i = 0 ; i < li.size(); i++)
  {
  	cout << li.at(i).toStdString() << endl ;
  }
  cout << endl;
}
Le résultat obtenu c'est que chaque nom de table de employee ( comme les autres... ) est répliqué de manière concaténée.

On obtient un truc du genre :
table N° 1 =
COUNTRYCOUNTRYCOUNTRYCOUNTRY etc ...
table N° 2 =
DEPDEPDEPDEPDEP etc ...

Et etc pour les autres tables.

Bien entendu le réflexe naturel c'est de penser que dans une application console la conversion en StdString serait la cause de la mésaventure.

Il n'en est rien car les applications GUI de Qt avec les QString s'expose à ce même problème.

De plus mon ODBC de Qt fonctionne bien avec les sources utilisateurs de MySql.

Il n'y a à mon avis que deux possibilités à ce genre de phénomène , le codage en unicode, où le buffer over flow des malveillants.