gpt4 book ai didi

delphi - Delphi TClientDataSet查找问题

转载 作者:行者123 更新时间:2023-12-03 19:19:31 25 4
gpt4 key购买 nike

我正在使用Delphi7MS VistaDevart's dbExpress驱动程序(版本4.70)。我删除了TSQLConnectionTSQLTabletabA),TDataSetProviderTClientDataSetcdsA),DataSourceDBGrid

我通过图形设计工具进行了所有设置。一切正常,打开cdsA时,我可以看到Grid中的所有数据。这是我的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
fields, values: string;
begin
cdsA.Close;
cdsA.Open;
fields := 'fielda;fieldb';
values := Edit1.Text+';'+Edit2.Text;
cdsA.SetKey;
cdsA.Locate(fields, values, [loCaseInsensitive]);
end;


fieldAfieldB在表中存在,并且也在 cdsA.Fields中定义。当我执行此代码时, Locate指令会生成异常 EVariantInvalidArgError ... Invalid argument。我想知道怎么了。 TIA。

弗朗切斯科

最佳答案

您的代码是错误的。 :)

procedure TForm1.Button1Click(Sender: TObject);
var
fields, values: string;
begin
// Closing the CDS and opening it every time is foolish. Just
// open it if it's not already open.
if not cdsA.Active then
cdsA.Open;

// List of column names. Since column (field) names are always
// strings, can just use semicolon-separated values
fields := 'fielda;fieldb';

// Values for columns. Since these could be any type, you can't
// simply use semicolon-separated strings. You have to pass an
// array of Variants. The easiest way is to just create it and
// populate it, and let reference counting release it when it's
// out of scope
values := VarArrayOf([Edit1.Text, Edit2.Text]);

// No call to SetKey here. SetKey is used with FindKey, not Locate
cdsA.Locate(fields, values, [loCaseInsensitive]);
end;

关于delphi - Delphi TClientDataSet查找问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8284812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com