VB程序员博客

VB程序开发

问题:水晶报表已经设置好了,但在vb程序中如何显示出这个报表,请高人指点,新手还请明示。        Getmarg "", "tj.rpt"
        FrmRpt!Report1.SelectionFormula = "{pjx.glid}=" & Val(glid) & " and {pjx.username}='" & ComputerName & "'"
        FrmRpt!Report1.Formulas(0) = "a='" & Zcdwname & "统计表" & "'"
        FrmRpt!Report1.Formulas(1) = "dw='" & Zcdwname & "'"
        FrmRpt!Report1.Destination = 0
        On Error Resume Next
        FrmRpt!Report1.Action = 1

Sub Getmarg(title As String, filename As String)
    Dim ssn As New ADODB.Recordset
    ssn.Open "select * from report where title='" & title & "' and printer_type='" & PrinterSet & "'", cn
    If Not ssn.EOF Then
        FrmRpt!Report1.ReportFileName = ReportPath & ssn("filename")
        FrmRpt!Report1.MarginLeft = ssn("marginleft")
        FrmRpt!Report1.MarginTop = ssn("margintop")
    Else
        FrmRpt!Report1.ReportFileName = ReportPath & filename
    End If
    FrmRpt!Report1.Connect = "DSN=" & DsnName & ";UID=" & DatabaseLoginUid & ";PWD=" & DatabaseUserPwd & ";"
    ssn.Close: Set ssn = Nothing
End Sub


    现在我在学习软件的打包。工程语言是VB6.0;水晶报表版本是V9.2简体中文版;打包工具是Installshield 2008简体中文版。
    软件的打包需要“水晶报表的合并安装模块”,因为我不懂英文,所以我无法到水晶报表的官方网站去下载,所以我到这里来求助大家了,请有心的朋友能传一份给我,谢谢。我的邮箱是:xieyudada@163.com
    我现在使用的水晶报表的版本是V9.2简体中文版,请问后面的版本有没有中文版的呢?比如10、11或12版等?如果有的话请告诉我一下下载地址,谢谢。

    另外我现在使用水晶报表还碰到一个问题,在此请教。就是在调试工程的时候,打开“打印预览”窗体,调用水晶报表时会跳出警告:
    "0×3c2ce642"指令引用的”0×00720111”内存。该内存不能为”read”。
    或
    "0×3c2ce670"指令引用的”0×00720111”内存。该内存不能为”written”。
    我到网上看了帖子,有人只是简单的说了下,说是水晶报表的安装包的问题,要下载个新的就可以了。我抓瞎了,我不知道这个什么安装包到哪里下载,下载下来后又怎么操作呢?谢谢各位老师能够来帮助我。谢谢。

    不好意思,我对我们论坛不太了解,请问图表区的路径是什么?然后怎么才能找到阿泰老师呢?当然,我依然希望能在这里有朋友能够帮到我,谢谢。在。net板块下。
他一直在。


为什么说我的还没有被定义:
Private Sub MENU_REPORT_EMPLOYEE_Click()
Dim rpt As New DataReport1
rpt.Show
End SubDataReport1是什么,要是form,才能show默认的设计报表,在设计器里面Private Sub MENU_REPORT_EMPLOYEE_Click()
Dim rpt As New DataReport
rpt.Show
End Sub<
小娟,冒是不行。如果
2。工程——〉添加 data report

lz的代码应该可以,确认DataReport1是否对现在我按照一来做,引用了。但是又出现说rpt.show是未找到方法或数据成员。
怎么做呢?休假中,家里没vb。
等待小娟。求救啊问多个问题
点样可以将固定的路径改成相对的路径
用app.path怎样改
例如:data source=" &"user.mdb"新问题出现,rpt.show哪里它说我未找到方法或数据成员
可以怎样做?<
<
按2做,lz的代码是对的
Dim rpt As New DataReport1 '要确保这个DataReport1名字是对的

实在不明白lz错在哪里

***********************************
强调

lz不要用
1。引用——〉microsoft data report designer v6.0


2。工程——〉添加 data report

查一下报表对象引用了没有?


在CSDN里下的这个控件没有数据库
http://download.csdn.net/source/802214
源码天空里的这个有数据库
http://jlhttp.codesky.net/codesky2009/20061111947377.rar

我电脑里没有VSFXEXGRID 所有用的是MSFLEXGRID

预览时表格线都有的,打印时表格线就不全了! 打印到PDF里也是一样没有表格线的!
PDF虚拟打印机地址:thunder://QUFodHRwOi8vd3QuY25nci5jbi8yMDA3MDUvUERGLXhsZHlqLnJhclpa自己先顶一下! 在线等待中….可以设置gridlines ,但这个控件有问题,我也发过打印的帖子,现在将就用着<
如何设置 gridlines  能解决这个问题吗?
用的什么控件,什么方式打印?MSFLEXGRID.ocx本来就是vb自带的控件(打过补丁),还需要下载吗
gridlines 是控件的属性,不会的话搜吧


DataReport_FileInG.Orientation = rptOrientLandscape
DataReport_FileInG.Show 1
把报表设为横向打印,但提示第一句错误“未找到方法或数据成员”。
奇怪的是在当前模块中我也使用了同样的语句来设置另一个报表就不会出错,还有就是在我自己的电脑上是不会出现错误的,到其他几台电脑都会出现这种错误。
请各位帮帮助!

用Printer.Orientation = vbPRORLandscape就会提示"报表宽度大于纸的宽度"的错误!减小报表的宽度或者设置纸张类型
搜下"报表宽度大于纸的宽度"终于解决问题啦!原来是没有打补丁,我打上SP6补丁后Orientation属性出现了,问题也解决了.


如题

Dim oApp As New CRAXDRT.Application
        Dim oRpt As CRAXDRT.Report
        Dim reportName As String
        reportName = App.Path & "
eportquotation.rpt"    '定义要引用的rpt文件
       
        Set oRpt = oApp.OpenReport(reportName, 1)
        oRpt.DiscardSavedData
       
        oRpt.EnableParameterPrompting = False
        oRpt.ParameterFields.GetItemByName("client_code").AddCurrentValue (cls.ClientModel.ClientCode)
        oRpt.ParameterFields.GetItemByName("client_name").AddCurrentValue (cls.ClientModel.ClientName)
        oRpt.ParameterFields.GetItemByName("quotation_code").AddCurrentValue (cls.QuotationCode)
        oRpt.ParameterFields.GetItemByName("quotation_date").AddCurrentValue (g_Turn_Dtm_Str(cls.QuotationDate))
        oRpt.ParameterFields.GetItemByName("client_person").AddCurrentValue cls.ClientModel.Linkman
        oRpt.ParameterFields.GetItemByName("client_phone").AddCurrentValue cls.ClientModel.Phone
        oRpt.ParameterFields.GetItemByName("client_fax").AddCurrentValue cls.ClientModel.Fax
        oRpt.ParameterFields.GetItemByName("client_email").AddCurrentValue cls.ClientModel.Email
        oRpt.ParameterFields.GetItemByName("client_address").AddCurrentValue cls.ClientModel.Address
        oRpt.ParameterFields.GetItemByName("employee_name").AddCurrentValue cls.EmployeeModel.EmployeeName
        oRpt.ParameterFields.GetItemByName("employee_phone").AddCurrentValue cls.EmployeeModel.Phone
        oRpt.ParameterFields.GetItemByName("employee_fax").AddCurrentValue cls.EmployeeModel.Fax
        oRpt.ParameterFields.GetItemByName("employee_email").AddCurrentValue cls.EmployeeModel.Email

        oRpt.DataBase.SetDataSource cls.QuotationDetailRst  '连接水晶报表和数据源
        oRpt.ReadRecords
       
        Dim frm As New frmPrint
        frm.CRViewer1.ReportSource = oRpt
        frm.CRViewer1.Refresh
        frm.CRViewer1.ViewReport
        frm.Show
————————————————–
报表中显示上面的那几个参数,含有中文的就乱码,
但是oRpt.DataBase.SetDataSource cls.QuotationDetailRst 数据集中的中文就没问题

我晕!!!知道了,我太糊涂了,是自体,我把参数的自体定为  Arial  了!!!不乱码才怪,换成宋体就好了


我用的代码是:
Dim txta As TextObject
txta = oRpt.ReportDefinition.ReportObjects.Item("text11")
txta.Text = frmLogin.Text1.Text

数据库连接省略,想要将对话框frmlogin的text1的值赋给水晶报表的text11,为什么出错?谢谢!

就parameter是什么意思?

就是你定义参数,然后给参数传值一定不会错的

txta.text 是只读属性
赋值是
txta.SetText 方法

不过在vb里好像是不能
txta = oRpt.ReportDefinition.ReportObjects.Item("text11")
这样的吧

可以这样

Dim txta As TextObject
Set txta = objCRReport.Sections(1).ReportObjects.Item(1)
txta.SetText "zzz"

和这样
http://www.cnblogs.com/babyt/archive/2007/12/26/1016076.html

谢谢阿泰,这个问题困扰我很长时间了,用你的办法解决了。

我怎么给你奖励分呀?

这个页面上有“结贴去”这个按钮,点进去后,在后面的黄色框里输入每个人的得分,然后点 结贴 就可以了


我用msgbox显示了   printer.width   和   datareport1.reportwidth   的宽度   ,报表宽度为8370,纸的宽度为11906,datareport.leftmargin和datareport.rightmargin都为1440,datareport1.reportwidth   +datareport.leftmargin+
datareport.rightmargin <printer.width   ,可怎么还报报表宽度大于纸的宽度,还有这个是在17的显示器就有问题,而在15的显示器上到没有问题,19的显示器也没有问题,是17显示器的问题么,大家知道设置么

还有知道哪有datareport报表设计的文章么?我设计的这个下面总是很多空白,细节1放了很多控件,细节3根本都拉不上去了

和显示器没关系
和当前打印机设置的纸张相关

也就是说你当前打印机用的纸张规格的宽度,小于你报表设计纸张的宽度
还有你所说的空白,应该是控件大小报表布局不合理

是去设置   控制面板   下   打印机设置么

不同的打印机设置纸张会略有不同,不过基本上是在“开始/设置/打印机和传真”下,双击要设置的打印机,在其“打印首选项”中设置,有的打印机还要在其“属性”中的设备相关项中设置

多谢大家   已解决

我只想在计算机上显示出报表的内容,看看数据是否正确,如果正确了,再想办法调整纸张的大小或报表的问题.
现在关键是我不知道数据是否显示正确?大侠们,帮忙啊!


Private Sub Command10_Click()
Dim i As Integer
Set zsbexcel = New Excel.Application
        zsbexcel.Visible = True
        zsbexcel.SheetsInNewWorkbook = 1
        Set zsbworkbook = zsbexcel.Workbooks.Add
        With zsbexcel.ActiveSheet.Range("A3:E26").Borders        '边框设置
              .LineStyle = xlBorderLineStyleContinuous
              .Weight = xlThin
              .ColorIndex = 1
              End With
        With zsbexcel.ActiveSheet.Range("A1:E26").Font      '字体设置
              .Size = 14
              .Bold = True
              .Italic = True
              .ColorIndex = 1
        End With
      zsbexcel.ActiveSheet.Rows.HorizontalAlignment = xlVAlignCenter        '水平居中
      zsbexcel.ActiveSheet.Rows.VerticalAlignment = xlVAlignCenter          '垂直居中
      With zsbexcel.ActiveSheet
          .Cells(1, 3).Value = "测试数据"
         
          .Cells(2, 1).Value = "型号:"
          .Cells(2, 2).Value = Adodc1.Recordset.Fields("产品型号").Value
          .Cells(2, 3).Value = "序列号:" + Adodc1.Recordset.Fields("序列号").Value
          .Cells(2, 4).Value = Adodc1.Recordset.Fields("序列号").Value
          .Cells(2, 5).Value = "检验性质:" + Adodc1.Recordset.Fields("检测类型").Value
         
         
          .Cells(3, 1).Value = "项目编号"
          .Cells(3, 2).Value = "项目名称"
          .Cells(3, 3).Value = "测试数据"
          .Cells(3, 4).Value = "标准值"
          .Cells(3, 5).Value = "分项测试结果"
         
          .Cells(27, 4).Value = "测试员"
          .Cells(28, 4).Value = "测试日期"
          .Cells(27, 5).Value = Adodc1.Recordset.Fields("测试员").Value
          .Cells(28, 5).Value = Adodc1.Recordset.Fields("测试日期").Value

      End With
    zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait            '
    zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
    zsbexcel.ActiveSheet.PrintPreview

End Sub
以上代码是通过EXCLE实现数据库记录大打印,但是存在一些问题:
1  有些格无法实现居中显示,而是水平居左,如C2  E2
2  如果通过VB实现对EXCEL列宽的设置,以便使所有数据都可以显示出来
3  如果通过VB实现对EXCEL格的合并,如将A2  B2合并

                  自动测试数据
型号:KI2000      序列号:A91230C0001C0  检验性质:退货检验           
项目编号 项目名称     测试数据 标准值 分项测试结果
我要具体设置列宽,使得我的报表能够直接通过A4纸张打印出来,如果设置成自动可能有问题?

以下程序是在参考你的程序后修改的
        zsbexcel.ActiveSheet.Range("A2:B2").MergeCells = True
        zsbexcel.ActiveSheet.Range("A1:E1").MergeCells = True
        zsbexcel.ActiveSheet.Range("C2:D2").MergeCells = True
        zsbexcel.ActiveSheet.Range("A1").HorizontalAlignment = xlCenter
        zsbexcel.ActiveSheet.Range("A1").VerticalAlignment = xlCenter
'      水平居中
        With zsbexcel.ActiveSheet.Range("A3:E26").Borders        '边框设置
              .LineStyle = xlBorderLineStyleContinuous
              .Weight = xlThin
              .ColorIndex = 1
              End With
        With zsbexcel.ActiveSheet.Range("A1:E26").Font            '字体设置
              .Size = 14
              .Bold = True
              .Italic = True
              .ColorIndex = 1
        End With

还有就是通过VB设置页面边距

引用 2 楼 xhzhuzz 的回复:

我要具体设置列宽,使得我的报表能够直接通过A4纸张打印出来,如果设置成自动可能有问题?

Columns("C:C").ColumnWidth = 9

引用 3 楼 xhzhuzz 的回复:
还有就是通过VB设置页面边距

我都设3,这样了,红色

    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(1.18110236220472)
        .RightMargin = Application.InchesToPoints(1.18110236220472)
        .TopMargin = Application.InchesToPoints(1.18110236220472)
        .BottomMargin = Application.InchesToPoints(1.18110236220472)

        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 100
        .PrintErrors = xlPrintErrorsDisplayed
    End With

mark


用vb做了一些数据报表,最近发现section1部分的很多text控件里面很多字段长度过长而无法全部显示,
于是设置这些text控件的CanGrow属性为true,如此以来text里的内容都显示出来了,但它两旁的两条竖线却
还是以前那么高,整个报表想撑破了大肚子似的–很不美观。
没有发现这些竖线(line)有类似CanGrow的属性,这种问题该如何解决呢?

请教了一个大哥:这个问题目前无解。

哈哈,那就送分给99兄弟了。