我目前正在编写一个程序,将Excel中表单中输入的内容保存到Access中的数据库中。每当我从Excel表单中的字段添加数据时,我试图将Access中的主键字段增加“1”。
因为我已将此字段声明为PRIMARY KEY NOT NULL字段,所以除非已声明主键字段,否则它不允许我添加另一行数据。我不希望用户输入PK数据,因为这会很愚蠢。
如何使用Excel MAX(CustomerID)
将Excel中的DDL用于Access,以便在Access表中找到最大ID,然后使用MAX(CustomerID) + 1
将RS.FIELD("CustomerID") = MAX(CustomerID) + 1
添加到ID字段中。
如果有任何帮助,我将不胜感激。 提前谢谢。
答案 0 :(得分:5)
您可以在Access中将列声明为Autoincrement。然后它会自动获得后续值。
答案 1 :(得分:0)
我喜欢在其他答案中建议使用自动编号字段的想法。
但是,如果您希望避开AutoNumber,可以在Excel中使用VBA中的Access的DLookup功能:
rs.AddNew
rs.Fields("CustomerID") = Access.DLookup("Max(CustomerID)", "Customer") + 1
...
rs.Update
假设您的基表为Customer
。
您必须在Tools-> References
中添加对Microsoft Access的引用答案 2 :(得分:0)
是否无法在访问本身中创建表单,然后您可以只使用数据库的自动编号字段?除非有特定的理由将其保留在excel中,否则对于该问题似乎有点复杂的解决方案
答案 3 :(得分:0)
If you don't want to use the above DLookup function, you can also create a VBA function to retrieve the value for you, then embed this in your insert into.
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