Em chào mọi người.
Em có vấn đề với VBA khi truy vấn SQL bị lỗi "Operation is not allowed when the object is closed."
Câu truy vấn của em trên SQL như sau:
Em đã chạy câu truy vấn trên SQL Server thì chạy được, nhưng em truy vấn trong VBA thì bị lỗi tại dòng:
em gửi a/c mã VBA em đã chạy.
Cũng với phương pháp Truy vấn này em truy vấn bằng câu lệnh ngắn gọn và đơn giản hơn thì không sao cả.
Em đang suy đoán lỗi liên quan đến vấn đề VBA hỗ trợ độ dài câu truy vấn SQL, a/c cho em ý kiến với ạ.
Có phải trường hợp này thì cần chạy thủ tục trên SQL trước rồi trên VBA chỉ gọi lại thủ tục mới được.
Em cảm ơn!
Em có vấn đề với VBA khi truy vấn SQL bị lỗi "Operation is not allowed when the object is closed."
Câu truy vấn của em trên SQL như sau:
PHP:
DECLARE @AccountObjectTaxCode NVARCHAR(MAX)
DECLARE @AccountObjectGroupList NVARCHAR(MAX)
SELECT
RefID,
AccountObjectID,
@AccountObjectTaxCode AS AccObjCode,
@AccountObjectGroupList AS AccObjGrLst,
InvSeries,
InvNo,
InvDate,
TotalAmount
INTO #tbSAReturn
FROM SAReturn A
UPDATE #tbSAReturn
SET #tbSAReturn.AccObjCode = C.AccountObjectCode FROM AccountObject C WHERE #tbSAReturn.AccountObjectID = C.AccountObjectID
UPDATE #tbSAReturn
SET #tbSAReturn.AccObjGrLst = C.AccountObjectGroupList FROM AccountObject C WHERE #tbSAReturn.AccountObjectID = C.AccountObjectID
SELECT
AccObjCode,
InvSeries,
InvNo,
InvDate,
TotalAmount
FROM #tbSAReturn
WHERE AccObjGrLst LIKE '%;/3/7/%'
PHP:
ShResultDataReturn.Cells(1, "A").CopyFromRecordset rs
PHP:
Sub ADOExcelSQLServer3()
Dim Cn As ADODB.Connection
Dim Server_Name As String
Dim Database_Name As String
Dim User_ID As String
Dim Password As String
Dim SQLStr1 As String
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Set ShGetServer = Sheets("Conn_SQL_Data")
Set ShResultDataReturn = Sheet1
Server_Name = ShGetServer.Cells(3, "B")
Database_Name = ShGetServer.Cells(4, "B")
User_ID = ShGetServer.Cells(5, "B")
Password = ShGetServer.Cells(6, "B")
SQLStr1 = "DECLARE @AccountObjectTaxCode NVARCHAR(MAX)" & _
" DECLARE @AccountObjectGroupList NVARCHAR(MAX)" & _
" SELECT" & _
" RefID," & _
" AccountObjectID," & _
" @AccountObjectTaxCode AS AccObjCode," & _
" @AccountObjectGroupList AS AccObjGrLst," & _
" InvSeries," & _
" InvNo," & _
" InvDate," & _
" TotalAmount" & _
" INTO #tbSAReturn" & _
" FROM SAReturn A" & _
" UPDATE #tbSAReturn" & _
" SET #tbSAReturn.AccObjCode = C.AccountObjectCode FROM AccountObject C" & _
" WHERE #tbSAReturn.AccountObjectID = C.AccountObjectID" & _
" UPDATE #tbSAReturn" & _
" SET #tbSAReturn.AccObjGrLst = C.AccountObjectGroupList FROM AccountObject C" & _
" WHERE #tbSAReturn.AccountObjectID = C.AccountObjectID" & _
" SELECT" & _
" AccObjCode," & _
" InvSeries," & _
" InvNo," & _
" InvDate," & _
" TotalAmount" & _
" FROM #tbSAReturn" & _
" WHERE AccObjGrLst LIKE '%;/3/7/%'"
Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
";Uid=" & User_ID & ";Pwd=" & Password & ";"
rs.Open SQLStr1, Cn, adOpenStatic
ShResultDataReturn.Cells(1, "A").CopyFromRecordset rs
rs.Close
Set rs = Nothing
Cn.Close
Set Cn = Nothing
End Sub
Em đang suy đoán lỗi liên quan đến vấn đề VBA hỗ trợ độ dài câu truy vấn SQL, a/c cho em ý kiến với ạ.
Có phải trường hợp này thì cần chạy thủ tục trên SQL trước rồi trên VBA chỉ gọi lại thủ tục mới được.
Em cảm ơn!
Lần chỉnh sửa cuối: