2010-07-22 4 views
0

Я использую эту команду SQL, чтобы получить имена столбцов:Получить имена столбцов с Delphi (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

+0

Нет, X будет иметь имя столбца. Вот что задал первоначальный вопрос. –

0

согласен с Робом McDonell, для того, чтобы указать имя столбца поля, я буду использовать это , как в моем коде. Я написал что-то вроде этого

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;