delphi7环境下adodataset的一个讨论

idecl 2011-02-10 11:10:39


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ADODataSet1: TADODataSet;
ADODataSet1a: TStringField;
ADODataSet1b: TStringField;
ADODataSet1c: TStringField;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i :Integer;
begin
ADODataSet1.Filtered := false;
for i := 0 to 100 do
adodataset1.InsertRecord([IntToStr(i),IntToStr(i),IntToStr(i)]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ADODataSet1.Filter := 'a=' +quotedstr('111');
ADODataSet1.Filtered := True;
ShowMessage(IntToStr(ADODataSet1.RecordCount));
//if (not ADODataSet1.Eof) and (not ADODataSet1.Bof) then
if ADODataSet1.Locate('a','1',[]) then
ShowMessage(ADODataSet1.fieldbyname('a').AsString);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ADODataSet1.CreateDataSet;
end;

end.



以上是一个简单的测试代码

1、Button2中过滤后没有记录时,再LOCATE一个存在的记录,就会报BOF或EOF为真的错误

2、将button2中的代码改成

ADODataSet1.Filter := 'a=' +quotedstr('1');
ADODataSet1.Filtered := True;
if ADODataSet1.Locate('a','0',[]) then
ShowMessage(ADODataSet1.fieldbyname('a').AsString);

会发现show出来的是‘1’。

3、将button2中的代码改成
ADODataSet1.Filter := 'a=' +quotedstr('0'); //第一条
ADODataSet1.Filtered := True;

if ADODataSet1.Locate('a','1',[]) then
ShowMessage(ADODataSet1.fieldbyname('a').AsString);

ADODataSet1.Filter := 'a=' +quotedstr('100');
ADODataSet1.Filtered := True;
if ADODataSet1.Locate('a','100',[]) then //最后一条
ShowMessage(ADODataSet1.fieldbyname('a').AsString);

会发现什么也不show


具体原因大家可以分析一下,提示一下:注意分析 TCustomADODataSet.LocateRecord 这个函数


...全文
120 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
idecl 2011-02-14
  • 打赏
  • 举报
回复
没人参于讨论呀
bjcx994 2011-02-10
  • 打赏
  • 举报
回复
delphi 低版本的相关控件,BUG不少,好多都是到delphi 2010里面才解决了!、
idecl 2011-02-10
  • 打赏
  • 举报
回复
也就是说,LOCATE 和FILTER不能同时使用

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧