问题描述
Delphi Rio-我才刚刚开始学习ADO,特别是连接到本地Oracle RDBMS(Oracle 12.2 64位)的dbGo组件。我能够连接,发出简单查询等。我找到了TADOConnection.GetFieldNames方法,并且正在对其进行试验。我无法使其正常工作。这是我的代码...
procedure TForm1.BitBtn1Click(Sender: TObject);
var
S1 : TStringList;
begin
S1 := TStringList.Create;
ADO1.Connected := True;
ADO1.GetFieldNames('EGR.ACCOUNTS',S1);
//ADO1.GetTableNames(S1,False);
ShowMessage(IntToStr(S1.Count));
S1.Free;
end;
我尝试使用和不使用Schema名称,但是S1.Count始终返回0。GetTableNames函数可以正常工作。如果我进入sql * Plus进行查询,我会看到适当的数据
select count(*) from EGR.ACCOUNTS;
所以我知道我的SCHEMA.TABLENAME是正确的。我在做什么错了?
解决方法
您需要将其分配给类型为items
的字符串列表的TStrings
属性。
procedure GetFieldNames(const TableName: string; List: TStrings);
要按名称访问数据字段,请使用以下代码:
var
FieldEgrAccount : TField;
begin
FieldEgrAccount := AdoQuery1.FieldByName('SomeFieldName');
Memo1.Lines.Add(FieldEgrAccount.AsString);
end;
如果您确实需要所有字段名称,请使用以下代码:
var
Names : TStringList;
begin
Names := TStringList.Create;
try
AdoQuery1.GetFieldNames(Names);
// Do something with the field names
finally
Names.Free;
end;
end;
每个字段使用一个TField,一次获取一次,然后根据需要重复使用它(使表单或数据模块类的变量字段重复使用)要快得多。 FieldByName相对昂贵,因为它必须扫描字段名称列表。