水晶报表看似简单的问题(困扰我多时啊,各位大虾请不吝赐教)

zhp97 2003-10-28 06:28:44
我用报表设计器设计好了报表,在程序里调用(数据库是access),在程序中需要动态设置报表连接的mdb文件路径于是有了如下代码:
report := Application1.OpenReport(reppath,crOpenReportByTempCopy);
Report.DiscardSavedData;
report.Database.LogOnServer('PDBDAO.Dll','d:\Datatest\2.mdb','d:\Datatest\2.mdb','admin','nclt');
最后这句无法通过,报错为“未指定的错误”。小弟实在没办法了,不知道我该如何是好
该函数的参数如下:
report.database.logonserver(const pDllName:widestring;const pservername:widestring;pdatabasename:olevariant;puserid:olevariant;ppassword:olevariant);
请各位多多提携啊,如果谁能彻底解决我的问题,将重分酬谢!!!!(另外再加分)
...全文
130 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhp97 2003-11-11
  • 打赏
  • 举报
回复
report.database.table,没有setdatasource这个属性,还说你试了,老大!!你不会是乱说的吧?
nfsxy 2003-11-11
  • 打赏
  • 举报
回复
楼主一定是你程序有问题,我在我自己的程序里已经这样写了,绝对可行!!
Private Function mSubStandard() As Boolean
Dim i As Integer
Dim m As Integer
Dim n As Integer
Dim SQL As String


'DB_STRATUM
SQL = "SELECT DB_PROJECT.[Project Number], DB_PROJECT.[Project Name], DB_STRATUM.[Stratum ID], DB_STRATUM.[Stratum Number], DB_STRATUM.[Stratum Name] " _
& "INTO TEMP_RPT_STRATUM " _
& "FROM DB_PROJECT INNER JOIN DB_STRATUM ON DB_PROJECT.[Project ID] = DB_STRATUM.[Project ID] " _
& "Where (((DB_PROJECT.[Project ID]) = " & gProjectID & ")) " _
& "ORDER BY Val([DB_STRATUM].[Stratum Number]), DB_STRATUM.[Stratum Number];" '一定要排序!!!
If TableExists("TEMP_RPT_STRATUM") = True Then cnn.Execute "DROP TABLE TEMP_RPT_STRATUM"
cnn.Execute SQL
If rstStratum.State = adStateOpen Then rstStratum.Close
SQL = "SELECT * FROM TEMP_RPT_STRATUM"
rstStratum.Open SQL, cnn, adOpenStatic, adLockBatchOptimistic
'DB_TEST_SOIL2_STAT
SQL = "Select DB_STRATUM.[Stratum ID], CountOfW , MaxOfW, MinOfW, AvgOfW, StDevOfW, VarOfW, ModifiedOfW, StdValOfW," _
& "CountOfGamma, MaxOfGamma, MinOfGamma,AvgOfGamma , StDevOfGamma, VarOfGamma, ModifiedOfGamma, StdValOfGamma," _
& "CountOfGs, MaxOfGs, MinOfGs, AvgOfGs, StDevOfGs, VarOfGs, ModifiedOfGs, StdValOfGs," _
& "CountOfE, maxofe, minofe, AvgOfE, StDevOfE, VarOfE, ModifiedOfE, StdValOfE," _
& "CountOfWL, MaxOfWL,MinOfWL , AvgOfWL, StDevOfWL, VarOfWL, ModifiedOfWL, StdValOfWL," _
& "CountOfWP, MaxOfWP, MinOfWP, AvgOfWP, StDevOfWP, VarOfWP, ModifiedOfWP, StdValOfWP," _
& "CountOfIL, MaxOfIL, MinOfIL, AvgOfIL, StDevOfIL, VarOfIL, ModifiedOfIL, StdValOfIL, " _
& "CountOfIP, MaxOfIP, MinOfIP, AvgOfIP, StDevOfIP, VarOfIP, ModifiedOfIP, StdValOfIP," _
& "CountOfKH, MaxOfKH, MinOfKH, AvgOfKH, StDevOfKH,VarOfKH , ModifiedOfKH, StdValOfKH," _
& "CountOfKV, MaxOfKV, MinOfKV, AvgOfKV, StDevOfKV, VarOfKV, ModifiedOfKV, StdValOfKV," _
& "CountOfa, MaxOfa, MinOfa, AvgOfa, StDevOfa, VarOfa, ModifiedOfa, StdValOfa," _
& "CountOfEs, MaxOfEs, MinOfEs, AvgOfEs, StDevOfEs, VarOfEs, ModifiedOfEs, StdValOfEs," _
& "CountOfPc, MaxOfPc, MinOfPc, AvgOfPc, StDevOfPc, VarOfPc, ModifiedOfPc, StdValOfPc," _
& "CountOfCv , MaxOfCv, MinOfCv, AvgOfCv, StDevOfCv, VarOfCv, ModifiedOfCv, StdValOfCv " _
& "FROM DB_STRATUM LEFT JOIN DB_TEST_SOIL2_STAT ON DB_STRATUM.[STRATUM ID]=DB_TEST_SOIL2_STAT.[STRATUM ID] " _
& "WHERE DB_STRATUM.[PROJECT ID]=" & gProjectID & " ORDER BY Val(DB_STRATUM.[Stratum Number]), DB_STRATUM.[Stratum Number];" '一定要排序!!!
If rstSOIL2_STAT.State = adStateOpen Then rstSOIL2_STAT.Close
rstSOIL2_STAT.Open SQL, cnn, adOpenStatic, adLockReadOnly
'DB_TEST_STAT_OTHER
SQL = "SELECT DB_STRATUM.[Stratum ID], CountOfQu, MaxOfQu, MinOfQu,AvgOfQu , StDevOfQu, VarOfQu, ModifiedOfQu, StdValOfQu," _
& "[CountOfQu'] ,[MaxOfQu'], [MinOfQu'], [AvgOfQu'], [StDevOfQu'], [VarOfQu'], [ModifiedOfQu'], [StdValOfQu']," _
& "CountOfSt, MaxOfSt, MinOfSt, AvgOfSt, StDevOfSt, VarOfSt, ModifiedOfSt, StdValOfSt," _
& "CountOfdC1, MaxOfdC1, MinOfdC1, AvgOfdC1, StDevOfdC1, VarOfdC1, ModifiedOfdC1, StdValOfdC1," _
& "CountOfdPhi1, MaxOfdPhi1, MinOfdPhi1, AvgOfdPhi1, StDevOfdPhi1, VarOfdPhi1, ModifiedOfdPhi1, StdValOfdPhi1," _
& "CountOftC1, MaxOftC1, MinOftC1, AvgOftC1, StDevOftC1, VarOftC1, ModifiedOftC1, StdValOftC1," _
& "CountOftPhi1, MaxOftPhi1, MinOftPhi1, AvgOftPhi1, StDevOftPhi1, VarOftPhi1, ModifiedOftPhi1, StdValOftPhi1 " _
& "FROM DB_STRATUM LEFT JOIN DB_TEST_STAT_OTHER ON DB_STRATUM.[STRATUM ID]=DB_TEST_STAT_OTHER.[STRATUM ID] " _
& "WHERE DB_STRATUM.[PROJECT ID]=" & gProjectID & " ORDER BY Val(DB_STRATUM.[Stratum Number]), DB_STRATUM.[Stratum Number];" '一定要排序!!!
If rstSTAT_OTHER2.State = adStateOpen Then rstSTAT_OTHER2.Close
rstSTAT_OTHER2.Open SQL, cnn, adOpenStatic, adLockReadOnly
'RPT_STATISTICS_04
SQL = "SELECT DB_STRATUM.[Stratum ID], CountOfPs, MaxOfPs, MinOfPs, AvgOfPs, StDevOfPs, VarOfPs, ModifiedOfPs, StdValOfPs," _
& "CountOfqc, MaxOfqc, MinOfqc, AvgOfqc, StDevOfqc, VarOfqc, ModifiedOfqc, StdValOfqc," _
& "CountOffs , MaxOffs, MinOffs, AvgOffs, StDevOffs, VarOffs, ModifiedOffs, StdValOffs," _
& "CountOfRf, MaxOfRf, MinOfRf, AvgOfRf, StDevOfRf, VarOfRf, ModifiedOfRf, StdValOfRf," _
& "CountOfN, MaxOfN, MinOfN, AvgOfN, StDevOfN, VarOfN, ModifiedOfN, StdValOfN," _
& "CountOfN10, MaxOfN10, MinOfN10, AvgOfN10,StDevOfN10 , VarOfN10, ModifiedOfN10, StdValOfN10, " _
& "CountOfN635 , MaxOfN635, MinOfN635, AvgOfN635, StDevOfN635, VarOfN635, ModifiedOfN635, StdValOfN635," _
& "CountOfN120, MaxOfN120, MinOfN120, AvgOfN120, StDevOfN120, VarOfN120, ModifiedOfN120, StdValOfN120 " _
& "FROM DB_STRATUM LEFT JOIN RPT_STATISTICS_04 ON DB_STRATUM.[STRATUM ID]=RPT_STATISTICS_04.[STRATUM ID] " _
& "WHERE DB_STRATUM.[PROJECT ID]=" & gProjectID & " ORDER BY Val(DB_STRATUM.[Stratum Number]), DB_STRATUM.[Stratum Number];" '一定要排序!!!
If rstRPT_STATISTICS.State = adStateOpen Then rstRPT_STATISTICS.Close
rstRPT_STATISTICS.Open SQL, cnn, adOpenStatic, adLockReadOnly
'DB_TEST_STAT_Sr
SQL = "SELECT DB_STRATUM.[Stratum ID], CountOfSr, MaxOfSr, MinOfSr, AvgOfSr, StDevOfSr, VarOfSr, ModifiedOfSr, StdValOfSr " _
& "FROM DB_STRATUM LEFT JOIN DB_TEST_STAT_Sr ON DB_STRATUM.[STRATUM ID]=DB_TEST_STAT_Sr.[STRATUM ID] " _
& "WHERE DB_STRATUM.[PROJECT ID]=" & gProjectID & " ORDER BY Val(DB_STRATUM.[Stratum Number]), DB_STRATUM.[Stratum Number];" '一定要排序!!!
If rstSTAT_SR.State = adStateOpen Then rstSTAT_SR.Close
rstSTAT_SR.Open SQL, cnn, adOpenStatic, adLockReadOnly

n = rstStratum.RecordCount
'按照每页4条记录,在表中增加记录使之纪录数为4的倍数
If (n Mod 4) <> 0 Then
m = 4 - (n Mod 4)
For i = 1 To m
rstStratum.AddNew
rstStratum.UpdateBatch
Next i
End If
rstStratum.Requery

m_Report.Database.Tables(1).SetDataSource rstSOIL2_STAT
m_Report.Database.Tables(2).SetDataSource rstSTAT_OTHER2
m_Report.Database.Tables(3).SetDataSource rstRPT_STATISTICS
m_Report.Database.Tables(4).SetDataSource rstSTAT_SR
m_Report.Database.Tables(5).SetDataSource rstStratum
mSubStandard = True
Exit Function
MyErr:
Select Case Err.Number
Case 0
Case Else
mSubStandard = False
Exit Function
End Select
End Function
上面就是我自己的程序
nfsxy 2003-11-10
  • 打赏
  • 举报
回复
冰冰的方法我试过了,可行!
toys 2003-11-07
  • 打赏
  • 举报
回复
如果一点都没有关系,SQL应该没有办法,但是你可以在要连接的表中建立一个关系字段啊!!
to zhp97(海天一线)
不知道怎么回事什么版本Crystal在我的机器里都有问题,我现在准备用Active Report2.0
不知道时版本问题还是我的机器问题。如果你有9.0,请联系我!
langhaoxiang@21cn.com
lanWay 2003-11-03
  • 打赏
  • 举报
回复
接上有误,
对于刷新你更改如下:
conn.open "oledb 连接mdb文件“
set rs=new adodb.recordset
rs.cursorlocation=aduseclient
rs.open ....,conn
conn.requery '连接重新查询,执行更新功能
conn.open "oledb 连接mdb文件“
set report=Application1.OpenReport(reppath,crOpenReportByTempCopy)
Report.DiscardSavedData
report.database.table(1).setdatasource rs

lanWay 2003-11-03
  • 打赏
  • 举报
回复
zhp97(海天一线)
很抱歉,现公司事情最近比较多,没有来上来转转了
对于刷新你更改如下:
report.database.table(1).setdatasource rs
Report.DiscardSavedData
yourConnection.Requery
对于多个table集:
report.database.table(1).setdatasource rs
report.database.table(2).setdatasource rs1
report.database.table(3).setdatasource rs2
你也可以tables.集合的来判断table名
zhp97 2003-10-30
  • 打赏
  • 举报
回复
to toys()
把你的代码贴些代表性的出来看看,我现在没时间去摸索了。
zhp97 2003-10-30
  • 打赏
  • 举报
回复
可以啊,我的是9。0,你要的话,留下邮箱啊!!!
我也刚接触水晶啊,真是痛苦。
水晶报表用报表设计器设计好了
在调用时直接修改数据源来达到修改报表数据的目的(就是先清除原有数据,在贮入新数据)

to toys()
我也知道sql语句的join语句
但几张表根本没有相关联字段,比如说表头有几个字段是一张表的,数据又是另一张表的,没有关联字段是无法用sql语句描述的。只能一个个的把表里的数据取出来,然后再注入到报表中去(原理肯定是这样,当然还有就是logonserver,但连接access不知道怎么连)
。退一步说,就算可以用sql语句来描述,access数据库有很多复杂sql语句是不认的,比如你说的join语句,还有好写复杂语句都不支持。
nfsxy 2003-10-30
  • 打赏
  • 举报
回复
另toys,你在google里搜索一下‘水晶报表’,一定可以搜索到的。我就是从那里搜索到,下载的crystal8.0
nfsxy 2003-10-30
  • 打赏
  • 举报
回复
应该有解决的办法的,我马上也要遇到这个问题了(过两天我也要做个报表是从几个不相关的表里取数据,现在正在忙着做另一个头痛的报表)。水晶报表我从接触到现在也不过一个礼拜的时间,刚学会一点就赶着工作,都是遇到问题再解决,没有时间详细的学习。你用的crystal有没有提供例子?有的话你可以好好研究一下其提供的例子,一定会有所收获的。你的这个问题我暂时也不能帮你解答了,帮顶。
toys 2003-10-30
  • 打赏
  • 举报
回复
你应该看看数据库导论的数,没有什么数据库操作SQL语句不能实现的。我不知道你的数据库中表结构,也不清楚你到底要怎么连接,不过没有关系的也不是不可以连接的!
SQL中可以join表,有左连接,有连接,外连接,内连接,我想总有一个符合你的要求!
SQL+ADO一般都可以做到了,SQL语句可以写得很长!!!
我就做过这样的例子,有VB代码!

zhp97(海天一线)想问个问题!
你用的Crystal是多少版本的!我下载了8.0和9.0的都有问题!
8.0的在表设计操作的时候会弹出你用的函数不是免费的对话框
9.0的在我想报表加数据源的时候会出错,说创建功能未打开!

你用的版本有问题吗?我想要一个!~~~行不?
谢了
zhp97 2003-10-29
  • 打赏
  • 举报
回复
还有,我不知道
table是否指连接数据源的一张表,是否可以按顺序各个赋值,既来个循环赋值
zhp97 2003-10-29
  • 打赏
  • 举报
回复
to lanWay(秋冰)
这个方法我早想过了,但不能满足要求,因为一个报表中涉及到数据库中的多个table,也就是说,仅仅用sql语句来取得数据集是不够的
不过谢谢你认真回答我的问题。
zhp97 2003-10-29
  • 打赏
  • 举报
回复
在一个报表里涉及的两个表,如果无任何关系,那怎么办,那不是没办法了吗?
nfsxy 2003-10-29
  • 打赏
  • 举报
回复
就是把所有用到的字段,按照一定的关系,都放在一个表里面。用SQL很好实现的
ex:
cnn.exexute "SELECT tb1.*, tb2.* INTO temp FROM tb1, tb2;"

把表tb1和tb2的数据全集中在表temp里面
zhp97 2003-10-29
  • 打赏
  • 举报
回复
呵呵,是delphi,但我调用外部设计好的水晶报表,有相应控件支持的,接口都有了,只是我不太熟悉,又没有相关帮助文档,这可要了我的命了。至于是delphi或者是vb其实是一样的,只是实现的语言描述不一样。
Shrewdcat 2003-10-29
  • 打赏
  • 举报
回复
这代码怎么看也不象vb写的。
zhp97 2003-10-29
  • 打赏
  • 举报
回复
所有的表的确是在一个数据库中,但表如何合并啊?表合并是个什么概念?能否举个例子?
nfsxy 2003-10-29
  • 打赏
  • 举报
回复
我的思路还是尽量放到一张表里面。你可以用SQL先把所有需要的表都集中到一个数据库中,再在这个数据库中把所有的表合到一张。这样可能绕点弯路,但应该是可以解决的。
zhp97 2003-10-29
  • 打赏
  • 举报
回复
假如用
report.Database.Tables[i].location:='e:\datatest\2.mdb'就可以完全刷新(用此方法不需ado对象)
但此方法有一个毛病,就是没法子打开设置了密码的mdb,但我的mdb必须设置密码的,这可把我难死了!!!所以才想到用ado来承当连接任务
加载更多回复(4)

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧