创建动态报告:使用父子命令

这是创建涉及父命令和子命令的复杂数据报告的方法,并且可以在运行时更新信息。 直接处理简单查询非常简单; 但是,处理复杂的报告非常棘手

假设 :本文的读者具有创建数据报告的基本知识。 创建一个父子命令并创建一个DataReport

假设我们有一个名为company的数据库,其中有两个表

客户(customerID,公司,联系方式,地址,城市)

订单(已订购,customerID,orderdate)

使用查询之间的父/子关系创建报告。 步骤1:在项目中添加数据环境。 在项目资源管理器窗口中,右键单击项目名称->添加-> DataEnvironment

您将在Project Explorer Windows中的文件夹Designer下看到DataEnviornemnt1。 双击DataEnviornment1使其在屏幕上显示

步骤2:设置到数据库的连接

右键单击连接1->选择“提供程序”选项卡->选择您的提供程序名称(对于Access,请选择Microsoft Jet OLE DB提供程序)->选择“下一步”->选择您的数据库名称(假设您的数据库名称为company)->用户名和密码->测试连接

连接成功后,请转到步骤3

步骤3:添加命令(父命令)

假设我们有表名称customer

右键单击连接1->选择添加命令->右键单击command1->选择属性->选择单选按钮SQL语句->键入查询(从客户中选择*)->单击确定

您将在命令名称下看到字段(在这种情况下为command1)

步骤4:添加命令(子命令)

右键单击Command1->添加子命令->它将在Command1->下添加一个新命令->右键单击Command2->单击SQL语句单选按钮->键入查询(假设您有一个表顺序从中选择记录:从订单中选择*)

步骤5将Command2与Command1相关

右键单击command2->选择选项卡Relation->选择父命令(在本例中为Command1)。 通过关联表的父表(客户)和子表(客户)中的字段来设置关系定义。

假设customerID与两个表相关。

步骤6:查看命令的层次结构信息

右键单击Command1->选择Hierarchy info->它将显示两个命令(父命令和子命令)的关系->复制所有内容,以后我们将在运行时使用此命令进行更改。

步骤7创建数据报告

右键单击Project1-> select data report->这将在设计器文件夹下添加DataReport1。

步骤8设置Datareport1的属性

单击报告图块下的报告比例以显示报告属性->右键单击报告->选择添加组页眉和页脚->它将在报告组页眉(第4节)和组页脚(第5节)中再添加两个分区

步骤9设置数据源和数据成员

选择您的报告,然后在属性窗口中设置以下数据报告属性

设置为DataEnviornment1Datasource

数据成员设置为Command1

步骤10设计报告布局

打开您的datareport1并将内容从command1拖到“组头”(第4节)中,并将Command2的字段拖到section1中。 为了设计更好的界面,您可以在第4节中拖动command2的字段。 您可以在此处整理报告。 在报告标题部分(第2节)中设置报告标题等。 在页脚部分设置页码和日期(第3节)

提示:“组页脚”部分用于显示层次结构中任何集合的Section4的聚合。

步骤11设计表单以访问数据报告

添加表格并添加一些命令按钮等。

连接按钮(CommandButton1)以显示/打印报告。 如果现在执行项目,则将获得一个报告,其中显示带有父chaild命令查询的数据库记录。

下一步是使报告动态化

使报告动态化

使用您以前的知识来执行此操作。 创建报告,然后执行以下步骤

步骤1设置DataReport属性

删除以前用于设计报告的报告的DataSource和DataMember。

说明 :当我们通过将command1和command2字段拖出报表来设计报表结构时。 我们设置了out报告的两个属性

1 ...数据成员2 ...数据源:

如果我们正在处理静态报告,则无需重置这些属性。 如果我们使用的是父子命令查询,则在属性窗口中删除这些属性非常重要。 否则,报告将不起作用。 这是因为当我们使用运行时查询时,我们将RS设置为DataSource。

步骤2重置标题部分的属性

对于组标题部分(第4节),删除DataMember属性。 确保此部分中所有字段的此属性为空。 只需将其清空,但不删除DataFieds。

说明

一般来说,组头部分包含查询的父部分。 对于本节中的每个字段,删除DataMemeber属性的值。 但是,保留dataFields属性很重要,这样查询才能确定哪些字段位于何处。



步骤3在Sections1中保留子命令字段的属性
不要更改command2的属性 说明:对于Section1,我们保留out子查询的字段。 不要删除此部分的属性,使其与设计布局时使用的属性相同。 步骤4这是创建动态报告的最后也是最重要的步骤。

这是一个示例代码,用于显示在datefrom.text和dateto.text中在窗体上指定的日期范围内的所有客户的订单详细信息

将此代码编码为dataeport的初始化事件。


Private Sub DataReport_Initialize()
Dim query As String ' this will hold our runtime query
Dim ToDate As String ' This will hold first date
Dim FromDate As String ' this will hold second date
Dim Conn As New ADODB.Connection
Dim RS As New ADODB.Recordset 
    Conn.CursorLocation = adUseClient
    Conn.ConnectionString = DataEnvironment1.Connection1
    ' Although connection is already set . But this can be used to set reset connection at runtime and connect to your database.
    Conn.Open
    ' get date values form form and store in string variables. 
    With form1
        FromDate = .DateFrom.Value
        ToDate = .DateTo.Value
    End With 
    ' As you copied text from hierarchy of command1, paste it here and do necessary changes in it. Such as in my example I am trying to specify my date requirements at runtime.  
    query = "SHAPE { "
    query = query & "SELECT DISTINCT C.* "
    query = query & "FROM Customers C INNER JOIN Orders O ON C.CustomerID = O.CustomerID "
    query = query & "WHERE O.Orderdate "
    query = query & "BETWEEN #" & strFrom & "# "
    query = query & "AND #" & strTo & "# "
    query = query & "ORDER BY C.CompanyName "
    query = query & "} AS Command1 "
    query = query & "APPEND ({ "
    query = query & "SELECT Orders.* "
    query = query & "FROM Orders "
    query = query & "WHERE Orderdate "
    query = query & "BETWEEN #" & FromDate & "# "
    query = query & "AND #" & ToDate & "# "
    query = query & "} AS Command2 "
    query = query & "RELATE 'CustomerID' TO 'CustomerID') "
    query = query & "AS Command2 "
    RS.Open query, Conn, adOpenForwardOnly
    Set DataReport1.DataSource = RS 
End Sub 
这将在VB中生成动态报告

希望对您有所帮助

法哈纳

From: https://bytes.com/topic/visual-basic/insights/716251-create-dynamic-report-parent-child-command

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值