连接无法用于执行此操作。在vb6中出现此上下文错误时,它可能已关闭或无效
我正在尝试执行将记录集值存储在sql db中的查询。当我试图执行时,我得到的错误如下 连接无法用于执行此操作。在vb6中出现此上下文错误时,它可能已关闭或无效。请帮我解决这个问题连接无法用于执行此操作。在vb6中出现此上下文错误时,它可能已关闭或无效,vb6,adodb,Vb6,Adodb,我正在尝试执行将记录集值存储在sql db中的查询。当我试图执行时,我得到的错误如下 连接无法用于执行此操作。在vb6中出现此上下文错误时,它可能已关闭或无效。请帮我解决这个问题 ' Write records to Database frmDNELoad.lblStatus.Caption = "Loading data into database......" Call FindServerConnection_NoMsg Dim lngRecCount As L
' Write records to Database
frmDNELoad.lblStatus.Caption = "Loading data into database......"
Call FindServerConnection_NoMsg
Dim lngRecCount As Long
lngRecCount = 0
rcdDNE.MoveFirst
Set rcdReclamation = New ADODB.Recordset
With rcdReclamation
.ActiveConnection = objConn
.Source = "insert into t_DATA_DneFrc (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount) values ('" & rcdDNE("RTN") & "', '" & rcdDNE("AccountNbr") & "', '" & rcdDNE("FirstName") & "', '" & rcdDNE("MiddleName") & "', '" & rcdDNE("LastName") & "', '" & rcdDNE("Amount") & "')"
.CursorType = adOpenDynamic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open cmdCommand
End With
Do Until rcdDNE.EOF
lngRecCount = lngRecCount + 1
frmDNELoad.lblStatus.Caption = "Adding record " & lngRecCount & " of " & rcdDNE.RecordCount & " to database."
frmDNELoad.Refresh
DoEvents
Call CommitNew
rcdDNE.MoveNext
Loop
frmDNELoad.lblStatus.Caption = "DNE Processing Complete."
frmDNELoad.Refresh
End Function
Sub CommitNew()
' Add records to DneFrc table
With rcdReclamation
.Requery
.AddNew
.Fields![RTN] = rcdDNE.Fields![RTN]
.Fields![AccountNbr] = rcdDNE.Fields![AccountNbr]
.Fields![FirstName] = rcdDNE.Fields![FirstName]
.Fields![MiddleName] = rcdDNE.Fields![MiddleName]
.Fields![LastName] = rcdDNE.Fields![LastName]
.Fields![Amount] = rcdDNE.Fields![Amount]
.Update
End With
End Sub
连接码
Sub InstantiateCommand_SQLText()
' Creates a command object to be used when executing SQL statements.
Set objCommSQLText = New ADODB.Command
objCommSQLText.ActiveConnection = objConn
objCommSQLText.CommandType = adCmdText
End Sub
Function FindServerConnection_NoMsg() As String
Dim rcdClientPaths As ADODB.Recordset
Dim strDBTemp As String
Const CLIENT_UPDATE_DIR = "\\PSGSPHX02\NORS\Rs\ClientUpdate\"
On Error Resume Next
' If persisted recordset is not there, try and copy one down from
' CLIENT_UPDATE_DIR. If that can't be found, create a blank one
' and ask the user for the server name.
Set rcdClientPaths = New ADODB.Recordset
' Does it already exist locally?
If FileExists_FullPath(App.Path & "\" & "t_PCD_ServerConnectionList.xml") = False Then
' Can it be retrieved from CLIENT_UPDATE_DIR
If Dir(CLIENT_UPDATE_DIR & "t_PCD_ServerConnectionList.xml") "" Then
FileCopy CLIENT_UPDATE_DIR & "t_PCD_ServerConnectionList.xml", App.Path & "\" & "t_PCD_ServerConnectionList.xml"
Else
' Creat a blank one.
With rcdClientPaths
.Fields.Append "ServerConnection", adVarChar, 250
.Fields.Append "Description", adVarChar, 50
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.CursorLocation = adUseClient
.Open
.Save App.Path & "\" & "t_PCD_ServerConnectionList.xml", adPersistXML
.Close
End With
End If
End If
' Open the recordset
With rcdClientPaths
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.CursorLocation = adUseClient
.Open App.Path & "\" & "t_PCD_ServerConnectionList.xml", , , , adCmdFile
End With
If rcdClientPaths.RecordCount 0 Then
' try each one listed
rcdClientPaths.MoveFirst
Do Until rcdClientPaths.EOF
strDBTemp = TryConnection_NoMsg(rcdClientPaths.Fields![serverconnection])
If strDBTemp "" Then
FindServerConnection_NoMsg = strDBTemp
Exit Function
End If
rcdClientPaths.MoveNext
Loop
strDBTemp = ""
End If
Do While strDBTemp = ""
If strDBTemp "" Then
strDBTemp = TryConnection_NoMsg(strDBTemp)
If strDBTemp "" Then
With rcdClientPaths
.AddNew
.Fields![serverconnection] = strDBTemp
.Update
.Save
End With
FindServerConnection_NoMsg = strDBTemp
Exit Function
End If
Else
Exit Function
End If
Loop
End Function
Function TryConnection_NoMsg(ByVal SvName As String) As String
On Error GoTo ErrHandle
' If a server was provided, try to open a connection to it.
Screen.MousePointer = vbHourglass
Set objConn = New ADODB.Connection
With objConn
.CommandTimeout = 30
.ConnectionTimeout = 30
.ConnectionString = "Provider=SQLOLEDB.1; Server=" & SvName & "; User ID=RS_Auth; Password=weLcomers_auth; Initial Catalog=NORS" ' Test
.Open
.Close
End With
Set objConn = Nothing
TryConnection_NoMsg = SvName
Screen.MousePointer = vbNormal
Exit Function
ErrHandle:
TryConnection_NoMsg = ""
Set objConn = Nothing
Screen.MousePointer = vbNormal
Exit Function
End Function
子实例化命令_SQLText()
'创建要在执行SQL语句时使用的命令对象。
Set objCommSQLText=New ADODB.Command
objCommSQLText.ActiveConnection=objConn
objCommSQLText.CommandType=adCmdText
端接头
函数FindServerConnection_NoMsg()作为字符串
将RCDClientPath设置为ADODB.Recordset
作为字符串的Dim strDBTemp
Const CLIENT_UPDATE_DIR=“\\PSGSPHX02\NORS\Rs\ClientUpdate”
出错时继续下一步
'如果持久化记录集不存在,请尝试从中复制一个
'客户端\更新\目录。如果找不到,请创建一个空白
'并询问用户服务器名称。
Set rcdclientpath=New ADODB.Recordset
“它在本地已经存在吗?
如果FileExists\u FullPath(App.Path&“\”&“t\u PCD\u ServerConnectionList.xml”)=False,则
'是否可以从客户端\u更新\u目录中检索
如果Dir(CLIENT\u UPDATE\u Dir&“t\u PCD\u ServerConnectionList.xml”)“”那么
FileCopy客户端\u更新\u目录和“t\u PCD\u ServerConnectionList.xml”,App.Path和“t\u PCD\u ServerConnectionList.xml”
其他的
“创建一个空白的。
使用rcdclientpath
.Fields.Append“服务器连接”,adVarChar,250
.Fields.Append“Description”,adVarChar,50
.CursorType=adOpenDynamic
.LockType=adlockType
.CursorLocation=adUseClient
打开
.Save App.Path&“\”和“t\u PCD\u ServerConnectionList.xml”,adPersistXML
.结束
以
如果结束
如果结束
'打开记录集
使用rcdclientpath
.CursorType=adOpenDynamic
.LockType=adlockType
.CursorLocation=adUseClient
.Open App.Path&“\”和“t\u PCD\u ServerConnectionList.xml”
以
如果rcdclientPath.RecordCount为0,则
'请尝试列出的每一个
rcdclientpath.MoveFirst
直到rcdclientpath.EOF
strDBTemp=TryConnection_NoMsg(rcdclientpath.Fields![serverconnection])
如果strDBTemp“”则
FindServerConnection_NoMsg=strDBTemp
退出功能
如果结束
rcdclientPath.MoveNext
环
strDBTemp=“”
如果结束
当strDBTemp=“”时执行
如果strDBTemp“”则
strDBTemp=TryConnection_NoMsg(strDBTemp)
如果strDBTemp“”则
使用rcdclientpath
.AddNew
.菲尔兹![serverconnection]=strDBTemp
.更新
拯救
以
FindServerConnection_NoMsg=strDBTemp
退出功能
如果结束
其他的
退出功能
如果结束
环
端函数
函数TryConnection_NoMsg(ByVal SvName作为字符串)作为字符串
关于错误转到错误句柄
'如果提供了服务器,请尝试打开与该服务器的连接。
Screen.MousePointer=vbHourglass
Set objConn=New ADODB.Connection
用objConn
.CommandTimeout=30
.ConnectionTimeout=30
.ConnectionString=“Provider=SQLOLEDB.1;Server=“&SvName&”用户ID=RS\u Auth;密码=weLcomers\u Auth;初始目录=NORS”测试
打开
.结束
以
Set objConn=Nothing
TryConnection_NoMsg=SvName
Screen.MousePointer=vbNormal
退出功能
错误句柄:
TryConnection_NoMsg=“”
Set objConn=Nothing
Screen.MousePointer=vbNormal
退出功能
端函数
我怀疑
FindServerConnection\u NoMsg
没有打开连接,因为它以NoMsg
结尾,所以您没有看到连接未打开的错误。然后,在不知道打开失败的情况下继续使用连接
发布FindServerConnection\u NoMsg
的代码
顺便说一句,你的问题本身应该给你一个线索。它特别指出连接无法使用,并且可能未打开。这应该告诉你从哪里开始查找,至少告诉你应该在你的问题中发布打开连接的代码。你已经在
TryConnection\u NoMsg
函数(?)中关闭了连接
谢谢大家。我解决了我的问题。这就是我在代码中看到的 暗淡的长帐 lngRecCount=0 rcdDNE.MoveFirst
With cmdCommand
.ActiveConnection = objConn
.CommandText = "insert into t_DATA_DneFrc (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount) values ('" & rcdDNE("RTN") & "', '" & rcdDNE("AccountNbr") & "', '" & rcdDNE("FirstName") & "', '" & rcdDNE("MiddleName") & "', '" & rcdDNE("LastName") & "', '" & rcdDNE("Amount") & "')"
.CommandType = adCmdText
End With
Set rcddnefrc = New ADODB.Recordset
With rcddnefrc
.ActiveConnection = objConn
.Source = "SELECT * FROM T_DATA_DNEFRC"
.CursorType = adOpenDynamic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open
End With
Do Until rcdDNE.EOF
lngRecCount = lngRecCount + 1
frmDNELoad.lblStatus.Caption = "Adding record " & lngRecCount & " of " & rcdDNE.RecordCount & " to database."
frmDNELoad.Refresh
DoEvents
Call CommitNew
rcdDNE.MoveNext
Loop
frmDNELoad.lblStatus.Caption = "DNE Processing Complete."
frmDNELoad.Refresh
两件事:你能把剩下的代码格式化,让它看起来和第一部分一样好吗?另外,代码中的错误发生在哪里?@pbrp:我回滚了您上次的编辑,因为您删除了一些相关的代码(并且完全弄乱了所有代码的格式)。如果你要编辑文章,请学会设置代码格式;“编辑”页面上有可用的帮助。您何时收到此错误?在哪一个动作上?faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。将这一点减少到再现错误所需的最小代码量。我相信我在这里遇到了问题。命令未打开。这是我的错误。我认为.commandType=adCmdtext与cmdCommand.ActiveConnection=objConn.CommandText=“query here”之间存在问题.CommandType=adCmdText End With Set rcdReclamation=New ADODB.Recordset With rcdReclamation.ActiveConnection=objConn.CursorType=adOpenDynamic.CursorLocation=adUseClient.LockType=adLockOptimious.Open cmdCommand End With Remove
With cmdCommand
.ActiveConnection = objConn
.CommandText = "insert into t_DATA_DneFrc (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount) values ('" & rcdDNE("RTN") & "', '" & rcdDNE("AccountNbr") & "', '" & rcdDNE("FirstName") & "', '" & rcdDNE("MiddleName") & "', '" & rcdDNE("LastName") & "', '" & rcdDNE("Amount") & "')"
.CommandType = adCmdText
End With
Set rcddnefrc = New ADODB.Recordset
With rcddnefrc
.ActiveConnection = objConn
.Source = "SELECT * FROM T_DATA_DNEFRC"
.CursorType = adOpenDynamic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Open
End With
Do Until rcdDNE.EOF
lngRecCount = lngRecCount + 1
frmDNELoad.lblStatus.Caption = "Adding record " & lngRecCount & " of " & rcdDNE.RecordCount & " to database."
frmDNELoad.Refresh
DoEvents
Call CommitNew
rcdDNE.MoveNext
Loop
frmDNELoad.lblStatus.Caption = "DNE Processing Complete."
frmDNELoad.Refresh