吵吵   2012-03-01  阅读:2,778

吵吵在检验科工作的这天就接到一个任务,即精液报告的改进,要将精子快速向前运动和慢速向前运动这个A级和B级的结果相加打印出来。打印的模板倒是可以更改,但是却无法将A级和B级的值合并起来再打印。无奈之下翻了翻数据库,看到数据库中存放了A级和B级中的精子数,所以萌生了一个想法,就是把B值加入到A值中去,然后就可以输出A为总的向前运动了。

在ACESS数据库中存放A级和B级精子数的是anum和bnum,我们要将bnum加入到anum中,同时为了不造成误差,将bnum设为0,构造的SQL语句如下:
update report set anum=anum+bnum,bnum=0
再改造一下,只是当bnum不等于0的时候执行:
update report set anum=anum+bnum,bnum=0 where bnum<>0
好了,之后我们就要学会怎么用delphi来连接acess的数据库了,我们可以用到ADOrequest这个控件来做,测试了一下速度还可以呢。在delphi的窗体里面拖出来一个空间TADOrequest控件,然后要access连接数据库就只要ConnectionString设置为‘Provider=Microsoft.Jet.OLEDB.4.0;Data Source=’+mdb文件的路径。
代码如下:

adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + sfilename;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update report set anum=anum+bnum,bnum=0 where bnum<>0');
adoquery1.ExecSQL;
adoquery1.Close;

这个时候我用access打开文件发现是可以打开的,功能也已经实现了,但是数据库文件就一直处于编辑状态,如果你想删了它就删除不了。怎么才能完全断开程序与数据库的连接呢?使用close方法是没有用的,试过connection.state,发现是一个无法赋值的属性,无奈之下,只好想到一个动态创建了:

procedure addbtoa;
var
adoquery1:tadoquery;
begin

adoquery1:=tadoquery.Create(nil);
adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + sfilename;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('update report set anum=anum+bnum,bnum=0 where bnum<>0');
adoquery1.ExecSQL;
adoquery1.Close;
adoquery1.Destroy;

end;

动态创建后在执行后就销毁了ADOrequest对象了,文件也就没有锁定了,测试还是可以的。一个12892条记录的文件大概是5m左右,刚才的sql语句能够在1s内完成,速度也就不错了,动态创建也就靠谱了。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

9条回应:“delphi使用ADOrequest彻底断开acess数据库连接”

  1. 刘学政博客说道:

    对数据库知识一点不懂

  2. 点点外卖说道:

    好久不来博主这里看看了。

  3. 青岛葡萄酒说道:

    楼主更新的满勤奋嘛

  4. 萌物时代说道:

    学过一段时间的数据库,后来都扔下了

  5. 对这个还是不太了解的

  6. 阿痴说道:

    这个就属于专业知识了吧

  7. 非常不错的文章。支持。分享了。

  8. www.baojian1.com说道:

    来支持一下

发表评论

电子邮件地址不会被公开。 必填项已用*标注