在VB6中,报表如何调用recordset 在datareport 的Initialize事件中加入set datareport.datasourse=rs 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VB 6之数据报表使用技巧 于溪 VB 6.0专业版和企业版中的数据报表设计器与数据环境设计器是数据访问的新内容。MSDN 所提供的Prjnwind.vbp 示例工程在设计阶段(Design Time)就已将DataEnvironment设为DataReport的数据源,并将打印格式也设好,这种做法不太利于程序的通用性。当然,我们也可以对DataEnvironment编程,在运行阶段(Run Time)控制数据源。其实,DataReport可以完全脱离DataEnvironment,而打印由动态SQL生成的Recordset。 实现代码如下: Private Sub DataReport_Initialize() … Dim adoConnectionX As New ADODB.Connection Dim adoRecordsetX As New ADODB.Recordset adoConnectionX.Open″Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=″ & App.Path & ″\Xxx.mdb″ adoRecordsetX.Open ″Select * From表名″, adoConnectionX Set DataReportX.DataSource = adoRecordsetX ′设置 DataReport 的数据源 … 由VB 6 所提供的DataReport.Sections.Item(Index).Controls.Item(Index)...这样的语法不太利于编程控制数据报表设计器的专用控件的位置、大小等各种属性。但是,我们可以编程根据控件所在区域(Section)和所属类别等将它们分成若干集合(Collection),然后通过控制集合的元素来控制其所代表的控件。当然,在设计阶段我们要将足够多的控件绘制到DataReport上备用。实现的主要部分代码如下: … ′根据控件所在区域(Section)和所属类别分集合(Collection) Dim RHSec4—RptLbl—Collection As New Collection … ′页标头(PageHeader)区域 Shape(RptShape) 控件集合 Dim PHSec2—RptShp—Collection As New Collection … ′细节(Detail)区域 TextBox(RptTextBox) 控件集合 Dim DSec1—RptTxt—Collection As New Collection … Dim Ctl As Object … For Each Ctl In Me.Sections.Item(″Section1″).Controls ′Section1 Select Case TypeName(Ctl) Case ″RptLabel″ DSec1—RptLbl—Collection.Add Ctl Ctl.Caption = ″" Case ″RptShape″ DSec1—RptShp—Collection.Add Ctl Case ″RptTextBox″ Ctl.DataField = adoRecordset.Fields.Item(0).Name ′先将所有TextBox(RptTextBox) 控件绑定到某一字段,否则报错! DSec1—RptTxt—Collection.Add Ctl End Select Ctl.Visible = False Next Ctl … ′以下通过控制集合的元素来准确有效的控制这些元素所代表的控件。 Dim i As Integer Dim bFmt As StdDataFormat ′定义布尔(Boolean)型字段的数据格式 Set bFmt = New StdDataFormat bFmt.Type = fmtBoolean bFmt.TrueValue = ″是″ bFmt.FalseValue = ″否″ For i = 0 To 5 ′只打印前几个字段,Shape(RptShape) 控件用来显示单元格,页标头(PageHeader)区域:显示列表头(Caption) With PHSec2—RptShp—Collection.Item(i + 1) ′单元格 .Visible = True If i = 0 Then .Left = 0 Else .Left = PHSec2—RptShp—Collection.Item(i).Left + PHSec2—RptShp—Collection.Item(i).Width End If .Top = 0 .Height = 400 ′可根据字体设 单位:缇字体的高度(单位:缇)可使用 Form、PictureBox 的TextHeight 方法或 API 获得 .Width = 1500 ′这里可根据实际情况用数组分别设置各列的列宽 End With With PHSec2—RptLbl—Collection.Item(i + 1) ′列表头标题(Caption) .Left = PHSec2—RptShp—Collection.Item(i + 1).Left + 100 .Top = PHSec2—RptShp—Collection.Item(i + 1).Top + 100 .Height = PHSec2—RptShp—Collection.Item(i + 1).Height - 180 .Width = PHSec2—RptShp—Collection.Item(i + 1).Width - 200 .Caption = adoRecordsetX.Fields.Item(i).Name .Alignment = rptJustifyCenter .Visible = True End With ′细节(Detail)区域显示: With DSec1—RptShp—Collection.Item(i + 1) ′单元格 If i = 0 Then DSec1—RptShp—Collection.Item(i + 1).Left = 0 Else .Left = DSec1—RptShp—Collection.Item(i).Left + DSec1—RptShp—Collection.Item(i).Width End If .Top = 0 .Height = PHSec2—RptShp—Collection.Item(i + 1).Height .Width = PHSec2—RptShp—Collection.Item(i + 1).Width .Visible = True End With With DSec1—RptTxt—Collection.Item(i + 1) ′数据 .Height = DSec1—RptShp—Collection.Item(i + 1).Height - 180 .Left = DSec1—RptShp—Collection.Item(i + 1).Left + 100 .Top = DSec1—RptShp—Collection.Item(i + 1).Top + 100 .Width = DSec1—RptShp—Collection.Item(i + 1).Width - 200 .DataField = adoRecordsetX.Fields.Item(i).Name ′重新绑定字段 Select Case adoRecordsetX.Fields.Item(i).Type ′可根据字段数据类型设置数据格式 Case adBigInt, adInteger, adSmallInt .DataFormat.Format = ″###,##0″ ′数字 .Alignment = rptJustifyRight Case adBoolean Set .DataFormat = bFmt ′布尔型字段设为自定义格式 .Alignment = rptJustifyCenter Case adCurrency .DataFormat.Format = ″###,##0.00″ ′货币 .Alignment = rptJustifyRight Case adDate, adDBDate, adDBTimeStamp .DataFormat.Format = ″Long Date″ ′日期、时间 .Alignment = rptJustifyRight Case Else ′其它,如:文本等 .Alignment = rptJustifyLeft End Select .Visible = True End With Next i DataReport1.Sections.Item(″Section2″).Height = 400 DataReport1.Sections.Item(″Section1″).Height = 400 … End Sub 该方案在PWin 9.X 和VB 6.0下通过。 如果要打印分级(层)Recordset ,还要在Datareport 上增加分组标头和分组注脚区等,并根据控件的具体功能、用途为其定义各类控件集合,设计出更复杂的报表。 如何判断oracle数据库是否正常。 求一个关于刷卡记录Sql语句的写法 菜鸟的问题 是用MSHFlexGrid控件还是用dataGrid控件? 原始问题? 复制的表到那里去了呢? 能帮我解释一下VB的句子吗,谢谢了<保存文件例子> 程序中如何用简单的方式设置IE的首页? 有人知道怎么用VB操作EXCEL的一个单元格吗???THANK SQL数据库高手请帮忙!!!! help! help! please, VBA for EXCEL 怎样封锁鼠标,高手请进!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货