2010-07-22 13 views
0

J'utilise cette commande SQL pour obtenir les noms de colonnes:obtenir les noms de colonnes avec Delphi (DBExpress)

select COLUMN_NAME from 
INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'MyTableName' 

mais je ne sais pas comment puis-je utiliser les résultats de la commande SQL exécutée!

par exemple, de cette façon ne fonctionne pas pour extraire les noms de colonnes comme une valeur de chaîne et j'ai eu cette erreur = Opération non pris en charge:

for i := 1 to Qry1.RecordCount do 
    begin 

    end; 

Répondre

3

Quelque chose comme ça pourrait fonctionner pour un TADOQuery (pas sûr si c'est différent pour dbExpress):

Qry1.Open; 
while not Qry1.Eof do begin 
    // do whatever with Qry1.Fields[0].AsString here 
    Qry1.Next; 
end; 
Qry1.Close; 
2

D'après ce que je comprends, vous ne pouvez pas récupérer les retouches.

Qry1.First; 

while not Qry1.Eof do 
begin 
    X := Qry1.FieldByName('column_name').AsString; 

    Qry1.Next; 
end; 

C'est un morceau de code qui a toujours travaillé pour moi

Ou vous pouvez lire ce lien qui explique pourquoi l'exception est levée lors de l'appel .RecordCount (http://edn.embarcadero.com/article/28494)

Pour résumer il suggère que votre requête est sensible à la casse et vous devriez probablement vérifier le nom de la table (MyTableName)

3

Une autre façon de procéder consiste à interroger la table elle-même pour obtenir un jeu de données vide, puis à parcourir les champs en que les données et.

Une requête comme celui-ci renvoie la structure de la table sans enregistrements il:

Qry1.SQL.Text := 'SELECT * FROM MyTableName WHERE 1<>1'; 
Qry1.Open; 

Et une boucle comme celui-ci va itérer chaque champ

for I := 0 to Qry1.FieldCount-1 do 
begin 
    X := Qry1.Fields[I].FieldName; 
    // and do whatever you want with X 
end; 
+0

X aurait toujours la valeur de la première ligne. no. Appel suivant – zz1433

+0

Non, X aura le nom de la colonne. C'est ce que la question initiale a demandé. –

0

d'accord avec Rob McDonell, afin pour afficher le nom de la colonne d'un champ, je vais utiliser ce comme dans mon code, j'ai écrit quelque chose comme ça

Procedure blablabla; 
var i:integer; 
begin 
..... {some code here} 

SQLQuery1.Open; 
    for i := 0 to SQLQuery1.FieldCount-1 do 
    begin; 
    Memo1.Lines.Append(SQLQuery1.Fields[i].DisplayName); 
    end; 
    SQLQuery1.Close; 


.... {some code here} 

end;