大家好!有个问题请教!我用datareport控件实现报表,但我这个报表牵扯几个表的数据,而且根据不同产品的产品编码(关键词)打印出不同产品的产量完成情况。我用DataEnvironment1指向数据库,在
DataEnvironment1下建立command1命令,然后右键点击command1,在其属性sql语句中写下sql查询代码。其中在where条件中要用到变量,另外比如在 select clwcb.zd ... 中,要根据where条件用到的变量值的不同来查询出不同的表的不同的字段,因而 clwcb是一个变量(值的不同代表不同的表),zd也是一个变量(代表clwcb值指向的表的不同字段)。然后我在datareport1的细节中指向查询出的command1的相应的字段。在datareport1中将整个布局设计好,最终打印出。现在我的问题关键是:sql查询代码怎么写?主要是其中含有变量呀。
另外有没有更好的办法来解决这个问题?
越详细越好呀,请详细指点。不要说些套话呀,对解决问题没有什么帮助。求助了,先谢谢了。

解决方案 »

  1.   

    不用DataEnvironment控件。运行VB,选择“工程\引用”命令,引用“Microsoft AetiveX Date Objects 2.x Library”Option ExplicitPrivate Sub DataReport_Initialize()
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim Sql As String    
    '连接数据库(Access)
        Set cn = New ADODB.Connection
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0 ;" & _
                "Data Source=" & App.Path & "\db1.mdb;" & _
                "Persist Security Info=False"
    '打开记录集
        Set rs = New ADODB.Recordset
        Sql = "select filds1,filds2,filds3 from tb "   'SQL语句可以用变量
        rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
        
    '设置text控件属性
        Rpt.Sections("Section1").Controls("text1").DataField = "filds1"
        Rpt.Sections("Section1").Controls("text2").DataField = "filds2"
        Rpt.Sections("Section1").Controls("text3").DataField = "filds3"
       
        Set Rpt.DataSource = rs
    End Sub
      

  2.   

    如果仅仅是where 字段=<参数>,那么可以用?号写入command参数内容,
    例如:select * from 表 where 字段=?
    如果是select 中的字段要变动,只能使用动态记录集的方式,像楼上所说的那种
      

  3.   

    关联查询后得到要打印的数据记录集对象!然后再将数据记录集对象传给报表控件!
    具体如下:http://dev.csdn.net/develop/article/23/23592.shtm
      

  4.   

    vbman2003(家人),你好!我照你的办法试了。可运行时老是说:No value given for one or more required parameters。然后指向“rs.Open  Sql,  cn,  adOpenKeyset,  adLockOptimistic ”,可是我检查了这句没发现什么错误呀。请教! zhujiechang(小朱) ,你好,我的select 中的表和字段也涉及到变量呀。chenyu5188(来自东方的狼),你好。我问题的关键是sql查询代码怎么写?主要是其中含有变量呀。请教!
      

  5.   

    Sql = "select output01m.任务编号,product.图号,price.上年价,price.一月现价,output01m.一月产量,output01m.自一月累计,output01m.一月现价产值,output01m.一月上年价产值 from output01m,price,product where output01m.任务编号=price.任务编号 and output01m.任务编号=product.任务编号  and price.任务编号=product.任务编号 and output01m.任务编号='205' "你好,vbman2003(家人)!我先在条件语句里用了常量试试,select语句也先用的常量。如上select output01m.任务编号...where ...output01m.任务编号='205' ,可是就出现上述问题。
      

  6.   

    谢谢小朱zhujiechang(小朱) ( ) 
    看了这个贴子,终于实现了动态链接和打印报表
      

  7.   

    你的SQL语句中可能有中文(全角)标点符号
    你把语句在SQL查询分析器中试试
      

  8.   

    vbman2003(家人) ,谢谢你!现在好了,我重新将标点敲了一遍。接下来要试试加变量的情况。到时说不定还要讨教呀。水平高呀。
      

  9.   

    vbman2003(家人),你好!讨教。我现在的问题是,当我在sql语句中使用变量表名和变量字段时怎么写,我下面这样写不正确。运行时出现:No  value  given  for  one  or  more  required  parameters。也就是说我的格式不正确。下面就是我写的:
    Sql = "select clb.zd01,product.图号,price.上年价,price.一月现价,clb.zd02,clb.zd03,clb.zd04,clb.zd05 from clb,price,product where clb.任务编号=price.任务编号 and clb.任务编号=product.任务编号  and price.任务编号=product.任务编号 and clb.任务编号='205 '" 上边“clb.zd01“中,clb是一个变量表名,zd01是一个变量字段名。clb.zd02,clb.zd03,clb.zd04,clb.zd05 同样。 ”from clb,price,product“中clb是变量表名,price和product是常量。 ”where clb.任务编号=price.任务编号...“中clb同样变量表名。我知道以上关于变量的格式不正确,我想问正确的怎么写。
      

  10.   

    前面的代码用变量代替字段:
    Option ExplicitPrivate Sub DataReport_Initialize()
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim Sql As String    
      Dim s,x,y,z
        
        x="filds1"  '字段名称
        y="filds2"
        z="filds3"
        s="tablename" '表名称
    '连接数据库(Access)
        Set cn = New ADODB.Connection
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0 ;" & _
                "Data Source=" & App.Path & "\db1.mdb;" & _
                "Persist Security Info=False"
    '打开记录集
        Set rs = New ADODB.Recordset
        Sql = "select "& x &","& y &","& z &" from "& s    'SQL用变量
        rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
        
    '设置text控件属性
        Rpt.Sections("Section1").Controls("text1").DataField = x
        Rpt.Sections("Section1").Controls("text2").DataField = y
        Rpt.Sections("Section1").Controls("text3").DataField = z
       
        Set Rpt.DataSource = rs
    End Sub
      

  11.   

    vbman2003(家人),你好!如果不同的表含有相同的字段时,
    必须用表名.字段这样来区分不同表的相同字段时,你说的   x=  "filds1  " ,Sql  =    "select    "&  x  &  ",  "&  y  &  ",  "&  z  &  "  from    "&  s   ,怎么区分不同的表呀。你这样赋值,x=  "filds1  ",没有考虑不同的表含有相同字段的情况,必须用clb.zd02这样的格式时,如果让x= "clb.zd02"恐怕不行吧,因为clb.zd02含有表名变量和字段变量。我说的意思是当在"select  clb.zd01,product.图号...“中必须使用变量表.变量字段这样来区分字段时,怎么解决呢?
      

  12.   

    呵呵,够复杂。这样试试:Dim clb, zd01, strzd01="filds1"
    clb="table1"
    str=clb & "."& zd01  '这个也可以不要,写在SQL语句中,看你的具体情况Sql = "select "& str &",product.图号 "& _
          "from "& clb &",price "& _
          "where "& clb &".任务编号=price.任务编号 "Rpt.Sections("Section1").Controls("text1").DataField = zd01总之,变量就是用: & 变量名称 ,这样的格式加在SQL语句的字符串中
      

  13.   

    你好呀!vbman2003(家人) !我照你说的如下写。不正确呀。运行时老是说:sql语句语法错误。我想格式不对吧。Dim rwbh As String
    Dim clb As String
    Dim zdbl As String
    zdbl = "一"         '表示月份,取值为”一,二,...,十二“
    rwbh = "205"        ’表示产品编码
    clb = "output01m"   '表示具体的产量表
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\应用资料\统计三\static.mdb;Persist Security Info=False"
        
    Sql = ""select"&clb&" .任务编号,product.图号,price.上年价,price."&zdbl&"月现价,"&clb&"."&zdbl&"月产量,"&clb&".自"&zdbl&"月累计,"&clb&"."&zdbl&"月现价产值,"&clb&"."&zdbl&"月上年价产值 from "&clb&" ,price,product where "&clb&".任务编号=price.任务编号 and "&clb&".任务编号=product.任务编号  and price.任务编号=product.任务编号 and "&clb&".任务编号=" & rwbh ""
     
    rs.Open Sql, cn, adOpenKeyset, adLockOptimistic
    Set DataReport1.DataSource = rs我上边写成:"&clb&".自"&zdbl&"月累计。解释一下,我的表里有个”自某月累计“字段,所以这个字段的月(如一,二,...十二)用变量zdbl来代替,其他的道理一样。麻烦你帮我查看一下,vbman2003(家人)!另外,我以前写的代码中如 "select * from schw  where 条码 = '" & Text33.Text & "'" 中,Text33.Text也好比一个变量,这样写运行成功的。我现在的问题是表名和字段都牵扯变量呀,复杂多了。讨教了。
      

  14.   

    Dim rwbh As String
    Dim clb As String
    Dim zdbl As String
    zdbl = "一"         '表示月份,取值为”一,二,...,十二“
    rwbh = "205"        ’表示产品编码
    clb = "output01m"   '表示具体的产量表
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\应用资料\统计三\static.mdb;Persist Security Info=False"
        
    Sql = "select "& clb &".任务编号,product.图号,price.上年价,"& _
          "price."& zdbl &"月现价,"& clb &"."& zdbl &"月产量,"& _
          clb &".自"& zdbl &"月累计,"& clb &"."& zdbl &"月现价产值,"& _
          clb &"."& zdbl &"月上年价产值 "& _
          "from "& clb &",price,product "& _
          "where "& clb &".任务编号=price.任务编号 "& _
          "and "& clb &".任务编号=product.任务编号  "& _
          "and price.任务编号=product.任务编号 "& _
          "and "& clb &".任务编号='"& rwbh &"'"要注意空格,字段“任务编号”是文本型的话,rwbh要加单引号
    你可以debug.print sql,看看SQL语句是不是正确,不对的地方再调整
      

  15.   

    vbman2003(家人) ,你好!
    我照以下试了。
     Sql = "select" & clb & " .任务编号,product.图号,price.上年价,price." & zdbl & "月现价," & clb & "." & zdbl & "月产量," & clb & ".自" & zdbl & "月累计," & clb & "." & zdbl & "月现价产值," & clb & "." & zdbl & "月上年价产值 from " & clb & " ,price,product where " & clb & ".任务编号=price.任务编号 and " & clb & ".任务编号=product.任务编号  and price.任务编号=product.任务编号 and " & clb & ".任务编号='" & rwbh & "'"运行时,说sql语句有错,无效的sql语句。
      

  16.   

    你反我的直接贴到你代码中试试,你最明显的错误就是select后面没有空格,你用debug.print sql就能看出来
      

  17.   

    vbman2003(家人),你好呀!我把你的代码直接贴了,好了。运行成功。你真厉害呀!
    Sql = "select "& clb &".任务编号,product.图号,price.上年价,"& _
          "price."& zdbl &"月现价,"& clb &"."& zdbl &"月产量,"& _
          clb &".自"& zdbl &"月累计,"& clb &"."& zdbl &"月现价产值,"& _
          clb &"."& zdbl &"月上年价产值 "& _
          "from "& clb &",price,product "& _
          "where "& clb &".任务编号=price.任务编号 "& _
          "and "& clb &".任务编号=product.任务编号  "& _
          "and price.任务编号=product.任务编号 "& _
          "and "& clb &".任务编号='"& rwbh &"'"不过,我对你以上的格式为什么那么写有点不明白。比如,sql语句的第一行结束为什么要用,
    "& _"price."& ,‘_’我知道是续行符,但“price”是常量,为什么要在它前面加上 & 。
    第五行,from前面也加了&。是不是凡是换行,上一行末尾都必须加上& _,不分什么常量和变量?
    最后一个问题,谢谢你。
      

  18.   

    哦,还有一个问题。我在以下sql语句中
    "select output01m.任务编号,product.图号,product.上年价,price.一月现价,output01m.一月产量,output01m.自一月累计,output01m.一月现价产值,output01m.一月上年价产值 from output01m ,price,product where output01m.任务编号=price.任务编号 and output01m.任务编号=product.任务编号  and price.任务编号=product.任务编号 and output01m.任务编号 like   '" & rwbh & "'  "rwbh是个字符串变量,我现在让rwbh="205",在以上sql语句中实现模糊查询,意思是将任务编号含有205的所有产品查询出来。可是我发现查询的只是output01m.任务编号=205的,而output01m.任务编号=205-01的就没查询出。我知道常量怎么写。但 rwbh是变量,具体的格式应该怎么写?
      

  19.   

    上面模糊查询的问题我已经解决了,like后面换成  ' % "  &  rwbh  &    "%'      "  就行了。
      

  20.   


    dim str as string, anystr as string
     '字符串加变量用&:
    str = "字符串" & anystr  
    '字符串换行也要用&连接,两种方法:          
    str = "字符串"& _
       "字符串"
    str = "字符串" _
       &"字符串"
      

  21.   

    谢谢你,vbman2003(家人) !
      

  22.   

    报表里可以放多少Rpttextbox控件的啊?