2017-03-17 2 views
0

J'ai déjà lu this question. Je veux obtenir les noms de champs d'une table en utilisant la méthode QSqlDatabase :: record (const QString & nomtable). Mais il renvoie toujours un enregistrement vide. Je peux interroger les tables de base de données par QSQLQuery correctement. Ma base de données est une base de données SQL Server.QSqlDatabase :: record (const QString & tablename) retourne l'enregistrement vide

+1

S'il vous plaît ** [modifier] ** votre question avec un [mcve] ou [SSCCE (court, autonome, exemple correct)] (http://sscce.org) – NathanOliver

Répondre

0

En fait, vous devriez obtenir.

Comme vous le dites serveur SQL, essayez avec "@yourtablename". Je veux dire ajouter "@" avant votre nom de table dans votre QString.

si pas de chance,

Vérifiez le nom de votre table. (espaces ou caractères supplémentaires, etc.)

Type cast à QString (côté sécurisé). Ou créez un objet QString avec le nom de la table et transmettez-le.

Coupez le QString avant de le passer.

Toujours pour une raison quelconque, si vous n'obtenez pas les noms de champs, essayez les étapes ci-dessous.

Votre QSqlRecord QSqlDatabase::record(const QString &tablename) const va retourner un objet QSqlRecord

d'abord obtenir les champs de numéro dans le dossier

int QSqlRecord::count() const 

boucle le nombre (ex: en utilisant pour) et obtenir le nom du champ pour chaque index à l'aide ci-dessous fonction

QString QSqlRecord::fieldName(int index) const

Certains pseudo-code ci-dessous: (en supposant que vous avez une connexion réussie établie, non compilé et non testé.)

QSqlRecord rec = QSqlDatabase::record("Your table name"); 

int count = rec.count(); 

QStringList fieldNames; 

For (int i =0; i<count; i++) 
{ 
    fieldNames.push_back(rec.fieldName(i); 
} 

Par requête Sélection:

QSqlQuery select; 
select.prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'"); 

if (select.exec() && select.next()) { 
    QSqlRecord record = select.record(); 
} 
+0

J'ai essayé tous vos conseils, mais ne fonctionne toujours pas. Je suis vide de QSqlDatabase :: record() et QSqlRecord :: count() renvoie zéro. –

+0

hmmm .... avez-vous essayé quelque chose comme ceci QString str = "@tablename". – Naidu

+0

Pouvez-vous essayer en interrogeant l'instruction select, que j'ai ajouté dans ma réponse. – Naidu