복붙노트

[SQL] VBA에서 액세스 모듈에서 매개 변수를 전달하는 동안 저장 프로 시저를 호출

SQL

VBA에서 액세스 모듈에서 매개 변수를 전달하는 동안 저장 프로 시저를 호출

나는 마이크로 소프트 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. ==============================

    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. ==============================

    2.저장된 통과 쿼리를 사용합니다.

    저장된 통과 쿼리를 사용합니다.

    당신의 코드는된다 :

    With currentdb.querydefs("MyPass")
      .sql = "exec StoreProcName " & strBach & “,” & strInstrmentName
      .execute
    End With
    

    그래서, 당신은 여기에 두 줄의 코드가 필요합니다. 당신은 당신이 쿼리를 통해 통과 저장된를 사용하는 경우 모든 연결 문자열 또는 어떤 변수를 선언 할 필요가 없습니다.

  3. from https://stackoverflow.com/questions/24248870/calling-stored-procedure-while-passing-parameters-from-access-module-in-vba by cc-by-sa and MIT license