2011-02-01 3 views
2

이 사이트에서 SaveAsText 및 기타 버전 제어 관련 질문과 관련된 모든 질문을 읽었습니다.MS Access SaveAsText with Queries (구체적으로 저장 프로 시저)

지금까지 가장 유용한 질문은 this one. Oliver의 답변에 게시 된 VBScript 코드의 약간 수정 된 버전을 사용하여 내 개체를 텍스트 파일로 저장합니다. 내 응용 프로그램은 .adp이고 데이터베이스 (분명히 저장 프로 시저가 포함되어 있음)는 SQL Server 2005입니다.

이 코드를 VBScript에 추가하려고 시도했지만 "취소되었습니다. 이전 작업 "때 SaveAsText 줄 맞았습니다. this question의 응답을 바탕으로

For Each myObj In oApplication.CurrentData.AllStoredProcedures 
    WScript.Echo " " & myObj.fullname 
    oApplication.SaveAsText acQuery, _ 
          myObj.fullname, _ 
          sExportpath & "\" & myObj.fullname & ".sql" 
    dctDelete.Add "RE" & myObj.fullname, acQuery 
Next 

, 나는 파일의 상단에

Const acQuery = 1 

를 추가해야했다. 또한

,이 코드

For i = 0 To oApplication.CurrentDatabase.QueryDefs.Count - 1  
    oApplication.SaveAsText acQuery, _ 
          oApplication.CurrentDatabase.QueryDefs(i).Name, _ 
          sExportpath & "\" & db.QueryDefs(i).Name & ".sql" 
Next i 

작동하지 않았다,하지만 난 그는 .ADP을, 어쨌든 .MDB 의도하지 않은 생각합니다. StoredProcedures (및 뷰 또는 테이블 정의, 우리가있는 동안)를 텍스트 파일로 내보내는 솔루션이 있습니까?

답변

3

아마 mdb와 adp 사이에는 아무런 관련이 없습니다. mdb에서 다음을 시도하면 같은 오류 메시지가 나타납니다.

MsgBox Application.CurrentData.AllStoredProcedures.Count 

가 나는 MS 액세스는 SQL 데이터베이스의 기본 구조를 모르기 때문에 것을하고있는 것으로 판단됩니다. 그리고 정말로, 왜 신경 써야하며, DB가 응용 프로그램에 어떻게 보이는지 알려주는 이유는 무엇입니까? 저장 프로 시저는 DB 측에서 완전히 실행되며 MS Access 응용 프로그램에 대해서는 아무 것도 모릅니다.보기는 데이터보기 (또는 표시)입니다. 내가 아는 한, 당신은 MS 액세스 내에서 조작 할 수 없습니다.

당신이하려는 것은 데이터베이스를 재 작성하는 데 필요한 SQL 스크립트의 내보내기를 자동화하고 일종의 버전 제어 시스템에 저장하는 것입니다. Serverfault에있는 사람들은이를위한 편리한 솔루션을 가지고있을 것입니다.

SaveAsText는 불행히도 문서화되지 않은 방법입니다. 나는

''... 
Dim db As Database 
Set db = CurrentDb() 

Dim Qry As QueryDef 
For Each Qry In db.QueryDefs 
    strObjectName = Qry.Name 

    If Not (strObjectName Like "~sq_*") Then 
     Debug.Print " - " & strObjectName 

     Application.SaveAsText acQuery, strObjectName, _ 
          MY_PATH & "queries_" & strObjectName & ".txt" 
    End If 
Next 
''... 

을 TableDef의 조금 다른 (SaveAsText/LoadAsText이 제대로 작동 할 수 없었다)

For Each Tbl In db.TableDefs 
    If Tbl.Attributes = 0 Then 'Ignores System Tables 
     strObjectName = Tbl.Name 

     Debug.Print " - " & strObjectName 

     Application.ExportXML acExportTable, strObjectName, , _ 
         MY_PATH & "tables_" & strObjectName & ".xsd" 

    End If 
Next 
했다 쿼리

수출에 대해 다음을 사용했습니다