数据库中有两个表,guest和temp,两表的格式完全相同。guest表中有内容。temp为空。
用recordset得到guest的recordcount没有问题。
但是我用
TempSql = "select * from temp " '查看temp表是否为空
Set TempRs = OpenRec(TempSql)
If TempRs.RecordCount <> 0 Then '错误提示在这里
MsgBox "temp表不为空"
end if
可是,程序提示 实时错误 3704 ,如果对象已关闭,则不允许执行应用程序所要求的操作。
为什么?它好像不让我用temp表的recordcount,可是temp表我也没有设置什么啊。它和guest表一样,只是一个有内容而一个无内容啊。
为什么?各位大侠帮忙。谢谢!100分相送,在线等待。
28 个解决方案
#1
看看你的代码中有没有类似rs.close之类的代码!
如果有的话将此语句删除,然后再试!
如果有的话将此语句删除,然后再试!
#2
有rs.close的。但都是针对guest表的。rs也是对guest记录集的。而且rs.close后,立刻有rs.open。为什么?
#3
dim rs as adodb.recordset
dim con as adodb.connection
试试
TempSql = "select * from temp " '查看temp表是否为空
set con=new adodb.connection
con.connectionstring=""
con.open
rs.open TempSql,con,3,3
if rs.recordcount<>0 then
msgbox "not data"
end if
dim con as adodb.connection
试试
TempSql = "select * from temp " '查看temp表是否为空
set con=new adodb.connection
con.connectionstring=""
con.open
rs.open TempSql,con,3,3
if rs.recordcount<>0 then
msgbox "not data"
end if
#4
楼上大侠,我照你那么写,提示错误:[microsoft][odbc 驱动程序管理器]未发现数据源名称并且未指定默认驱动程序。
再次请教!
再次请教!
#5
If rs.state = 0 Then
MsgBox "没有记录", vbOKOnly, "提示"
Exit Sub
End If
MsgBox "没有记录", vbOKOnly, "提示"
Exit Sub
End If
#6
问题就在于你的自定义函数OpenRec
我猜你这个函数大概这样子吧(乱猜的,也只能这样子猜,猜得不好莫怪啊)
Public Function OpenRec(ByVal strSqlStmt As String) As ADODB.RecordSet
rs.Source = strSqlStmt
rs.Open
Set OpenRec = rs
rs.Close
End Function
Set TempRs = OpenRec(TempSql)
如果你这个函数大概真是这样子的话,不出错才怪呢。
TempRs 和 rs 同引用一个记录集,
在函数返回前这个记录集已经被关闭了。
所以也就出错啰。
我猜你这个函数大概这样子吧(乱猜的,也只能这样子猜,猜得不好莫怪啊)
Public Function OpenRec(ByVal strSqlStmt As String) As ADODB.RecordSet
rs.Source = strSqlStmt
rs.Open
Set OpenRec = rs
rs.Close
End Function
Set TempRs = OpenRec(TempSql)
如果你这个函数大概真是这样子的话,不出错才怪呢。
TempRs 和 rs 同引用一个记录集,
在函数返回前这个记录集已经被关闭了。
所以也就出错啰。
#7
把这句If TempRs.RecordCount <> 0 Then换成
if temprs.eof and temprs.bof then
if temprs.eof and temprs.bof then
#8
建议把OpenRec函数的定义代码Copy上来。
#9
我的函数是
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
这个函数应该没有问题。
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
这个函数应该没有问题。
#10
up
#11
1 TempSql = "select * from temp " '查看temp表是否为空
2 Set TempRs = OpenRec(TempSql)
3 If TempRs.RecordCount <> 0 Then '错误提示在这里
4 MsgBox "temp表不为空"
5 end if
事实就是
在2行位置,返回的记录录是已经关闭了的。所以3行位置访问属性RecordCount报错。
2 Set TempRs = OpenRec(TempSql)
3 If TempRs.RecordCount <> 0 Then '错误提示在这里
4 MsgBox "temp表不为空"
5 end if
事实就是
在2行位置,返回的记录录是已经关闭了的。所以3行位置访问属性RecordCount报错。
#12
引用:sanpo(山炮) ---------------
把这句If TempRs.RecordCount <> 0 Then换成
if temprs.eof and temprs.bof then
---------------------------
还是出现第一个错误
把这句If TempRs.RecordCount <> 0 Then换成
if temprs.eof and temprs.bof then
---------------------------
还是出现第一个错误
#13
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
看了你这个函数,也觉得没有什么不对啊。
但是对于Tmprec这个变量倒是觉得又有点儿问题。
你又在这个函数中返回这个局部变量...
建立这样做
Public Syb OpenRec(ByVal strSql As String, Rec As ADODB.Recordset)
...
Rec.Open
End Function
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
看了你这个函数,也觉得没有什么不对啊。
但是对于Tmprec这个变量倒是觉得又有点儿问题。
你又在这个函数中返回这个局部变量...
建立这样做
Public Syb OpenRec(ByVal strSql As String, Rec As ADODB.Recordset)
...
Rec.Open
End Function
#14
当然了
访问一个关闭了的记录集的属性(RecordCount, Eof, Bof, ...)是没有意义的。
访问一个关闭了的记录集的属性(RecordCount, Eof, Bof, ...)是没有意义的。
#15
Intelement(智能元素) ,你说返回的记录录是已经关闭了的。怎么会呢?
我的函数已经写了。你能帮我看看吗?
guest表的打开,也是用OpneRec的。它的recordset的recordcount都可以正确运用。为什么?
OpenRec是在另一个模块中的公用函数。
我的函数已经写了。你能帮我看看吗?
guest表的打开,也是用OpneRec的。它的recordset的recordcount都可以正确运用。为什么?
OpenRec是在另一个模块中的公用函数。
#16
OpenRec没问题!别的表都是用它打开的。
#17
其实我也觉得没有问题。
是因为在C/C++是对象引用都没有计数的。所以在C/C++一定不能返回局部变量。(有点跑题了)
Debug.Print TempRs.State '看看是否为1
adStateOpen 1
adStateClosed 0
是因为在C/C++是对象引用都没有计数的。所以在C/C++一定不能返回局部变量。(有点跑题了)
Debug.Print TempRs.State '看看是否为1
adStateOpen 1
adStateClosed 0
#18
Debug.Print TempRs.State
看看其值是否为1
adStateOpen 1
adStateClosed 0
看看其值是否为1
adStateOpen 1
adStateClosed 0
#19
Intelement(智能元素)兄 ,Debug.Print TempRs.State为0
奇怪了。它是关闭了,但~~但~~但~~为什么~~~~~~~~~~~~~~~~~~~~~~``
奇怪了。它是关闭了,但~~但~~但~~为什么~~~~~~~~~~~~~~~~~~~~~~``
#20
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
'On Error Resume Next '把这一句注释掉,看看究竟什么了什么错误。
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
会不会是 select * from temp 有错啊
噢!对了
在SQL SERVER 中,TEMP 是关键字!!!
这样写SQL语句
TempSql = "select * from [temp]"
Set TempRs = OpenRec(TempSql)
Dim Tmprec As New ADODB.Recordset
'On Error Resume Next '把这一句注释掉,看看究竟什么了什么错误。
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
会不会是 select * from temp 有错啊
噢!对了
在SQL SERVER 中,TEMP 是关键字!!!
这样写SQL语句
TempSql = "select * from [temp]"
Set TempRs = OpenRec(TempSql)
#21
由于在SQL SERVER中TEMP是关键字。
所以SELECT * FROM TEMP出现语法错误。
OPEN记录集的时候肯定出错啦。
但是你在函数里面启动了错误陷阱
且用的是On Error Resume Next
所以...
所以SELECT * FROM TEMP出现语法错误。
OPEN记录集的时候肯定出错啦。
但是你在函数里面启动了错误陷阱
且用的是On Error Resume Next
所以...
#22
上面只是初步猜测。
'On Error Resume Next '最好把这一句注释掉,看看究竟什么了什么错误!!!!
吃饭去,待会儿再来。
'On Error Resume Next '最好把这一句注释掉,看看究竟什么了什么错误!!!!
吃饭去,待会儿再来。
#23
Intelement(智能元素) ,是的。问题解决了一大半了!
还有一些错误,但要谢谢你!等我把问题都解决了之后,给你分!
我也刚吃完饭来!
还有一些错误,但要谢谢你!等我把问题都解决了之后,给你分!
我也刚吃完饭来!
#24
to be continue...
#25
Intelement(智能元素) 兄,还有一个问题需要请教
如果我要删除一个表的总体内容,该怎么办?
我用的是
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete
TempRs2.MoveNext ’错误在这里
Next i
End If
程序报错。如果改成——
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete '错误在这里
TempRs2.Update
TempRs2.Close
TempRs2.Open
Next i
End If
而以上两个错误都不是很稳定,请求帮助。
删除表的所有内容和删除表中的一个记录程序上有啥区别呢?(除了for循环之外)
如果我要删除一个表的总体内容,该怎么办?
我用的是
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete
TempRs2.MoveNext ’错误在这里
Next i
End If
程序报错。如果改成——
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete '错误在这里
TempRs2.Update
TempRs2.Close
TempRs2.Open
Next i
End If
而以上两个错误都不是很稳定,请求帮助。
删除表的所有内容和删除表中的一个记录程序上有啥区别呢?(除了for循环之外)
#26
试试结帐后还能不能“发炎”
#27
啊?
结贴了还能“发炎”
结贴了还能“发炎”
#28
Intelement(智能元素) 兄,我从起了个帖子,能帮帮我吗?在那上面回复吧!
#1
看看你的代码中有没有类似rs.close之类的代码!
如果有的话将此语句删除,然后再试!
如果有的话将此语句删除,然后再试!
#2
有rs.close的。但都是针对guest表的。rs也是对guest记录集的。而且rs.close后,立刻有rs.open。为什么?
#3
dim rs as adodb.recordset
dim con as adodb.connection
试试
TempSql = "select * from temp " '查看temp表是否为空
set con=new adodb.connection
con.connectionstring=""
con.open
rs.open TempSql,con,3,3
if rs.recordcount<>0 then
msgbox "not data"
end if
dim con as adodb.connection
试试
TempSql = "select * from temp " '查看temp表是否为空
set con=new adodb.connection
con.connectionstring=""
con.open
rs.open TempSql,con,3,3
if rs.recordcount<>0 then
msgbox "not data"
end if
#4
楼上大侠,我照你那么写,提示错误:[microsoft][odbc 驱动程序管理器]未发现数据源名称并且未指定默认驱动程序。
再次请教!
再次请教!
#5
If rs.state = 0 Then
MsgBox "没有记录", vbOKOnly, "提示"
Exit Sub
End If
MsgBox "没有记录", vbOKOnly, "提示"
Exit Sub
End If
#6
问题就在于你的自定义函数OpenRec
我猜你这个函数大概这样子吧(乱猜的,也只能这样子猜,猜得不好莫怪啊)
Public Function OpenRec(ByVal strSqlStmt As String) As ADODB.RecordSet
rs.Source = strSqlStmt
rs.Open
Set OpenRec = rs
rs.Close
End Function
Set TempRs = OpenRec(TempSql)
如果你这个函数大概真是这样子的话,不出错才怪呢。
TempRs 和 rs 同引用一个记录集,
在函数返回前这个记录集已经被关闭了。
所以也就出错啰。
我猜你这个函数大概这样子吧(乱猜的,也只能这样子猜,猜得不好莫怪啊)
Public Function OpenRec(ByVal strSqlStmt As String) As ADODB.RecordSet
rs.Source = strSqlStmt
rs.Open
Set OpenRec = rs
rs.Close
End Function
Set TempRs = OpenRec(TempSql)
如果你这个函数大概真是这样子的话,不出错才怪呢。
TempRs 和 rs 同引用一个记录集,
在函数返回前这个记录集已经被关闭了。
所以也就出错啰。
#7
把这句If TempRs.RecordCount <> 0 Then换成
if temprs.eof and temprs.bof then
if temprs.eof and temprs.bof then
#8
建议把OpenRec函数的定义代码Copy上来。
#9
我的函数是
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
这个函数应该没有问题。
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
这个函数应该没有问题。
#10
up
#11
1 TempSql = "select * from temp " '查看temp表是否为空
2 Set TempRs = OpenRec(TempSql)
3 If TempRs.RecordCount <> 0 Then '错误提示在这里
4 MsgBox "temp表不为空"
5 end if
事实就是
在2行位置,返回的记录录是已经关闭了的。所以3行位置访问属性RecordCount报错。
2 Set TempRs = OpenRec(TempSql)
3 If TempRs.RecordCount <> 0 Then '错误提示在这里
4 MsgBox "temp表不为空"
5 end if
事实就是
在2行位置,返回的记录录是已经关闭了的。所以3行位置访问属性RecordCount报错。
#12
引用:sanpo(山炮) ---------------
把这句If TempRs.RecordCount <> 0 Then换成
if temprs.eof and temprs.bof then
---------------------------
还是出现第一个错误
把这句If TempRs.RecordCount <> 0 Then换成
if temprs.eof and temprs.bof then
---------------------------
还是出现第一个错误
#13
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
看了你这个函数,也觉得没有什么不对啊。
但是对于Tmprec这个变量倒是觉得又有点儿问题。
你又在这个函数中返回这个局部变量...
建立这样做
Public Syb OpenRec(ByVal strSql As String, Rec As ADODB.Recordset)
...
Rec.Open
End Function
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
看了你这个函数,也觉得没有什么不对啊。
但是对于Tmprec这个变量倒是觉得又有点儿问题。
你又在这个函数中返回这个局部变量...
建立这样做
Public Syb OpenRec(ByVal strSql As String, Rec As ADODB.Recordset)
...
Rec.Open
End Function
#14
当然了
访问一个关闭了的记录集的属性(RecordCount, Eof, Bof, ...)是没有意义的。
访问一个关闭了的记录集的属性(RecordCount, Eof, Bof, ...)是没有意义的。
#15
Intelement(智能元素) ,你说返回的记录录是已经关闭了的。怎么会呢?
我的函数已经写了。你能帮我看看吗?
guest表的打开,也是用OpneRec的。它的recordset的recordcount都可以正确运用。为什么?
OpenRec是在另一个模块中的公用函数。
我的函数已经写了。你能帮我看看吗?
guest表的打开,也是用OpneRec的。它的recordset的recordcount都可以正确运用。为什么?
OpenRec是在另一个模块中的公用函数。
#16
OpenRec没问题!别的表都是用它打开的。
#17
其实我也觉得没有问题。
是因为在C/C++是对象引用都没有计数的。所以在C/C++一定不能返回局部变量。(有点跑题了)
Debug.Print TempRs.State '看看是否为1
adStateOpen 1
adStateClosed 0
是因为在C/C++是对象引用都没有计数的。所以在C/C++一定不能返回局部变量。(有点跑题了)
Debug.Print TempRs.State '看看是否为1
adStateOpen 1
adStateClosed 0
#18
Debug.Print TempRs.State
看看其值是否为1
adStateOpen 1
adStateClosed 0
看看其值是否为1
adStateOpen 1
adStateClosed 0
#19
Intelement(智能元素)兄 ,Debug.Print TempRs.State为0
奇怪了。它是关闭了,但~~但~~但~~为什么~~~~~~~~~~~~~~~~~~~~~~``
奇怪了。它是关闭了,但~~但~~但~~为什么~~~~~~~~~~~~~~~~~~~~~~``
#20
Public Function OpenRec(ByVal strSql As String) As ADODB.Recordset
Dim Tmprec As New ADODB.Recordset
'On Error Resume Next '把这一句注释掉,看看究竟什么了什么错误。
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
会不会是 select * from temp 有错啊
噢!对了
在SQL SERVER 中,TEMP 是关键字!!!
这样写SQL语句
TempSql = "select * from [temp]"
Set TempRs = OpenRec(TempSql)
Dim Tmprec As New ADODB.Recordset
'On Error Resume Next '把这一句注释掉,看看究竟什么了什么错误。
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
会不会是 select * from temp 有错啊
噢!对了
在SQL SERVER 中,TEMP 是关键字!!!
这样写SQL语句
TempSql = "select * from [temp]"
Set TempRs = OpenRec(TempSql)
#21
由于在SQL SERVER中TEMP是关键字。
所以SELECT * FROM TEMP出现语法错误。
OPEN记录集的时候肯定出错啦。
但是你在函数里面启动了错误陷阱
且用的是On Error Resume Next
所以...
所以SELECT * FROM TEMP出现语法错误。
OPEN记录集的时候肯定出错啦。
但是你在函数里面启动了错误陷阱
且用的是On Error Resume Next
所以...
#22
上面只是初步猜测。
'On Error Resume Next '最好把这一句注释掉,看看究竟什么了什么错误!!!!
吃饭去,待会儿再来。
'On Error Resume Next '最好把这一句注释掉,看看究竟什么了什么错误!!!!
吃饭去,待会儿再来。
#23
Intelement(智能元素) ,是的。问题解决了一大半了!
还有一些错误,但要谢谢你!等我把问题都解决了之后,给你分!
我也刚吃完饭来!
还有一些错误,但要谢谢你!等我把问题都解决了之后,给你分!
我也刚吃完饭来!
#24
to be continue...
#25
Intelement(智能元素) 兄,还有一个问题需要请教
如果我要删除一个表的总体内容,该怎么办?
我用的是
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete
TempRs2.MoveNext ’错误在这里
Next i
End If
程序报错。如果改成——
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete '错误在这里
TempRs2.Update
TempRs2.Close
TempRs2.Open
Next i
End If
而以上两个错误都不是很稳定,请求帮助。
删除表的所有内容和删除表中的一个记录程序上有啥区别呢?(除了for循环之外)
如果我要删除一个表的总体内容,该怎么办?
我用的是
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete
TempRs2.MoveNext ’错误在这里
Next i
End If
程序报错。如果改成——
If TempRs2.RecordCount <> 0 Then
TempRs2.MoveFirst 'temp2清空
For i = 1 To TempRs2.RecordCount
TempRs2.Delete '错误在这里
TempRs2.Update
TempRs2.Close
TempRs2.Open
Next i
End If
而以上两个错误都不是很稳定,请求帮助。
删除表的所有内容和删除表中的一个记录程序上有啥区别呢?(除了for循环之外)
#26
试试结帐后还能不能“发炎”
#27
啊?
结贴了还能“发炎”
结贴了还能“发炎”
#28
Intelement(智能元素) 兄,我从起了个帖子,能帮帮我吗?在那上面回复吧!