2010-01-04 167 views
0

我目前正在編寫一個程序,用於將在Excel表單中輸入的內容保存到Access中的數據庫中。我試圖通過「1」增加Access中的主鍵字段,只要我從Excel表單中的字段添加數據。如何從Excel中的VBA查詢Microsoft Access數據庫字段

因爲我已經宣佈這個字段作爲主鍵NOT NULL字段,它不允許我再補充數據的另一行,除非主鍵字段已被宣佈。我不希望用戶輸入PK數據,因爲這很愚蠢。

我該如何去做Excel中的DDL到Access中,如說MAX(CustomerID),以找到Access表中的最大ID,然後使用RS.FIELD("CustomerID") = MAX(CustomerID) + 1MAX(CustomerID) + 1添加到ID字段中。

我會在這個問題上的任何幫助表示感謝。 在此先感謝。

+3

也許它是我的誤解,但爲什麼不能在MSAccess中使用自動編號? – David 2010-01-04 22:22:51

+0

僅當ID僅用於內部記錄(例如,將子表中的相關記錄與父表中的記錄相關聯)時,自動編號才適用。如果ID暴露給用戶,則需要使用自己的代碼來增加ID字段。在Access中做VBA的VBA代碼已經在許多Access論壇上發佈,所以它不應該很難找到(它甚至已經發布在SO上!)。 – 2010-01-05 02:34:21

回答

0

我喜歡使用自動編號字段在其他的答案提出的想法。

但是,如果你想避開自動編號,你可以在Excel中使用Access的查閱函數從VBA:

rs.AddNew 
rs.Fields("CustomerID") = Access.DLookup("Max(CustomerID)", "Customer") + 1 

... 

rs.Update 

假設你的基地臺是Customer

你將不得不添加的參考工具 - 微軟訪問>引用

+2

如果有多個用戶,這可能是相當不安全的。 – Fionnuala 2010-01-05 00:09:26

+0

歡呼,我正在尋找一種方式來做它在VB – Seedorf 2010-01-05 02:37:18

5

您可以在Access中將列聲明爲Autoincrement。然後它會自動獲得後續值。

+0

這是一個好主意。但令人遺憾的是它必須在excel的VB端完成。我會爲你解答這個問題。 – Seedorf 2010-01-05 02:38:34

0

難道不可能在Access中創建自己的表格,然後你可以使用數據庫的自動編號字段?除非有特定的理由讓它保持在excel中,否則它似乎有點複雜的解決方案

0

如果你不想使用上面的DLookup函數,你也可以創建一個VBA函數來檢索值爲你,然後嵌入到你的插入。

Private Function GetNextPKID(MyConnectionString) as Integer 
dim rs as adodb.recordset, cn as adodb.connection, sSQL as string 

sSQL = "SELECT COUNT(*) FROM MyTable" 

set cn = new adodb.connection 
set rs = new adodb.recordset 
cn.ConnectionString = MyConnectionString 
cn.Open 
set rs.ActiveConnection = cn 
rs.Open(sSQL) 

GetNextPKID = rs.Fields(0).Value + 1 

cn.Close 
set cn = nothing 
set rs = nothing 
End Function 
+0

哇,沒有注意到這個問題是多麼的老。希望這對某些人有用。 – TehJake 2015-06-29 10:49:58

相關問題