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

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);
请各位多多提携啊,如果谁能彻底解决我的问题,将重分酬谢!!!!(另外再加分)
...全文
148 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)
Crystal Reports 9.2 中文版(水晶报表) 下载,,软件版本:9.2.0.448不过现已出了Crystal Reports Professional v9.2.2.634 (c) Crystal Decisions,有足够的空间就提供.这是一个很不错的报表控件,我相信很多朋友都听说过吧!Crystal Reports 用于处理数据库,帮助用户分析和解释重要信息。使用 Crystal Reports 可以方便地创建简单报表,同时它也提供了创建复杂或专用的报表所需的整套工具。 创建所能想象的任何报表 Crystal Reports几乎可以从任何数据源生成您需要的报表。内置报表专家在您生成报表和完成一般的报表任务过程中,会一步一步地指导您进行操作。报表专家通过公式、交叉表、子报表和设置条件格式帮助表现数据的实际意义,揭示可能被隐藏掉的重要关系。如果文字和数字确实不够充分,则用地理地图和图形进行形象的信息交流。 将报表扩展到 Web Crystal Reports 的灵活性并未停留在创建报表这一功能上 ?您可以用各种各样的格式发布报表,包括用 Microsoft 的 Word 和 Excel 发布、通过电子邮件甚至 Web 发布。高级的 Web 报表功能允许工作组中的其他成员在他们自己的 Web 浏览器中查看或更新共享报表。 将报表并入应用程序通过将 Crystal Reports 的报表处理功能整合到自己的数据库应用程序中,应用程序和 Web 开发人员可以节省开发时间并满足用户的需求。Crystal Reports 支持大多数流行的开发语言,可以方便地在任何应用程序中添加报表。 不论您是 IT 行业的站点管理员,还是营销推广经理,也无论您是金融业的数据库管理员还是 CEO,Crystal Reports 都堪称是一个功能强大的工具,它可以帮助每一个人分析、解释重要信息。感谢 revenant 上传!

807

社区成员

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

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