vb+sql server,ado方式数据库中有两个表,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分相送,在线等待。
用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分相送,在线等待。
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
MsgBox "没有记录", vbOKOnly, "提示"
Exit Sub
End If
Public Function OpenRec(ByVal strSqlStmt As String) As ADODB.RecordSet
rs.Source = strSqlStmt
rs.Open
Set OpenRec = rs
rs.Close
End FunctionSet TempRs = OpenRec(TempSql)如果你这个函数大概真是这样子的话,不出错才怪呢。
TempRs 和 rs 同引用一个记录集,
在函数返回前这个记录集已经被关闭了。
所以也就出错啰。
if temprs.eof and temprs.bof then
Dim Tmprec As New ADODB.Recordset
On Error Resume Next
Tmprec.Open strSql, Adocn, 3, 3
Set OpenRec = Tmprec
End Function
这个函数应该没有问题。
2 Set TempRs = OpenRec(TempSql)
3 If TempRs.RecordCount <> 0 Then '错误提示在这里
4 MsgBox "temp表不为空"
5 end if事实就是
在2行位置,返回的记录录是已经关闭了的。所以3行位置访问属性RecordCount报错。
把这句If TempRs.RecordCount <> 0 Then换成
if temprs.eof and temprs.bof then---------------------------
还是出现第一个错误
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
访问一个关闭了的记录集的属性(RecordCount, Eof, Bof, ...)是没有意义的。
我的函数已经写了。你能帮我看看吗?guest表的打开,也是用OpneRec的。它的recordset的recordcount都可以正确运用。为什么?OpenRec是在另一个模块中的公用函数。
是因为在C/C++是对象引用都没有计数的。所以在C/C++一定不能返回局部变量。(有点跑题了)Debug.Print TempRs.State '看看是否为1adStateOpen 1
adStateClosed 0
adStateClosed 0
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)
所以SELECT * FROM TEMP出现语法错误。
OPEN记录集的时候肯定出错啦。
但是你在函数里面启动了错误陷阱
且用的是On Error Resume Next
所以...
还有一些错误,但要谢谢你!等我把问题都解决了之后,给你分!
我也刚吃完饭来!
如果我要删除一个表的总体内容,该怎么办?
我用的是
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循环之外)