被Filter过滤掉的记录能否被查询到?

richi_ 2003-01-13 06:24:30
我用adoquery 查询出一个数据集,然后用Filter过滤,在过滤后的结果中再进行定位特定的记录,这时出现一种莫名其妙的错误?
具体如下:
adoquery的查询结果:
a b c
3 3 16
4 38
4 4 47
5 79
5 5 39
6 16
先用Filter过滤出 第一列(a)为空的记录
a b c
4 38
5 79
6 16
然后用Locate定位b=3的记录,奇怪!原本以为会查不到(返回False),可是跟踪的结果表明返回值是 True!,并且指针指向过滤出来的第一条记录(b=4)。
再用Locate定位b=2或者b=1的记录,都正常,查不到,返回值均为False.
再用Locate定位b=4或者5或者6的记录,也正常,都查到了,返回值均为True.
为什么b=3的记录这么奇怪呢?
被Filter过滤掉的记录到底能否再被定位到?

哪位大虾知道,请赐教,谢谢!
(开发工具:delphi6+access2000)
...全文
54 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
馮強 2003-01-16
  • 打赏
  • 举报
回复
应该查不到,但不是没办法,用另一个线程重新连接数据库,一切OK了。
lizongqi 2003-01-16
  • 打赏
  • 举报
回复
就因为这个,我搞了一个下午
最后发现,即使Filter,所有的数据还在数据集里,但是dbGrid等显示的只是符合条件的纪录。


请楼主注意。

这些数据都可以locate,lookup等,如果用Recordcount,则是符合条件纪录的数目,next,first,last方法也是对符合条件的纪录的。]
OLAP 2003-01-16
  • 打赏
  • 举报
回复
我也碰到过,就算你过滤掉了,也能Locate的到.
蝈蝈太阳 2003-01-15
  • 打赏
  • 举报
回复
UP
nnwq 2003-01-15
  • 打赏
  • 举报
回复
不行的。
你的filtered设为True了吗?
idilent 2003-01-15
  • 打赏
  • 举报
回复
我也不知道原因,但是我认为你的数据不好,应该将b的值设为1,2,3,4,5,6这样才好验证,还有button2的click事件应该是把adoquery1.close方在最前面,你再试一试。
richi_ 2003-01-14
  • 打赏
  • 举报
回复
这里有例子的原代码,再用access做一个表,就可以用了,哪位高手愿意帮小弟看看?
unit1.dfm

object Form1: TForm1
Left = 190
Top = 160
Width = 544
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 96
Top = 112
Width = 320
Height = 120
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object Button1: TButton
Left = 80
Top = 24
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 344
Top = 24
Width = 75
Height = 25
Caption = 'Button2'
TabOrder = 2
OnClick = Button2Click
end
object Button3: TButton
Left = 216
Top = 48
Width = 75
Height = 25
Caption = 'Button3'
TabOrder = 3
OnClick = Button3Click
end
object Edit1: TEdit
Left = 192
Top = 24
Width = 121
Height = 21
TabOrder = 4
Text = 'Edit1'
end
object ADOQuery1: TADOQuery
Active = True
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Se' +
'ttings\Administrator\My Documents\db1.mdb;Persist Security Info=' +
'False'
CursorType = ctStatic
Filter = 'aNull=-1'
Filtered = True
Parameters = <>
SQL.Strings = (
'Select *,IsNull(a) as aNull from table2'
'')
Left = 176
Top = 80
end
object DataSource1: TDataSource
DataSet = ADOQuery1
Left = 280
Top = 80
end
end

//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////

unit1.pas

unit Unit1;

interface

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

type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //打开查询
begin
adoquery1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);//过滤
begin
Adoquery1.Filter := 'aNull=-1';
Adoquery1.Filtered := true;
Adoquery1.Close;
Adoquery1.Open;
end;

procedure TForm1.Button3Click(Sender: TObject);//定位
begin
if Adoquery1.Locate('b',strtoint(edit1.text),[]) then
dbgrid1.DataSource := datasource1
else dbgrid1.DataSource := nil;
end;

end.

richi_ 2003-01-14
  • 打赏
  • 举报
回复
是的,都是用的adoquery.
我试了几千遍了,先是用jet 4.0 读取文本文件,后来干脆用access来试,都不行。这个错误确实存在,哪位愿意再试试?
Billy_Chen28 2003-01-13
  • 打赏
  • 举报
回复
楼主查询、过滤、定位都是用的ADOQUERY吗?
ADOQUERY.add.sql
ADOQUERY.filter
ADOQUERY.locate
TOMWLD 2003-01-13
  • 打赏
  • 举报
回复
查找不到啊,我用Delphi7+ADO+SQL SERVER2000
BlueTrees 2003-01-13
  • 打赏
  • 举报
回复
应该无法定位,比如,根据RecordCount遍历数据集的时候,如果还可以定位,岂不成的了笑话了。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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