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

我目前正在编写一个程序来保存在Excel表格中input的数据到Access数据库中。 我试图增加Access中的主键字段“1”,每当我从我的Excel表单中的字段添加数据。

因为我已经声明这个字段为PRIMARY KEY NOT NULL字段,所以不允许我添加另一行数据,除非主键字段已被声明。 我不希望用户inputPK数据,因为这将是愚蠢的。

我怎样才能把Excel中的DDL转换成Access,就像说MAX(CustomerID)来查找Access表中的最大ID,然后使用RS.FIELD("CustomerID") = MAX(CustomerID) + 1来将MAX(CustomerID) + 1 RS.FIELD("CustomerID") = MAX(CustomerID) + 1

对于这件事的任何帮助,我将不胜感激。 提前致谢。

我喜欢使用其他答案中build议的自动编号字段的想法。

但是,如果您希望避开AutoNumber,则可以使用Excel中的VBA中的Access的DLookupfunction:

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

假设你的基表是Customer

您将不得不在Tools-> References中添加对Microsoft Access的引用

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

是不是可以创build访问本身的forms,然后你可以只使用数据库的自动编号字段? 除非有特殊的理由让它保持在excel中,否则这个问题似乎有点复杂

如果你不想使用上面的DLookup函数,你也可以创build一个VBA函数来为你检索这个值,然后把它embedded到你的insert中。

 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