2010-06-07 2 views
3

Сотрудник унаследовал макрос Microsoft Access, который выполняет серию операций SQL с базой данных Sybase, вызывая OpenQuery на кучу запросов о действиях, которые используют связанные таблицы через ODBC. Я хотел бы помочь ему преобразовать его в SQL-скрипт, который мы можем выполнить непосредственно против базы данных. И поскольку у нас есть немало таких макросов, я бы хотел придумать инструмент преобразования.Обратный инженер Доступ к макросу из .NET

(если один уже не существует, и в этом случае, пожалуйста, направить меня к нему.)

я ожидал, чтобы иметь возможность получить доступ к детали макроса с помощью COM-взаимодействия. До сих пор мне не удалось найти способ добраться до этих деталей. Вот что я до сих пор.

Imports Access = Microsoft.Office.Interop.Access 
Imports System.Runtime.InteropServices 

Module Module1 

    Sub Main() 
     Dim app As New Access.Application() 
     app.OpenCurrentDatabase("c:\test.mdb") 
     Dim macro As Access.AccessObject = app.CurrentProject.AllMacros("Macro1") 
     'Do something with variable "macro"???' 
     app.Quit(Access.AcQuitOption.acQuitSaveNone) 
     Marshal.FinalReleaseComObject(app) 
    End Sub 

End Module 

Я не думаю, что любой из членов AccessObject предоставит необходимую мне информацию. Но я не могу найти ничего, что даже упоминает макросы. Кто-нибудь когда-нибудь делал что-нибудь подобное? Есть ли какая-то DoCmd или SysCmd операция, которая будет работать здесь?

(Кстати, я знаю, что как только я получаю SQL я буду иметь задачу преобразования его в Sybase SQL. Я пересечь этот мост, когда я прихожу к нему.)

ответ

4

Если бы будет полезно сбросить макроопределения в текстовые файлы, попробовать что-то вроде этого:

application.saveastext acMacro, "Macro1", "Macro1.txt" 

затем можно открыть текстовые файлы и читать Действие и аргумент заявления.

+0

... а затем получить SQL из сохраненных QueryDefs. –

Смежные вопросы