2011-02-01 36 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