大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> C++ Builder下数据库报表Master/Detail关系功能的实现

C++ Builder下数据库报表Master/Detail关系功能的实现

时间: 2021-07-31 作者:daque

主从复合构造(master/detail)是鉴于“一对多”的联系,在一个数据库表中供给精细的消息,而这个表是经过另一个数据库表的外路要害字考察关系记载的。鉴于主从复合构造,咱们不妨在欣赏一个表中的数据时,同声给出另一个表中与这个记载关系的一切记载消息。  borland c++builder供给了ttable 和tquery典型的数据库控件,不妨简单地实行数据库表的master/detail联系,正文即以bcb中自带的示例数据库bcdemos为例来证明怎样沿用各别本领实行数据表的主从复合构造联系,以数据欣赏功效为例:即在欣赏主数据表customer.db(存户消息)记载的同声,表露从数据表orders.db(存户存单消息)中与其关系的一切记载的精细消息。  ttable控件关系的基础属性简介如次:databasename:树立要翻开的数据库别号或数据库目次路途;tablename:树立所要关系翻开的数据库表文献名;active:树立为true时数据库表文献机动翻开,要不须要用代码在步调中翻开数据表。tquery控件的基础属性:databasename:树立要翻开的数据库别号或数据库目次路途;sql:tstring典型,所要实行的sql数据查问语句,不妨径直在东西查看器(object inspector)中双击翻开sql属性举行编纂,active:树立为true时机动翻开查问数据库表文献,要不须要用代码在步调中翻开查问数据表。两者与m/d关系的属性将鄙人边贯串示例加以证明。  一、 ttable控件关系主、从表实行master/detail联系报表  master/detail联系最大略的实行本领是用两个ttable控件辨别与主表及从表关系。辨别起名为tablemaster和tabledetail,树立tablemaster的databasename为bcdemos,tablename为customer.db;树立tablemaster的databasename为bcdemos,tablename为orders.db。如许即可辨别关系上主从数据表。  由于要欣赏表露数据表记载实质,以是须要在窗体上安置两个tdbgrid典型的控件dbgridmaster、dbgriddetail以表露m/d联系主从表的相映记载实质;安置两个tdatasource典型的控件datasourcemaster、datasourcedetail以指明数据源。树立datasourcemaster的dataset属性为tablemaster,datasourcedetail的dataset属性为tabledetail,辨别指向主从数据表。树立dbgridmaster的datasource属性为datasourcemaster,dbgriddetail的datasource属性为datasourcedetail。  实行master/detail联系的要害在乎从表关系控件tabledetail的mastersource属性和masterfields属性:前者指向了一个tdatasource控件,该控件dataset属性该当指向master/detail联系的master表;后者则指定主表和从表的关系字段,须要双击翻开“field link designer”对话框举行树立处事,采用从表和主表的相映关系字段增添到“joined fields”(关系字段)中即可。本例中以主表(customer.db存户消息)及从表(orders.db存单消息)的custno(存户号)字段为关系字段,故树立tabledetail的mastersource属性为datasourcemaster,指向主表;masterfields属性为custno关系字段。  即使tablemaster和tabledetail的active属性为false,则需双击窗体form1空缺处,增添以次两句黑体字代码到tform1::formcreate()事变句柄中去:  tablemaster->active = true; tabledetail->active = true;  运路途序,即可在dbgridmaster、dbgriddetail中欣赏到master/detail联系主从表的关系数据记载。  二、 tquery控件实行master/detail联系报表  tquery控件和ttable控件之间的重要分辨在乎tquery控件经过sql属性所赋的sql训令语句来动静考察数据库,ttable控件则是静态和数据表关系联。tquery控件不妨同声对多个数据库表举行关系考察,ttable控件则只能关系查问简单的数据库表。和ttable控件比拟,tquery控件由于sql谈话的精巧性和对立搀杂性,更符合运用在多层、巨型、搜集数据库体例中。  2.1、 ttable控件关系主表、tquery控件关系从表实行master/detail联系报表  窗体form1上删去tabledetail控件,安置tquery典型控件querydetail,窜改datasourcedetail的dataset属性为querydetail,其他控件属性静止。tquery控件不妨对考察范畴设定控制前提,依此即可实行m/d联系的功效。设定querydetail的databasename为bcdemos,sql属性为:  “ select orderno,custno,saledate,empno from orders where orders.custno=:custno”。  即可掏出从表中一切custno字段与主表custno字段沟通的记载集而且只表露四个控制的字段消息实行master/detail联系,另一要害在乎从表关系控件querydetail的datasource属性和params属性:前者指向了一个tdatasource控件,该控件dataset属性该当指明sql训令参数的数据根源;后者则设定sql训令中的参数,须要双击翻开“querydetail parameters”对话框举行树立处事,采用相映的sql训令中参数树立精确即可。本例中以主表(customer.db存户消息)的custno(存户号)字段动作sql训令的参数,故树立querydetail的datasource属性为datasourcemaster,指向主表;params属性为custno关系字段作参数。  注:sql训令中参数名前确定要加冒号动作前缀,以加以辨别。  增添以次两句黑体字代码到tform1::formcreate()事变句柄中去:  tablemaster->active = true;querydetail->active = true;  运路途序,即可在dbgridmaster、dbgriddetail中欣赏到master/detail联系主从表的关系数据记载,提防从表的栅格数据记载只表露有控制的四个字段消息。  若querydetail的sql属性为:“ select * from orders where orders.custno = :custno ”,不控制从从表掏出的字段名。  2.2、 tquery控件关系主、从表实行master/detail联系报表  master/detail联系更精巧的实行本领是主表及从表都与tquery控件关系,辨别起名为querymaster和querydetail。树立querymaster和querydetail的databasename都为bcdemos;querymaster的sql属性为:“ select * from customer ”,datasource和params属性均为空,如许即可关系上主数据表,获得和用tablemaster控件一律的功效;querydetail的其他属性和2.第11中学沟通。相映的,辨别改datasourcemaster和datasourcedetail的dataset属性指向querymaster和querydetail。  注:因为tquery控件是以动静办法考察数据表的,故在只用tquery控件关系主从表时,安排时从表关系控件querydetail的active属性必需树立为false,要不运转时bde会汇报堕落消息。  增添以次两句黑体字代码到tform1::formcreate()事变句柄中去:  querymaster->active = true;querydetail->active = true;  运路途序,即可在dbgridmaster、dbgriddetail中欣赏到与2.1沟通功效的master/detail联系主从表关系记载消息。  三、单表情景下tquery控件实行master/detail联系汇总、分门别类报表  在清流功课体例或及时监察和控制体例中,往往要务实时保存暂时记载消息到简单的数据表文献中去,而过后再对其举行联系汇总、分门别类、入库等处事。ttable控件由于只能对单表举行操纵,以是在这种单表情景下实行master/detail联系汇总、分门别类等功效的诉求只能用tquery控件实行。仍以orders.db(存单消息表)举例证明怎样精巧运用tquery控件的sql训令属性。  在窗体form1上安置tquery 控件querymaster和querydetail,其它的控件属性静止。树立querymaster和querydetail的databasename都为bcdemos;querymaster的sql属性为:  “ select distinct custno, sum( itemstotal ) itemstotalall,sum( freight ) freightall, sum( amountpaid ) amoutpaidall from orders group by custno order by custno ”,datasource和params属性均为空,爆发m/d联系中的主表;querydetail的的sql属性设为:  “ select orderno,custno,paymentmethod,itemstotal,taxrate,freight,amountpaid from orders where orders.custno = :custno ”,datasource属性为datasourcemaster,指向主表;params属性以custno关系字段作参数。相映的,datasourcemaster和datasourcedetail的dataset属性辨别指向querymaster和querydetail。  示例步调的sql训令实行了以次功效:以表中每个存户的存户号、定货总值、货物运输总费、付款总额为记载的字段,从存单消息表中索取出相映消息汇总动作主表;以表中每个存单记载的存单号、存户号、付款办法、提货价格、税收的比率、运脚、付款数为记载的字段,从存单消息表中索取相映的消息动作从表;主从表的关系字段custno(存户号)经过sql训令的参数来传播。最后的截止即实行了在dbgridmaster控件上表露出每个存户总的定货消息,在dbgriddetail控件上表露出相映存户的控制字段的精细定货消息记载的功效。  增添以次两句黑体字代码到tform1::formcreate()事变句柄中去:  querymaster->active = true;querydetail->active = true;  运路途序,即可在dbgridmaster、dbgriddetail中欣赏到master/detail联系主从表关系记载消息。  综上所述,对于普遍的master/detail联系运用,用ttable控件就足以草率了,而要实行更进一步的功效,如多层m/d联系、长途搜集数据库操纵、多表互关系典型、单表m/d联系的数据库编制程序,则须要用到tquery控件,运用sql训令的精巧性对数据库举行操纵。搀杂功效的master/detail联系数据库编制程序可在正文的普通上参考相映的书本以及bcb的联机扶助实行。   正文步调在c++ builder 3.0/ pwin95,c++ builder 4.0/ pwin98下调节和测试经过。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.