如何从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) + 1
将MAX(CustomerID) + 1
添加到ID字段中。
我会在这个问题上的任何帮助表示感谢。 在此先感谢。
我喜欢使用自动编号字段在其他的答案提出的想法。
但是,如果你想避开自动编号,你可以在Excel中使用Access的查阅函数从VBA:
rs.AddNew
rs.Fields("CustomerID") = Access.DLookup("Max(CustomerID)", "Customer") + 1
...
rs.Update
假设你的基地台是Customer
。
你将不得不添加的参考工具 - 微软访问>引用
您可以在Access中将列声明为Autoincrement。然后它会自动获得后续值。
这是一个好主意。但令人遗憾的是它必须在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
哇,没有注意到这个问题是多么的老。希望这对某些人有用。 – TehJake 2015-06-29 10:49:58
也许它是我的误解,但为什么不能在MSAccess中使用自动编号? – David 2010-01-04 22:22:51
仅当ID仅用于内部记录(例如,将子表中的相关记录与父表中的记录相关联)时,自动编号才适用。如果ID暴露给用户,则需要使用自己的代码来增加ID字段。在Access中做VBA的VBA代码已经在许多Access论坛上发布,所以它不应该很难找到(它甚至已经发布在SO上!)。 – 2010-01-05 02:34:21