2010-07-22 123 views
0

我使用這個SQL命令來獲得列名獲取列名:德爾福(dbExpress的)

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

,但我不知道我怎樣才能使用執行SQL命令的結果!

例如,這種方式行不通提取列名作爲一個字符串值,我得到這個錯誤=不支持的操作:

for i := 1 to Qry1.RecordCount do 
    begin 

    end; 

回答

3

像這樣的一個TADOQuery工作(不知道如果它不同於dbExpress):

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

從我所瞭解的你無法檢索到的retults。

Qry1.First; 

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

    Qry1.Next; 
end; 

這是一段代碼,它一直爲我

或者你也可以閱讀此鏈接這解釋了爲什麼會拋出異常調用.RecordCount(http://edn.embarcadero.com/article/28494

總結它的工作它建議你的查詢是區分大小寫的,你應該檢查表名(MyTableName)

3

另一種方法可以做到這一點是查詢表本身獲得一個空的數據集,然後循環遍歷字段數據等。

查詢像這樣將它返回沒有記錄表的結構:

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

而且像這樣的循環將在各字段

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

X總會有第一行的值。 no。有下一個電話 – zz1433 2010-07-26 18:18:24

+0

不,X會有列名稱。這就是原始問題所要求的。 – 2010-07-27 13:52:28

0

同意羅布麥克唐納迭代,爲了列出一個字段的列名稱,我會使用 在我的代碼中,我寫了這樣的東西

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;