大家好!有个问题请教!我用datareport控件实现报表,但我这个报表牵扯几个表的数据,而且根据不同产品的产品编码(关键词)打印出不同产品的产量完成情况。我用DataEnvironment1指向数据库,在
DataEnvironment1下建立command1命令,然后右键点击command1,在其属性sql语句中写下sql查询代码。其中在where条件中要用到变量,另外比如在 select clwcb.zd ... 中,要根据where条件用到的变量值的不同来查询出不同的表的不同的字段,因而 clwcb是一个变量(值的不同代表不同的表),zd也是一个变量(代表clwcb值指向的表的不同字段)。然后我在datareport1的细节中指向查询出的command1的相应的字段。在datareport1中将整个布局设计好,最终打印出。现在我的问题关键是:sql查询代码怎么写?主要是其中含有变量呀。
另外有没有更好的办法来解决这个问题?
越详细越好呀,请详细指点。不要说些套话呀,对解决问题没有什么帮助。求助了,先谢谢了。
DataEnvironment1下建立command1命令,然后右键点击command1,在其属性sql语句中写下sql查询代码。其中在where条件中要用到变量,另外比如在 select clwcb.zd ... 中,要根据where条件用到的变量值的不同来查询出不同的表的不同的字段,因而 clwcb是一个变量(值的不同代表不同的表),zd也是一个变量(代表clwcb值指向的表的不同字段)。然后我在datareport1的细节中指向查询出的command1的相应的字段。在datareport1中将整个布局设计好,最终打印出。现在我的问题关键是:sql查询代码怎么写?主要是其中含有变量呀。
另外有没有更好的办法来解决这个问题?
越详细越好呀,请详细指点。不要说些套话呀,对解决问题没有什么帮助。求助了,先谢谢了。
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
例如:select * from 表 where 字段=?
如果是select 中的字段要变动,只能使用动态记录集的方式,像楼上所说的那种
具体如下:http://dev.csdn.net/develop/article/23/23592.shtm
看了这个贴子,终于实现了动态链接和打印报表
你把语句在SQL查询分析器中试试
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同样变量表名。我知道以上关于变量的格式不正确,我想问正确的怎么写。
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
必须用表名.字段这样来区分不同表的相同字段时,你说的 x= "filds1 " ,Sql = "select "& x & ", "& y & ", "& z & " from "& s ,怎么区分不同的表呀。你这样赋值,x= "filds1 ",没有考虑不同的表含有相同字段的情况,必须用clb.zd02这样的格式时,如果让x= "clb.zd02"恐怕不行吧,因为clb.zd02含有表名变量和字段变量。我说的意思是当在"select clb.zd01,product.图号...“中必须使用变量表.变量字段这样来区分字段时,怎么解决呢?
clb="table1"
str=clb & "."& zd01 '这个也可以不要,写在SQL语句中,看你的具体情况Sql = "select "& str &",product.图号 "& _
"from "& clb &",price "& _
"where "& clb &".任务编号=price.任务编号 "Rpt.Sections("Section1").Controls("text1").DataField = zd01总之,变量就是用: & 变量名称 ,这样的格式加在SQL语句的字符串中
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也好比一个变量,这样写运行成功的。我现在的问题是表名和字段都牵扯变量呀,复杂多了。讨教了。
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语句是不是正确,不对的地方再调整
我照以下试了。
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语句。
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前面也加了&。是不是凡是换行,上一行末尾都必须加上& _,不分什么常量和变量?
最后一个问题,谢谢你。
"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是变量,具体的格式应该怎么写?
dim str as string, anystr as string
'字符串加变量用&:
str = "字符串" & anystr
'字符串换行也要用&连接,两种方法:
str = "字符串"& _
"字符串"
str = "字符串" _
&"字符串"