社区
VB基础类
帖子详情
怎样让datareport打印一个查询?条件由textbox输入。
xinb
2000-08-15 08:24:00
好象不能在程序中指定datareport的datasource,
数据环境设计里的sql又不能用变量。
...全文
199
4
打赏
收藏
怎样让datareport打印一个查询?条件由textbox输入。
好象不能在程序中指定datareport的datasource, 数据环境设计里的sql又不能用变量。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
playyuer
2000-08-16
打赏
举报
回复
直接使用 ADODB.Recordset 作为 DataReport 的 DataSource
欢迎访问 Http://simideal.top263.net
参阅《VB 6之数据报表使用技巧》
(这里有许多 DataReport 相关内容及例程下载)
于溪
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 上增加分组标头和分组注脚区等,并根据控件的具体功能、用途为其定义各类控件集合,设计出更复杂的报表。
playyuer
2000-08-16
打赏
举报
回复
直接使用 ADODB.Recordset 做 DataReport 的 DataSource
欢迎访问 http://simideal.top263.net 有更多 DataReport 的相关内容!
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 上增加分组标头和分组注脚区等,并根据控件的具体功能、用途为其定义各类控件集合,设计出更复杂的报表。
playyuer
2000-08-16
打赏
举报
回复
直接使用 ADODB.Recordset 作为 DataReport 的 DataSource
欢迎访问 Http://simideal.top263.net
参阅《VB 6之数据报表使用技巧》
(这里有许多 DataReport 相关内容及例程下载)
lty
2000-08-15
打赏
举报
回复
Access数据库的用查询对象可以附带参数。
关于一个用VB编写的PING工具的问题
我在互联网上找到一个用VB编写的程序,是PING一个计算机的IP是否能通的工具,我改了改,使用ADO重数据库中循环读取IP地址,并将测试后的状态写入到数据库,作完后运行是可以测试,但是速度太慢了,每循环测试一个IP地址都需要接近1秒的时间,如果IP多的话时间就太长了,有其他办法让测试时间缩短吗?多线程如何做呢?谢谢各位帮忙!!! VB代码: Option Explicit Private...
人口管理系统
随着时代的发展、科学的进步,信息时代已经遍布全球,计算机已广泛地深入各行各业,起着越来越巨大的作用。它运算速度快,体积小,可靠性高,通用性与灵活性强,以及很高的性能价格比等特点,把人们带入了一个一切都离不开计算机的新时代。这里设计的人口户籍管理系统,包括登陆界面,户籍管理主界面,开户登记界面,备份数据库界面,
打印
界面,新增人口界面,删除人口界面,修改户籍信息界面,用户管理界面,分别有增、删、查、改的功能。
档案管理系统设计与实现
为能够迎合转变快速的信息技术,越来越多的企业倾向于分布式的 管理需求,提供分布式主从结构环境的Microsoft SQL Server便成为相当重要的核心角色,这个数据库服务器运用了关系数据库的技术,同时考虑到高效率数据库管理的需求,借助标准化的访问环境,提高了和前端应用环境轻松集成的能力,以适应各种企业组织在不同环境下的操作需求。主要能实现档案的录入、修改、查找、删除、统计、
查询
、预览、编辑、
打印
、
打印
预览、取消、刷新等功能,此外,在程序中还设计了用户登陆,以确保本系统应用的安全性。
vb/vb.net开发精粹(14)
VBA如何获取控件句柄? 各位大侠看看我这程序 求解 小白向各位请教下VB过滤广告的问题 关于回调函数的问题 新手请教ocx文件创建的问题 如何用vb自动填写、选择下拉框选项并提交网页表单?? 如何恢复最大化 如何写外接程序启动路径? 标尺控件 各位大侠帮忙啊,纠结好几天了 如何规定TEXT里面只能
输入
数字? 悲剧的时钟 各位大侠帮帮忙 这样的功能在MSHFlexGri
vb/vb.net开发技巧荟萃(九)
VBA如何获取控件句柄? 各位大侠看看我这程序 求解 小白向各位请教下VB过滤广告的问题 关于回调函数的问题 新手请教ocx文件创建的问题 如何用vb自动填写、选择下拉框选项并提交网页表单?? 如何恢复最大化 如何写外接程序启动路径? 标尺控件 各位大侠帮忙啊,纠结好几天了 如何规定TEXT里面只能
输入
数字? 悲剧的时钟 各位大侠帮帮忙 这样...
VB基础类
7,765
社区成员
197,605
社区内容
发帖
与我相关
我的任务
VB基础类
VB 基础类
复制链接
扫一扫
分享
社区描述
VB 基础类
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章