如何从Excel中的VBA查询Microsoft Access数据库字段

如何从Excel中的VBA查询Microsoft Access数据库字段

问题描述:

我目前正在编写一个程序,用于将在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

我喜欢使用自动编号字段在其他的答案提出的想法。

但是,如果你想避开自动编号,你可以在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

您可以在Access中将列声明为Autoincrement。然后它会自动获得后续值。

+0

这是一个好主意。但令人遗憾的是它必须在excel的VB端完成。我会为你解答这个问题。 – Seedorf 2010-01-05 02:38:34

难道不可能在Access中创建自己的表格,然后你可以使用数据库的自动编号字段?除非有特定的理由让它保持在excel中,否则它似乎有点复杂的解决方案

如果你不想使用上面的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