Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14490507
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:48:55

下载本文示例代码
  在我们对数据库进行操作时,经常用到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属性中并分配索引号分别为0和1,参数“ia”和“ib”应在程序开始时声明其类型并赋值。   在我们对数据库进行操作时,经常用到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属性中并分配索引号分别为0和1,参数“ia”和“ib”应在程序开始时声明其类型并赋值。 下载本文示例代码


Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询Delphi中多库关联查询
阅读(231) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~