Как использовать MS Access SaveAsText с запросами (в частности, хранимые процедуры) - PullRequest
2 голосов
/ 01 февраля 2011

Я прочитал все вопросы на этом сайте, связанные с SaveAsText (и другими вопросами, связанными с контролем версий и доступом).

Самым полезным на данный момент был этот. Я использую слегка модифицированную версию кода 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

Основываясь на ответе в этот вопрос , я обязательно добавил

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 (и определений Views или Table, пока мы на нем) в текстовые файлы?

1 Ответ

3 голосов
/ 08 февраля 2011

Вероятно, это не имеет ничего общего с MDB против ADP.Когда я пытаюсь выполнить следующее в mdb, я получаю то же сообщение об ошибке:

MsgBox Application.CurrentData.AllStoredProcedures.Count

Я подозреваю, что это происходит потому, что MS Access не знает, какая базовая структура базы данных SQL есть.И действительно, почему это должно волновать, и почему БД сообщает вашему приложению, как оно выглядит под покровом?Хранимые процедуры работают полностью на стороне БД и ничего не знают о приложении 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...