当前位置:文档之家› VB中报表的使用方法

VB中报表的使用方法

Option Explicit Private Sub DataReport_Initialize() Dim cnn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim str As String Dim strsql As String str = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source= " & App.Path & "\db1.mdb " cnn.Open str rs.CursorLocation = adUseClient strsql = "select * from table1 " rs.Open strsql, cnn, adOpenDynamic, adLockOptimistic

Set DataReport1.DataSource = rs DataReport1.Sections(1).Controls( "Text1 ").Caption = rs.Fields(1) DataReport1.Sections(2).Controls( "Text2 ").Caption = rs.Fields(2) DataReport1.Sections(3).Controls( "Text3 ").Caption = rs.Fields(3) DataReport1.Sections(4).Controls( "Text4 ").Caption = rs.Fields(4)

End Sub 在报表中定义可四个RptTextBox控件.而且与都与数据库绑定了。运行看不到结果。老说下标越界

DataReport1.Sections(1).Controls(1).Caption = rs.Fields(1) controls(1);1表示你在报表上画它时的顺序. 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″ ′货币

相关主题