2011-02-01 42 views
2

我已經閱讀了本網站上與SaveAsText(以及其他版本控制與Access相關的問題)有關的所有問題。如何在查詢中使用MS Access SaveAsText(特別是存儲過程)

迄今爲止最有幫助的一個是this one.我在Oliver的答案中發佈了VBScript代碼的稍微修改版本,以便將我的對象保存爲文本文件。我的應用程序是一個.adp,並且數據庫(顯然包括存儲過程)是SQL Server 2005.

我試圖將此代碼添加到我的VBScript中,但我始終得到一個錯誤,指出「您已取消以前的操作「時SaveAsText行被擊中。

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 

基於對this question的反應,我就確定

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 

沒有工作,但我相信,旨在爲的.mdb反正不是.ADP。是否有任何解決方案將StoredProcedures(以及視圖或表格定義,而我們在此處)導出到文本文件?

回答

3

它可能與mdb vs adp沒有任何關係。當我在mdb中嘗試以下操作時,我收到相同的錯誤消息。

MsgBox Application.CurrentData.AllStoredProcedures.Count 

我懷疑這是因爲MS Access不知道SQL數據庫的底層結構是。真的,它爲什麼要關心,爲什麼DB會告訴你的應用程序在封面下看起來像什麼?存儲過程完全在數據庫端運行,並且對MS Access應用程序一無所知,而視圖只是數據的視圖(或表示)。據我所知,你不能從MS Access中進行操作。

我想你要做的是自動導出必要的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 
相關問題