2009-10-09 379 views
0

我已經繼承了使用Access 97數據庫的設置。我需要從一個主mdb複製一個表格到其他多個表格以備使用。源mdb和源表大多是靜態的,目標mdbs差別很大。如何將Access表從一個mdb複製到另一個mdb?

所以,我有:
source.mdb包含表A中
destination.mdb包含表1,2和3

我需要與結束:
source.mdb是不變(包含表A)
destination.mdb包含表1,2,3和A

這是Access GUI中足夠簡單的任務,但由於此任務需要在一天內發生數百次,所以我會喜歡自動化它。最終目標是擁有一個腳本或批處理文件,我可以讓每個mdb用戶(約75名員工)在使用前自行操作每個數據庫。在UNIX/Oracle環境中,我更多的是在家裏,所以編寫腳本已經讓我陷入循環。

在Oracle中,我會用這樣的查詢:

從用戶/密碼複製@ SOURCEDB用戶/密碼@ destinationDB
使用select創建new_tableA *從表A;

類似的問題在這裏堆棧溢出講述如何從一個表複製記錄到另一個,但目標表中預先存在的,特別是字段的定義:

STRSQL =「INSERT INTO ServiceRecordInvoices 「& _
」(sriID,sriServiceRecordID,sriInvoiceDate,sriInvoiceNumber,「 & _
」sriDescription,sriInvoiceAmount)「 & _
」 IN」」 & strDatabasePathandNameTo & 「 '」 & _
「SELECT srpID,srpServiceRecordID,srpInvoiceDate,srpInvoiceNumber,」 & _
「srpParts,srpPartsAmount」 & _
「FROM ServiceRecordParts IN'」 & strDatabasePathandNameFrom & 「';」

我的第一次嘗試看起來像這樣,毫不奇怪,不起作用。有人可以引導我嗎?

copyTableSql = 「CREATE [new_tableA]」 & _
「IN '」 & destinationDBpath & 「'」 & _
「SELECT * FROM TABLEA IN '」 & sourceDBpath & 「';」

感謝您的任何建議。

回答

2

如果您願意在Access中使用VBA來自動執行此任務,使用「SELECT ... INTO ...」語句很容易 - Access調用Make Table Query。

SELECT s.* INTO tblA IN 'C:\SomeFolder\destination.mdb' FROM tblA AS s; 

如果必須使用Access之外腳本驅動它,嘗試的VBScript與此類似:

Option Explicit 
Dim dbe 
Dim db 

Set dbe = CreateObject("DAO.DBEngine.36") 
Set db = dbe.OpenDatabase("C:\SomeFolder\source.mdb") 

db.Execute "SELECT s.* INTO tblA IN 'C:\SomeFolder\destination.mdb' FROM tblA AS s;" 
Set db = Nothing 
Set dbe = Nothing 

我測試的腳本與我自己的數據庫和表的名稱,以及它爲我工作與Access您可能需要爲Access 97引用不同的DAO版本。我不知道您需要哪個版本,但可能以CreateObject行的「DAO.DBEngine.35」開頭。

實際上,如果您在destination.mdb中創建指向source.mdb中的tblA的鏈接,則此任務會更簡單。這樣你就不必將數據從一個數據庫複製到另一個數據庫。

+0

謝謝,HansUp。這正是我正在尋找的。像魅力一樣工作。 – 2009-10-13 19:24:17

1

因爲在Access中分離數據和邏輯是明智的,所以給他們提供3個數據庫 - 一個連接到另外兩個。那麼你可能只需要把所有的東西都複製一遍每個人都可以獲得mdb的共同副本,其中包含代碼和A的公共副本,以及他們自己的1-2-3。

對於這類事情,訪問是非常甜蜜的。你不應該失去任何效率。

此外,任何數據mdbs(或代碼mdb)的任何未來更新只是另一個文件拷貝。

1

對於想要在MS訪問中使用visual basic中的訪問代碼,或者實際上是想使用Windows腳本,您有點含糊不清?在你的情況下,Windows腳本似乎更合適。使用Windows腳本,您可以啓動任何Windows應用程序,無論是Excel,Word還是MS訪問,然後讓該應用程序執行任何您想要的操作。您的腳本可以關閉應用程序。所以在windows land中,你有所謂的自動化,並且你編寫了windows腳本來實現這些目標。但是,當您經常啓動MS訪問時,應用程序將具有在啓動時運行的表單和代碼。通常情況下,您不希望這些事情發生,因爲當您使用Windows腳本編寫程序時,就好像用戶啓動了應用程序一樣。

然而事實證明,在windows 2000以後,你可以打開並讀取和操作訪問數據庫文件,而無需在計算機上安裝訪問權限。這種方法的另一個優點是,您可以從這些數據庫文件中複製數據,但實際上並不需要自行啓動訪問應用程序。這樣可以節省內存,啓動時間,並且如前所述,無需實際啓動MS訪問並在批處理文件中啓動(請記住存在舊式批處理文件,然後存在我們稱之爲Windows腳本的內容......我建議你在這裏使用Windows腳本)。因此,腳本方法可以很好地滿足您將數據從一個文件複製到另一個文件的需要。

如果您想使用Windows任務計劃程序運行一些夜間批處理程序,那麼Windows腳本編程也可以很好地工作。事實上,如果您確實需要一些來自ms-access的夜間報告,那麼Windows腳本將是您的選擇,而不是在ms-access中使用VBA。 Windows腳本可讓您啓動ms-access,打印一些報告,然後關閉應用程序。你也可以在Excel中執行此操作,或者實際上可以對任何Windows應用程序執行此操作。

因此,支持Windows自動化解決方案,這是由於大多數Windows應用程序公開只是將它們的所有屬性和方法公開爲GUI部件所基於的對象和屬性。因此,您的腳本代碼通常可以實現SAME目標,就好像工作人員正坐在PC上並使用鼠標選擇選項一樣,只是使用應用程序的這些方法)。

請記住,這不是一個鼠標記錄系統,而是一個所有Windows應用程序都遵守的真正的腳本語言。

然而就你的情況而言,如上所述,你不需要啓動MS訪問,並且可以使用隨Windows提供的內置庫來打開和操作這些數據庫文件。 HansUp在這裏發佈的腳本實際上是一個標準的純Jane窗口腳本。只需將他的示例代碼粘貼到文本文件中,使用.vbs文件擴展名重命名文本文件,然後您就可以開始使用了。而且,即使沒有安裝MS訪問權限,該腳本甚至可以運行並運行在Windows上。

+0

對不起,模糊 - 我正在尋找一個VBScript的答案。作爲一個命令提示迷,我更喜歡腳本語言,但對Access沒有經驗。 – 2009-10-13 19:25:53

0

如果您在Access中運行此代碼,則這是一行代碼或使用DoCmd.TransferDatabase命令的宏。

根據您是從目標數據庫(導入)還是從源(導出)運行它來設置選項。

+0

如果您使用vbScript自動執行Access,則需要多行來設置它,但一旦設置完成,它就是同一行代碼。 – 2009-10-10 00:50:36

+0

而且,哦,順便說一句,歡迎來到StackOverflow,盧克!很高興有像你這樣的重擊手。 – 2009-10-10 00:51:08

相關問題