DELPHI ADOQUERY连接ACCESS,查询记录总数问题

用ADOQUERY连接ACCESS,在录入新的记录之后,再查询满足条件的记录的条数时,总是不准!

------------------首先用ADOQUERY0给表增加记录-----------
with qry0 do
begin
Close;
SQL.Clear;
SQL.Add('select BC as 条码,日期,时间,DIF as 管控内容,序号,工单号 from DIPBCT');
Open;
Append;
FieldByName('条码').AsString := edtbcyl.Text;
FieldByName('日期').AsString := DateTimeToStr(Date());
FieldByName('时间').AsString := FormatDateTime('HH:NN:SS', Now());
FieldByName('管控内容').AsString := edtgknr.Text;
FieldByName('序号').AsString := gkwcs;
FieldByName('工单号').AsString := dbedt1.Text;
try qry0.Post;
Windows.Beep(5000, 500);
except qry0.Cancel;
Windows.Beep(3000, 1000);
end;
Close;
Open;
-----------------再用另外一个ADOQUERY接着查询表中符合条件的记录数量-----------
with qry3 do
begin
Close;
SQL.Clear;
SQL.Add('select * from DIPBCT where 日期=date()');
Open;
end;
label1.Caption := IntToStr(qry3.RecordCount);

上面两段代码,前面是添加记录,后面是查询符合条件的记录条数,然后显示在label1上,但是问题就是每次执行之后,有时label1能正确的显示真实的记录条数,但是有时又不变化,要再执行一次或两次以上的查询命令之后才能正确显示,感觉像是刷新问题,请问如何解决! 我现在是用一个Timer来定时执行查询命令,刷新,有没有更好的办法。
下面两位的方法都不行,我写的另个一个小程序也有类似的问题:
ADOQuery3.RecNo:=ADOQuery3.RecordCount;

本想用这个方法,在录入一个记录之后自动跳到最后一条记录,但是也是一样的,经常不跳;
当我再录入一个记录之后,再执行这个命令,有时候又能跳了,而且刚刚上一个记录被跳过去了(比如我录入第9条记录,执行命令之后,DBGridg还是指在第8条记录,当我再录入第10条记录的时候,DBGrid又能跳了,而且是直接跳到第10条记录)

应该是
FieldByName('日期').AsString := DateTimeToStr(Date());
SQL.Add('select * from DIPBCT where 日期=date()

这两句的原因
ACCESS 数据库对日期的查找应该加 # #
而且 DateTimeToStr(Date()的格式与 where 日期=date() 的日期格式不同。
第一句换成 FieldByName('日期').AsString := formatdatetime(‘yyyy-mm-dd’,Date())好一些,
比较也采用 where 日期=#'+ formatdatetime(‘yyyy-mm-dd’,Date()) +'#'追问

方法都不行,我写的另个一个小程序也有类似的问题:
ADOQuery3.RecNo:=ADOQuery3.RecordCount;

本想用这个方法,在录入一个记录之后自动跳到最后一条记录,但是也是一样的,经常不跳;
当我再录入一个记录之后,再执行这个命令,有时候又能跳了,而且刚刚上一个记录被跳过去了(比如我录入第9条记录,执行命令之后,DBGridg还是指在第8条记录,当我再录入第10条记录的时候,DBGrid又能跳了,而且是直接跳到第10条记录)

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-14
加一个qry3.Refresh;试试
方法1:select count(*) from table
方法2:在ADOQuery3的open下面先写一句:ADOQuery3.irst;

DELPHI ADOQUERY连接ACCESS,查询记录总数问题
应该是 FieldByName('日期').AsString := DateTimeToStr(Date());SQL.Add('select * from DIPBCT where 日期=date()这两句的原因 ACCESS 数据库对日期的查找应该加 而且 DateTimeToStr(Date()的格式与 where 日期=date() 的日期格式不同。第一句换成 FieldByName('日期').AsString := formatda...

delphi中用adoquery怎么查询access数据库中的最后一条记录
ADOQuery.SQL.Clear;ADOQuery.SQL.Add('select * from tb');ADOQuery.Open;ADOQuery.Last;showmessage(ADOQuery.Fields[0].AsString);

Delphi 实现随机查询记录,用的是ACCESS数据库
ADOQuery1.SQL.Add(str);ADOquery1.Open;end;id为一个数字列,修改为你表中真实的列字段名 Random(100),这个一百你可以试验一下取多少合适,如果你想每次取的不重复的话,可以将生成的这个随机数记录下来,然后下次生成时排除出去 if checkbox2.Checked then 这句话放在那会有问题,如果你不选择的...

求delphi与Access数据库连接的步骤
1,新建Project。2,在FORM中放入ADOConnection控件。3,双击ADOConnection控件,然后点击Build...按钮,在“提供者”页中选择“Microsoft Jet 4.0 OLE DB Provider”,然后点击“下一步”按钮,在“连接”页中选择要连接的Access数据库的路径和数据库的文件名.如果数据库没有密码,那就可以了,如果有...

delphi ACCESS 问题
with adoquery1 do begin close;sql.clear;sql.text:='select person_ID a,person_name name from table tb_person yourTB';\/\/---select person_id As a person_name As name ,里面"a"和“name”是字段别名。\/\/---看一下你程序的查询语句,看到底是什么字段as A,然后就去数据库找那个字...

delphi中如何得到SQL表中记录总数?
如果直接用select * from table1,可以用查询控件的reccount属性得到记录总数,对于你的语句,可以用查询的fieldbyname('record_count').asinteger得到整型的,.asstring得到字符串型的,根据使用要求来定 Fields[0].AsInteger 取查询的第一个字段的值 fields【字段名】也行 fieldbyname 和 fields 各有...

Delphi中取前几十条记录的问题
不同的数据库 取前几十条记录的sql是不一样的 access sql server 可以支持 top 但mysql 和 oracle 都不支持top 如果数据库支持top 那就是连接问题 1、ADOQuery1的ParamCheck属性为False;2、未设置ADOQuery1的Connection或ConnectionString属性。

delphi问题请高手指点。
拿access为例,以ADOQUERY连接数据库,数据表为test(id,name,aaa,bbb,...)1。窗口上放置四个EDIT:ID,NAME,AAA,BBB (仅是举例你想放几个就放几个)2。回车能切换输入焦点到下一个EDIT,设置方法 EDIT的taborder按顺序设置,其他空间的tabstop属性为false 设置输入窗口的KEYPREVIEW属性为true 3。在窗口...

求delphi连接数据库进行简单的 插入,删除,修改,查询。
新建一个数据库:如用ACCESS建一个data.mdb(建好结构并填写几个测试数据 ),放到程序目录下,窗体中再放一个(ADO下的)ADOQuery1、(data access下的)DataSource1、(data control)下的DBGrid1和DBNavigator1,并设置:1、点ADOQuery1的connectionstring右边“...”--build...--选提供程序下的...

delphi 怎么知道ADOquery查询结果中记录的序号
所谓自动编号,是不需要干预的,自动编号也是为了保持纪录的唯一性,以便删除某条记录后,与之相关的纪录不会出现对应的关联错误,比如你所说的ID为2的纪录与另一个表的某条纪录一一对应,如果如你所说,自动重新更新序号,那么表的对应关系都错位了,就没办法去查询,数据混乱不堪。如果你需要序号相连...

相似回答