您的位置:首页 > 技术教程 > delphi

Delphi中多库关联查询
【字体: 整理日期:2007-11-2 9:10:34 打印本文】 【收藏此文

在我们对数据库进行操作时,经常用到ttable控件,但ttable只能同时对一个数据表进行操作,而tquery控件不仅具有ttable的多数功能,而且同时可对多个数据表进行操作。不仅如此,tquery控件还有更强大的数据库查询功能,可以同时对多个不同结构的数据库进行关联查询,被查询的数据库可以是odbc支持的任何一种类型,当然计算机中必须先安装odbc和bdc(delphi的数据库引擎),现举例说明。

  一、连接paradox和dbase进行异库查询

  例如:master.db和customer.dbf分别为paradox和dbase的数据库,它们有一个公共字段custno。这时可输入如下代码:

  query1.close;
  query1.databasename:=′′;
  query1.sql.clear;
  query1.sql.add(′select * from ″master.db″ a,″customer.dbf ″ b where a.custno=b.custno′);

  query1.open;

  注意:进行多库联查时,tquery控件的databasename属性必须先置空,单引号内不包含任何字符;a和b分别是master.db和customer.dbf的别名(引用别名可减少代码长度)。

  二、ms access的多表联查

  access数据库属于多表集合数据库(一个数据库中包含多个数据表),所以,对两个access数据库进行查询的方法就与上述有所不同。例如:我们有rsda.mdb和zfgjj.mdb两个数据库,rsda中包含人事档案、在职职工目录和离职职工目录等数据表,zfgjj通过公共字段“用户号”与rsda相连。如果我们从zfgjj中提取一个用户号,需要从rsda中得到拥有此用户号的职工姓名,这时就必须用到tquery的多表查询。

  第一步 在odbc中增加两个数据源“zfgjj”和“rsda”。

  第二步 在bde数据库引擎中添加两个数据库列名“zfgjj”和“rsda”。

  第三步 在表单中增加两个database控件“database1”和“database2”,在aliasname属性中分别选择“zfgjj”和“rsda”,databasename属性中分别键入“zfgjj”和“rsda”,最后将keepconnection和connected属性都设为“true”。

  现在可以输入相应的代码了:

  begin
  for i:=1 to 10 do
  begin
  query1.close;
  query1.databasename:=′′;
  query1.sq1.clear;
  query1.sq1.add(′select a.七月,b.个人账号,b.用户号,c.姓名from“:zfgjj:个人汇激部门表”a,“:zfgjj:住房公积金明细表”b,“:rsda:在职职工目录”c
where(a.用户号=b.封存=:ib)′);
  query1.prepare;
  query1.params[0].datatype.=ftinteger;
  query1.params[1].datatype.=ftboolean;
  query1.params[0].asinteger:=ia[i];
  query1.params[1].asboolean:=ib;
  query1.open;
  end;
  end;

  代码中sql语句必须在一行内输入,不能分行。sql语句中使用了动态参数“ia”和“ib”,delphi会自动按参数出现的顺序将它们添加在query1的params



查询
关键词:
相关文章
标签Tags