Member 7945374 Ответов: 1

Vba ссылка на SQL и ошибка операции не допускаются при закрытии объекта


У меня есть vba для чтения записей с SQL server.
и основной код, как показано ниже
  Set Conn = New ADODB.Connection
  Set rs = New ADODB.Recordset
  Conn.CursorLocation = adUseServer
  Conn.Open ConStr
  Set cmd = New ADODB.Command
  cmd.CommandText = StoredProcedureName
  cmd.CommandType = adCmdStoredProc
  cmd.ActiveConnection = Conn
  With rs
    Set .ActiveConnection = Conn
    .LockType = adLockOptimistic
    .CursorLocation = adUseServer
    .CursorType = adOpenForwardOnly
    .Open "SET NOCOUNT ON"
  End With

cmd.Parameters("@regisno").Value = "ABC"
cmd.Parameters("@finid").Value = "AF123"
cmd.Parameters("@Month").Value = "2020-09-01"
rs.Open cmd, , , , adCmdStoredProc
If rs.EOF Then
Else
End if
и сообщение об ошибке, как показано ниже
"Операция не допускается, когда объект закрыт"
программа остановится if rs.eof then

Что я уже пробовал:

Я пробовал различные из них. @finid некоторые работают нормально, но некоторые не могут получить запись.
даже несмотря на то, что моя SQL-программа также добавляет "SET NOCOUNT ON- на начальном этапе, но результат все тот же.

Многие ценят ваши добрые советы.
Юнгу

Sandeep Mewara

Иногда предупреждения могут привести к путанице в результате. Попробуй: SET ANSI_WARNINGS OFF

1 Ответов

Рейтинг:
1

Richard Deeming

Ты звонишь Open на Recordset дважды, что, вероятно, не помогает.

Вы также должны убедиться, что вы не разделяете переменные соединения, команды или набора записей между несколькими методами.

Попробуйте что-нибудь вроде этого:

Set Conn = New ADODB.Connection
Conn.CursorLocation = adUseServer
Conn.Open ConStr

Set cmd = New ADODB.Command
cmd.CommandText = StoredProcedureName
cmd.CommandType = adCmdStoredProc
cmd.ActiveConnection = Conn

cmd.Parameters("@regisno").Value = "ABC"
cmd.Parameters("@finid").Value = "AF123"
cmd.Parameters("@Month").Value = "2020-09-01"

Set rs = New ADODB.Recordset
With rs
    .LockType = adLockOptimistic
    .CursorLocation = adUseServer
    .CursorType = adOpenForwardOnly
End With

rs.Open cmd, , , , adCmdStoredProc
Как открыть объекты ADO Connection и Recordset[^]