【问题标题】:Delphi - dbGo/Oracle method GetFieldNames returns no dataDelphi - dbGo/Oracle 方法 GetFieldNames 不返回数据
【发布时间】:2020-08-26 14:58:39
【问题描述】:

Delphi Rio - 我刚开始学习 ADO,特别是 dbGo 组件,连接到本地 Oracle RDBMS(Oracle 12.2 64 位)。我能够连接、发出简单的查询等。我找到了 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 是正确的。我做错了什么?

【问题讨论】:

    标签: oracle delphi ado


    【解决方案1】:

    要通过名称获取数据字段,您应使用以下代码:

    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 成本相对较高,因为它必须扫描字段名称列表。

    【讨论】:

    • 虽然我假设这可能适用于给定的查询,但我遇到的问题与 TADOConnection.GetFieldNames 有关。它需要 2 个参数,我要查看其字段的表的名称,以及放置字段列表的 TStrings。虽然我可以使用您展示的代码解决此问题,但我正在学习 ADO,并试图确定为什么应该工作的东西没有。
    • TADOConnection.GetFieldNames 似乎链接到 TAdoTable 组件。也许您应该首先将 TAdoTable 与 TAdoConnection 链接,然后才请求该表的字段名称。只是猜测。
    【解决方案2】:

    您需要将其分配给TStrings 类型的字符串列表的items 属性。

    procedure GetFieldNames(const TableName: string; List: TStrings);

    【讨论】:

    • 不幸的是,这没有帮助(将 S1 从 TStringlist 更改为 TStrings)。根据您的评论,文档显示使用 TListbox.Items 作为示例。那也不行。
    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多