首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi TClientDataSet定位问题

Delphi TClientDataSet定位问题
EN

Stack Overflow用户
提问于 2011-11-27 18:10:04
回答 1查看 9.8K关注 0票数 1

我使用的是Delphi7MS VistaDevart's dbExpress驱动程序(4.70版)。我丢弃了TSQLConnectionTSQLTable (tabA)、TDataSetProviderTClientDataSet(cdsA)、DataSourceDBGrid

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

代码语言:javascript
复制
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。我想知道出什么事了。蒂娅。

弗朗西斯科

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-28 01:06:26

你的代码是错误的。:)

代码语言:javascript
复制
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;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8284812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档