2012-09-02 71 views
1

我的應用程序使用visual basic 6編寫,它有一個Access數據庫。我想添加一個VB表單並以這種形式打開數據庫,以便db在那裏編輯數據庫。我有這個代碼爲oppenning:VB6- Open Access DB或其中一種形式,帶有ADO對象

Dim db As DAO.Database 

Set db = DBEngine.workspaces(0).opendatabase("c:\ss.mdb") 

我有一個窗體內的數據庫。這種形式使數據插入過程更快。我想用我的應用程序打開這個訪問表單。 我應該怎麼做?

注意:我有這個代碼使用Microsoft訪問14對象庫。

Dim appaccess As Access.Application, dbstr As String 

On Error Resume Next 
Set appaccess = New Access.Application 
Set appaccess = CreateObject("Access.Application") 
dbstr = "c:\ss.mdb" 
'Or dbstr="c:\my documents\yourfile.mdb 
'put the correct path here. 
appaccess.OpenCurrentDatabase dbstr 
appaccess.DoCmd.OpenForm "aa", acLayout 
appaccess.Visible = True 

但是,當我運行這個代碼的窗體出現,過了一段時間後它得到disapear。除了使用訪問對象庫創建一些訪問版本衝突。所以,雖然沒有必要,但我更喜歡用ADO對象來做到這一點。無論如何,我正在尋找一種方法來解決我的問題。

謝謝您的幫助

回答

1

ADO提供了與各種數據源進行交互的方法。雖然可以將它用於Access數據庫文件,但它不提供使用Access表單的方法。

使用您當前的方法,您可以使用CreateObject將對象變量appaccess設置爲新的Access應用程序實例,然後在該實例中打開表單。但是,當變量超出範圍時,Access實例關閉並且窗體消失。

您可能會修改您的VB6代碼,以將變量保持在範圍內,直到您完成Access實例。不幸的是,我不知道如何將這種改變適用於其他代碼,而我從來沒有使用過VB6。

或者,您可以使用Shell Function啓動Access實例,然後使用GetObject()將對象變量設置爲該實例。

使用Shell()方法,您需要提供MSACCESS.EXE的完整路徑。您可以通過閱讀註冊表來找到它所在的文件夾。這裏有一個VBScript示例,我希望你可以很容易地適應VB6。

Option Explicit 
Dim MSAccFolder 
Dim RegKey 
Dim WSHShell 

RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\" _ 
    & "CurrentVersion\App Paths\MSACCESS.EXE\Path" 
Set WSHShell = WScript.CreateObject("WScript.Shell") 
MSAccFolder= WSHShell.RegRead(RegKey) 
WScript.Echo "MS Access Folder: " & MSAccFolder 
Set WSHShell = Nothing 
1

的一件事是你的代碼,而不是ADO是第一塊使用DAO。 也許這並不重要,因爲在你的第二塊代碼中沒有對db的引用。 因此,第一塊代碼看起來是不必要的。

我不知道爲什麼你有2套appaccess語句,你不需要第二個。 另外我建議你註釋掉'on error resume next'語句,這樣你可以在調試時看到哪一行導致錯誤。

1

如果你打算使用VB,你應該放棄Access Automation的東西,並在VB中創建你的表單。然後使用ADO打開並使用Access文件。這比使用VB自動打開Access窗體更有效率。