看在softman11也是一个DELPHI初学者,大家不要和他争了,softman11说他用过几天C++,可是连以下这些问题都搞不定,呵呵:
问题:如何准确得到一个连接access数据库的adotable或者adoquery的记录数? ( 积分:50, 回复:11, 阅读:71 )
分类:数据库-文件型 ( 版主:hbezwwl, bubble )
来自:softman11, 时间:2003-4-25 13:22:00, ID:1801896 [显示:小字体 | 大字体]
要求多次查询和删改后,任然能够得到准确的当时数据库中的真是记录数
来自:LeeChange, 时间:2003-4-25 13:23:00, ID:1801903
Refresh后读RecordCount
来自:xzh2000, 时间:2003-4-25 13:23:00, ID:1801904
adotable1.recordcount
来自:softman11, 时间:2003-4-25 13:30:00, ID:1801926
使用recordcount经常都不准确.你们可以自己去试验.
如果在使用adotable.recordcount之前使用refresh方法.报错误:
缺少更新和操作的键列信息!
来自:小苹果, 时间:2003-4-25 14:31:00, ID:1802231
refresh方法 有时候报错,,, 但是有的系统却不报错,,和你的那个BDE有关系。
你可以先close,,然后,open ....然后在adotable1.recordcount,,,我想你应该可以得到
准确的数目拉。。。
我经常这样做,也没什么不对呀,,
来自:ww20000309, 时间:2003-4-25 14:36:00, ID:1802253
如果是为循环我相你最好是用
while not adotable.eof do
如果不是,那么在进行完删除后,用post提交后在用recordcount。
来自:softman11, 时间:2003-4-25 17:51:00, ID:1803033
小苹果,我用的是ado.
楼上两位的方法我都用过了.不管用.我贴出我的程序吧:
procedure TForm4.Button1Click(Sender: TObject);
var
time,sql,constr:string;
i,count,count2:integer;
begin
//查询sql上的数据
label4.Caption:='正在获取SQL服务器上的数据,请等待...';
time:=combobox1.Text+'-'+combobox2.Text+'('+combobox3.Text+')';
sql:='select bjid,bjmc,kcmc,kcmcid,kclb,kkxq,kksj,zrs,zjjs,khfs,kkkslbid '
+'from view_kkplan where substring(bjid,1,2)=''28'''
+' and KKSJ='''+time+'''';
form1.SQLADOQuery1.Close;
form1.SQLADOQuery1.SQL.clear;
form1.SQLADOQuery1.SQL.Add(sql);
try
form1.SQLADOQuery1.Open;
except
messagebox(0,'查询数据出错!','错误信息',0);
exit
end;
count:=form1.SQLADOQuery1.RecordCount;
label4.Caption:='从SQL服务器上获得 '+inttostr(count)+' 条记录';
constr:='Provider=Microsoft.Jet.OLEDB.4.0;'
+'Data Source='+localmdbname
+';Persist Security Info=False';
//清除本地数据库
label4.Caption:='开始删除本地数据库的数据';
try
form1.LocalADOTable1.close;
form1.LocalADOQuery1.SQL.Clear;
form1.LocalADOQuery1.SQL.Add('delete * from QMCTYJ');
form1.LocalADOQuery1.ExecSQL;
except
messagebox(0,'删除本地数据库出错!','错误信息',0);
exit
end;
label4.Caption:='删除本地数据库完成';
progressbar1.Max:=count+10;
progressbar1.StepBy(10);
//copy to local
form1.LocalADOTable1.Close;
form1.LocalADOTable1.ConnectionString:=constr;
form1.LocalADOTable1.TableName:='QMCTYJ';
try
form1.LocalADOTable1.Open;
except
messagebox(0,'连接本地数据库出错!','错误信息!',0);
exit
end;
label4.Caption:='开始复制数据到本地...';
form1.SQLADOQuery1.First;
for i:=1 to count do
begin
Form1.Localadotable1.Append;
Form1.Localadotable1.FieldValues['BJID']:=Form1.SQLadoquery1.FieldValues['BJID'];
Form1.Localadotable1.FieldValues['BJMC']:=Form1.SQLadoquery1.FieldValues['BJMC'];
Form1.Localadotable1.FieldValues['KCMC']:=Form1.SQLadoquery1.FieldValues['KCMC'];
Form1.Localadotable1.FieldValues['KCMCID']:=Form1.SQLadoquery1.FieldValues['KCMCID'];
Form1.Localadotable1.FieldValues['KCLB']:=Form1.SQLadoquery1.FieldValues['KCLB'];
Form1.Localadotable1.FieldValues['KKXQ']:=Form1.SQLadoquery1.FieldValues['KKXQ'];
Form1.Localadotable1.FieldValues['KKSJ']:=Form1.SQLadoquery1.FieldValues['KKSJ'];
Form1.Localadotable1.FieldValues['ZRS']:=Form1.SQLadoquery1.FieldValues['ZRS'];
Form1.Localadotable1.FieldValues['ZJJS']:=Form1.SQLadoquery1.FieldValues['ZJJS'];
Form1.Localadotable1.FieldValues['KHFS']:=Form1.SQLadoquery1.FieldValues['KHFS'];
Form1.Localadotable1.FieldValues['BJID']:=Form1.SQLadoquery1.FieldValues['BJID'];
Form1.Localadotable1.Post;
form1.SQLADOQuery1.Next;
progressbar1.StepIt
end;
count2:=0;
form1.LocalADOTable1.Close;
form1.LocalADOTable1.Open;
form1.LocalADOTable1.First;
while not form1.LocalADOTable1.Eof do
begin
count2:=count2+1;
form1.LocalADOTable1.Next;
end;
//count2:=Form1.LocalADOTable1.RecordCount;
label4.Caption:='成功获取数据完成,服务器上查询出 '+inttostr(count)
+' 条记录,复制成功 '+inttostr(count2)+ ' 条记录';
end;
来自:ww20000309, 时间:2003-4-27 15:49:00, ID:1807343
我想你在删除的时候,是不是物理删除。dephi对dbase,prodox和vfp不能物理删除,有可能
你不能得到正确的数据。
来自:softman11, 时间:2003-4-29 10:41:00, ID:1812556
我用的是access2000数据库。
来自:wqthai, 时间:2003-4-29 11:12:00, ID:1812767
是不是ado要打补丁包阿?
来自:netwang, 时间:2003-4-29 11:21:00, ID:1812833
既然用ADOQuery,怎么不用Sql的Count函数呢,
adoquery.close
sql := 'select Count(*) from table';
adoquery.sql.clear;
adoquery.sql.add(sql);
adoquery.open;
recCount := adoquery.Fields[0].AsInteger
来自:truecat, 时间:2003-4-29 11:24:00, ID:1812857
用另外一个adoquery(不是你用来操作数据的这个)来取得记录数:
select count(*) as RECCOUNT from TableName