unit Unit1;interfaceuses
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 这个函数
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 这个函数
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货