我使用的是Delphi7、MS Vista和Devart's dbExpress驱动程序(4.70版)。我丢弃了TSQLConnection、TSQLTable (tabA)、TDataSetProvider、TClientDataSet(cdsA)、DataSource和DBGrid。
我通过图形化的设计工具进行了所有的设置。一切正常,当我打开cdsA时,我可以看到网格中的所有数据。下面是我的代码:
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;fieldA和fieldB存在于表中,也在cdsA.Fields中定义。当我执行这段代码时,Locate指令会生成异常EVariantInvalidArgError ... Invalid argument。我想知道出什么事了。蒂娅。
弗朗西斯科
发布于 2011-11-28 01:06:26
你的代码是错误的。:)
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;https://stackoverflow.com/questions/8284812
复制相似问题