2016-09-27 1 views
0

나는 형태의 매크로 수십를 SQL로 : 내가 원하는 무엇스크립트 출력 및 수출 MS 액세스와 매크로

enter image description here

스크립트 밖으로 SQL의 전체 매크로입니다. 쿼리를 열고 SQL View을 선택하면이 작업을 수동으로 수행 할 수 있습니다. 예를 들어 은 첫 번째 쿼리 Build BOM - Part 0A는 경우가 열리고 선택 SQL view 표시합니다 :

DELETE FROM [BOM Cost];

각각의 모든 쿼리 및 매크로에 갈 필요없이 전체 매크로 자동으로이 작업을 수행 할 수있는 방법이 있나요?

+0

매크로 레코더로 한 번 수행하면 원하는 기본 코드가 생깁니다. – litelite

+1

@ AlbertD.Kallal을 명확하게하기 위해 매크로/쿼리의 SQL 스크립트를 가져올 수 있도록 SQL을 사용하지 말 것을 제안합니다. (또한 귀하의 의견에보다 적극적으로 대답하십시오) – Sauron

+0

@ AlbertD.Kallal 나는 이것을 쓰지 않을 것이라고 생각하지 않았지만, 사이트에서 "로데오 광대"의 사용을 중단하십시오. 취했거나 실업 상태이든 다른 사람을 로데오 광대와 비교하는 것이 적절한시기는 없습니다. – meagar

답변

1

VBA 코드를 사용하여 필요한 정보를 얻을 수 있습니다. 예를 들어,

Dim m As Object 
For Each m In CurrentProject.AllMacros 
    Dim macroName As String 
    macroName = m.Name 
    Debug.Print macroName 
Next 

와 현재 데이터베이스에있는 모든 매크로를 반복 할 수 있습니다 이제 대신 단순히 매크로 이름을 인쇄, 당신은

Application.SaveAsText acMacro, macroName, "C:\Users\Gord\Desktop\macroDump.txt" 

있는 텍스트 파일로 덤프 수있는 것 그런 다음 Action ="OpenQuery"을 포함하고 쿼리 이름을 검색/종료 블록을 시작 찾고, 해당 파일을 구문 분석 할 수있는이

Version =196611 
PublishOption =1 
ColumnsShown =0 
Begin 
    Action ="OpenQuery" 
    Argument ="MyUpdateQuery" 
    Argument ="0" 
    Argument ="1" 
End 
Begin 
    Comment ="_AXL:<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"no\"?>\015\012<UserI" 
     "nterfaceMacro MinimumClientDesignVersion=\"14.0.0000.0000\" xmlns=\"http://schem" 
     "as.microsoft.com/office/accessservices/2009/11/application\" xmlns:a=\"http://sc" 
     "hemas.microsoft.com/office/acc" 
End 
Begin 
    Comment ="_AXL:essservices/2009/11/forms\"><Statements><Action Name=\"OpenQuery\"><Argumen" 
     "t Name=\"QueryName\">MyUpdateQuery</Argument></Action></Statements></UserInterfa" 
     "ceMacro>" 
End 

과 같은 파일을 생성한다. 완전 자동화 및 @ GordThompson의 제안과 유사하지는 않지만 그것으로 당신은 그것의 SQL

Dim cdb As DAO.Database 
Set cdb = CurrentDb 
Dim qdf As DAO.QueryDef 
Set qdf = cdb.QueryDefs(queryName) ' MyUpdateQuery 
Dim querySql As String 
querySql = qdf.SQL 
0

를 QueryDef 개체를 열고 검색 할 수는 QueryDefs 컬렉션을 반복 한 다음 VBA 배열로 각 매크로에서 수동으로 모든 쿼리 이름을 수집 고려 증가하는 파일에 각각 쓰기 :

Public Sub ExtractSQL() 
    Dim db As DAO.Database, qdef As DAO.Querydef 
    Dim qrys As Variant, qry As Variant 
    Dim strSQL As String, sqlFile As String 

    Set db = CurrentDb   
    qrys = Array("Query1", "Query2", "Query3") 

    sqlFile = "C:\Path\To\AllQueries.sql" 

    ' OPEN SQL TEXT FILE 
    Open sqlFile For Output As #1 

    For Each qdef In db.QueryDefs   
     For Each qry In qrys 

      If qdef.Name = qry Then          
        Print #1, qdef.SQL  ' SQL STATEMENT 
        Print #1, ""   ' LINE SEPARATOR      
      End If 

     Next qry 
    Next qdef 

    ' CLOSE SQL TEXT FILE 
    Close #1 
    Set qdef = Nothing 
    Set db = Nothing 

End Sub 

참고 : Access SQL은 SQL Server의 T-SQL에서 쉽게 호환되지 않습니다. 두 방언은 조금 다릅니다. 따라서 IIF()에서 CASE (2012 이전에 SQL Server를 사용하는 경우)을 포함하여 일부 번역이 필요합니다. 문자열 상수를 둘러싸 기 위해 큰 따옴표를 사용하지 않아야합니다. 크로스 탭 피벗이 없습니다. 및 기타 항목.