重新最发 多次调用Recordset的问题

qyzzjian 2012-01-06 10:56:10
不好意思了,上个月低的时候发了这篇贴,但回答的人很少,问题不能解决,只能最发一次了,我很想知道,这个问题能不能解决,还有一些朋友,直接发个关于ADO的连接的代码过来,也先谢过了,我要的不是ADO的连接,以下的代码问题也不是出现在连接上,而是在一段代码里边当调用多于一次的recordset的连接时,结果只会显示第一次显示的数据,按正面的方式,如何修改,才可以呢?
...全文
226 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qyzzjian 2012-01-13
  • 打赏
  • 举报
回复
好久没人回答,不过原问题已经解决了,给分吧,
qyzzjian 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 worldy 的回复:]
注意:
Dim cnn As ADODB.Connection
不能定义为:
Dim cnn As new ADODB.Connection

原因,你懂的
[/Quote]
最问worldy兄,如果想用这一段代码作为SQL词句的通用函数,还有那些地方要改进吗?
qyzzjian 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 worldy 的回复:]
引用 1 楼 qyzzjian 的回复:
我在一个模块中定义了一个通用的ADO Recordset通用函数openrs,现在发现同一个问题:
在其他函数/过程调用openrs时,如果该函数/过程只调用openrs一次的话,可以得到正确的数据,如果多次调用openrs的话,无论多少次都只能得到第一次调用的结果;是否ADO Recordset的recordset不支持这样的连续调用?set rs ……
[/Quote]
非常感谢worldy的回答,问题解决,问题是出在连接的这段代码上,
三断笛 2012-01-07
  • 打赏
  • 举报
回复
NextRecordset可以取出下一个记录集.
worldy 2012-01-07
  • 打赏
  • 举报
回复
注意:
Dim cnn As ADODB.Connection
不能定义为:
Dim cnn As new ADODB.Connection

原因,你懂的

worldy 2012-01-07
  • 打赏
  • 举报
回复
晕.......上面的红色应该为蓝色
worldy 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qyzzjian 的回复:]
我在一个模块中定义了一个通用的ADO Recordset通用函数openrs,现在发现同一个问题:
在其他函数/过程调用openrs时,如果该函数/过程只调用openrs一次的话,可以得到正确的数据,如果多次调用openrs的话,无论多少次都只能得到第一次调用的结果;是否ADO Recordset的recordset不支持这样的连续调用?set rs = nothing ,rs.close那些都……
[/Quote]

你的问题出在连接上,第一次连接打开正常,第二次查询记录的时候,又要打开连接,但是此时连接是open的,所以出错,出错后,你没有对错误处理,结果是第二次数据查询没有执行!

Dim cnn As ADODB.Connection'在模块中添加链接的定义

Public Function OpenRS(ByVal sqlstmt As String) As ADODB.Recordset
Dim rst As New ADODB.Recordset
'加入红色部分进行判断,别的可以不要改

If cnn Is Nothing Then
Set cnn = New ADODB.Connection
DBconnect '打开之后,如果没有关闭不能再打开,否则会出错,跳过本操作
End If

rst.ActiveConnection = cnn
rst.Open sqlstmt
Set OpenRS = rst
End Function
qyzzjian 2012-01-06
  • 打赏
  • 举报
回复
我在一个模块中定义了一个通用的ADO Recordset通用函数openrs,现在发现同一个问题:
在其他函数/过程调用openrs时,如果该函数/过程只调用openrs一次的话,可以得到正确的数据,如果多次调用openrs的话,无论多少次都只能得到第一次调用的结果;是否ADO Recordset的recordset不支持这样的连续调用?set rs = nothing ,rs.close那些都试过了,还是一样;

具体为:函数Count_GW,两次调用openrs,第一次是count_f,第二次是count_t ,但Count_GW得到的数据只是两个count_f的相加,count_t得不到数据,就是第二次调用recordset时,数据不能进行更新传递;
如果将count_f 和count_t分为两个函数进行计算,就能得到正确的结果,测试了好久不知道原因,请各们高手指点一二,谢谢!

代码如下:
**********Openrs 相关:

Public Function DBconnect()
cnn.ConnectionString = "Provider = microsoft.jet.oledb.4.0;persist security info = false;data source = " & PJPath & "\TestDB.mdb;jet oledb:DataBase password = "
cnn.Open
End Function

Public Function DBDisconnect()
cnn.Close
Set cnn = Nothing
End Function

Public Function OpenRS(ByVal sqlstmt As String) As ADODB.Recordset
Dim rst As New ADODB.Recordset
DBconnect
rst.ActiveConnection = cnn
rst.Open sqlstmt
Set OpenRS = rst
End Function

**********调用openrs的程序
Public Function Count_GW() 'count gross weight
On Error Resume Next
Dim Rs_Count As New ADODB.Recordset
Dim Count_f, Count_t As Single
Count_f = 0
Count_t = 0
sql_f = "select SUM([GW(kgs)]) from [fabric details]"
sql_t = "select SUM([GW(kgs)]) from [packing list]"

Set Rs_Count = OpenRS(sql_f)
If Rs_Count(0).Value > 0 Then
Count_f = Rs_Count(0).Value
End If
Set Rs_Count = OpenRS(sql_t)
If Rs_Count(0).Value > 0 Then
Count_t = Rs_Count(0).Value
End If

Count_GW = Count_f + Count_t
Rs_Count.Close
Set Rs_Count = Nothing
DBDisconnect
End Function

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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