[SQL] VBA에서 액세스 모듈에서 매개 변수를 전달하는 동안 저장 프로 시저를 호출
SQLVBA에서 액세스 모듈에서 매개 변수를 전달하는 동안 저장 프로 시저를 호출
나는 마이크로 소프트 SQL 서버 2008 백엔드와 액세스 2010에서 일하고 있습니다. 나는 테이블에 (매개 변수로 제공) 새 값을 삽입하는 저장 프로 시저가 있습니다. 파라미터에 할당 된 값이 폴더에 저장된 파일로부터 얻어진다. Windows 파일 시스템은 그 안의 파일 목록을 만들기 위해 특정 폴더를 스캔하는 데 사용됩니다. 스캔 된 각 파일에 대한 저장 프로 시저 호출 및 다른 값과 함께 파일명과 QueueId (확장자가없는 파일명)를 호출 프로 시저에 대한 매개 변수로서 사용된다. 저장 프로 시저는 테이블의 각 파일에 대해 새 레코드를 만드는 데 사용됩니다.
Public Function CreateInstrumentInterfaceLogRecords(BatchID As Long, InstrumentName As String) As Boolean
On Error GoTo HandleError
Dim objFSO As FileSystemObject
Dim AllFiles As Object
Dim objFolder As Object
Dim objFile As Object
Dim FileExt As String
Dim strSQL As String
CreateInstrumentInterfaceLogRecords = False
strSQL = "SELECT FileExt FROM tlkpInstrument"
FileExt = ExecuteScalar(strSQL)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(NewPath)
'NewPath is a public variable that holds the path to the folder'
Set AllFiles = objFolder.Files
For Each objFile In AllFiles
FileName = objFile.FileName
QuenueId = Replace(FileName, FileExt, "")
'call procedure to pass values'
Next objFile
ExitProc:
Exit Function
HandleError:
MsgBox Err.Number & " " & Err.Description & " in CreateInstrumentInterfaceLogRecords"
GoTo ExitProc
End Function
및 저장 프로 시저입니다 :
CREATE PROCEDURE upInsertToInstrumentInterfaceLog @BatchID nvarchar(60),@InstrumentName nvarchar(60) ,@FIleName nvarchar(60), @QueueId nvarchar(60)
AS
INSERT INTO tblInstrumentInterfaceLog (BatchID,InstrumentName,FileName,QueueID,DateOfBatch,Folder)
VALUES (@BatchID, @InstrumentName,@FileName, @QueueId,getdate(),'New');
GO
모든 예제는 정말 나에게 절차를 연결을 생성하고 호출의 단단한 아이디어를 제공하지 않았습니다. 내가 제공 한 조언은 내가 그와 관련된 예를 찾기 위해 노력 해왔다 있도록 ExecuteNonQuery는 작동 방법을 연구하는 것입니다. 다음은 내가 찾은 예제 템플릿 중 하나입니다
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Set conn = New ADODB.Connection
conn.ConnectionString = “your connection String here”
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "put stored procedure name here"
cmd.Execute
conn.Close
Set conn = Nothing
Set cmd = Nothing
난 정말 확실히 내가이 예를 어떻게 통과 값을 통합하는 방법에서 취해야 아닙니다. 또한 내가 http://www.connectionstrings.com/를 방문한에도 불구하고 나는 여전히 그들을 만드는 방법에 대한 혼란 스러워요. 어떤 도움을 크게 감상 할 수있다
해결법
-
==============================
1.
Dim conn As ADODB.Connection Dim cmd As ADODB.Command Set conn = New ADODB.Connection conn.ConnectionString = “your connection String here” conn.Open Set cmd = New ADODB.Command cmd.ActiveConnection = conn cmd.CommandType = adCmdStoredProc cmd.CommandText = "upInsertToInstrumentInterfaceLog" cmd.parameters.Append cmd.CreateParameter("@BatchID", adVarChar, adParamInput, 60, "value for BatchID") cmd.parameters.Append cmd.CreateParameter("@InstrumentName", adVarChar, adParamInput, 60, "value for InstrumentName") '... cmd.Execute conn.Close
-
==============================
2.저장된 통과 쿼리를 사용합니다.
저장된 통과 쿼리를 사용합니다.
당신의 코드는된다 :
With currentdb.querydefs("MyPass") .sql = "exec StoreProcName " & strBach & “,” & strInstrmentName .execute End With
그래서, 당신은 여기에 두 줄의 코드가 필요합니다. 당신은 당신이 쿼리를 통해 통과 저장된를 사용하는 경우 모든 연결 문자열 또는 어떤 변수를 선언 할 필요가 없습니다.
from https://stackoverflow.com/questions/24248870/calling-stored-procedure-while-passing-parameters-from-access-module-in-vba by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 오라클 REGEXP_REPLACE에 의해 공간이 구분 된 목록에서 중복을 제거하는 방법? [복제] (0) | 2020.07.17 |
---|---|
[SQL] 한 카테고리 당 최신 2 개 아이템을 얻을하는 방법 (MySQL과) 선택 (0) | 2020.07.17 |
[SQL] PostgreSQL의 정렬 (0) | 2020.07.17 |
[SQL] BY 절 SQL GROUP에서 빈 그룹을 반환하는 방법 (0) | 2020.07.17 |
[SQL] PostgreSQL을 업데이트 가입과 (0) | 2020.07.17 |