2013-05-28 68 views
2

我正在編寫一個VBA腳本來將數據從Access數據庫導入遠程數據庫服務器。 (它恰好是PostgreSQL,但我認爲這不是很相關。)目前,我的腳本嵌入在Access數據庫中。但是,我想像我做其他源代碼一樣版本化我的腳本:作爲純文本,SVN可以爲我提供良好的更改跟蹤。如何在MS Access中使用外部VBA源代碼?

我也不希望將源文件交付給客戶端以供他們使用腳本。換句話說,我想提供已經編譯到Access數據庫的導入工具。是否有可能這樣做?

還是我追錯了兔子?有沒有一種方法可以在不將任何代碼嵌入Access數據庫的情況下使用Access庫?我的搜索建議不,但我願意接受這種可能性。這是我用VBA做過的第一件事,所以有很多我不知道,我敢肯定。

回答

1

我想我是走錯了兔子洞(我想我是用一個不存在的成語)。結果發現有一些用於Office的.NET interop DLL。我的機器似乎已經與Office安裝了.NET互操作的DLL,所以我不得不做的是一個引用添加到Microsoft.Office.Interop.Access DLL並創建一個應用對象:

var app = new Microsoft.Office.Interop.Access.Application(); 

我覺得一個.net應用程序是怎麼回事更適合我的需求。我不打算做很多Access特定的事情。這將允許我照常在版本控制下獲得我的源代碼。唯一的缺點是任何開發機器(和構建服務器,如果我自動化構建)都需要安裝Access,但無論如何,這將發生在VBA腳本中。

0

如果您不想在Access中執行此操作,則可能需要對此進行不同的標記。

您可以將數據庫作爲MDE文件傳遞給客戶端,MDE文件是經過編譯的獨立Access數據庫。如果這是您主要關心的話,客戶端將無法看到此格式的模塊或其他VBA代碼。

+0

不,我主要關心的是所有文件洗牌都必須完成。如果客戶只需要處理一個文件,這對客戶來說更簡單。如果你可以建議一些標籤,我會非常感激。 – jpmc26

+0

看看在Access中的Shell()命令。您必須確保每次都將VB腳本分發到同一位置,但這似乎是一件非常簡單的事情。我已使用此功能從Access內啓動應用程序,包括FTP文件傳輸。不確定你是否關心任何人能夠找到你的出口功能,如果他們好奇,但它會做你想要的。 –

+0

「我正在寫一個VBA腳本」 這就是我開始混淆的地方。有幾種VB的風格。你實際使用哪個? 「我的腳本嵌入在Access數據庫中。」 更混亂! 「我想提供已經編譯到Access數據庫的導入工具。」 這正是VBA(Visual Basic for Applications)的操作方式。 您能解釋一下當前解決方案中的代碼位置,它運行的位置和方式。 不要害怕寫很多,以清楚你目前在做什麼。 – tbur