sql – 如何使用Excel VBA获取新插入记录的ID?
这好像是一个常见的题目,可是大大都办理方案都是指毗连多个SQL呼吁,我信托这是ADO / VBA无法做到的(但我很兴奋在这方面表现错误). 我当前插入我的新记录然后运行一个选择查询行使(我但愿)足够的字段,以担保只返回新插入的记录.我的数据库很少被一小我私人一次会见(在查询之间产生另一次插入的风险可以忽略不计),而且因为表的布局,辨认新记录凡是很轻易. 我此刻正在实行更新一个没有太多独一性范畴的表,而不是人工主键.这意味着存在新记录也许不是独一的风险,而且我不肯意添加字段以逼迫独一性. 在这种环境下,将记录插入Access表然后从Excel查询新主键的最佳要领是什么? 感谢你的回覆.我试图让@@ IDENTITY事变,但这老是行使下面的代码返回0. Private Sub getIdentityTest() Dim myRecordset As New ADODB.Recordset Dim SQL As String,SQL2 As String SQL = "INSERT INTO tblTasks (discipline,task,owner,unit,minutes) VALUES (""testDisc3-3"",""testTask"",""testOwner"",""testUnit"",1);" SQL2 = "SELECT @@identity AS NewID FROM tblTasks;" If databaseConnection Is Nothing Then createDBConnection End If With databaseConnection .Open dbConnectionString .Execute (SQL) .Close End With myRecordset.Open SQL2,dbConnectionString,adOpenStatic,adLockReadOnly Debug.Print myRecordset.Fields("NewID") myRecordset.Close Set myRecordset = Nothing End Sub 有什么突出的责任吗? 可是,思量到Renaud辅佐提供的告诫(下图),行使@@ IDENTITY与行使任何其他要领的风险险些沟通,以是我此刻行使SELECT MAX.为了未来参考,固然我有乐趣看看我上面的实行有什么题目. 办理要领关于你的题目:
假如您行使AutoIncrement作为主键,那么您具有独一性,您可以行使SELECT @@ Identity;获取最后一个自动天生ID的值(请参阅下面的告诫). 假如您没有行使自动增量,而且您要从Access插入记录可是想从Excel中检索最后一个: >确保您的主键是可排序的,因此您可以行使以下任一查询获取最后一个: SELECT MAX(MyPrimaryField) FROM MyTable; SELECT TOP 1 MyPrimaryField FROM MyTable ORDER BY MyPrimaryField DESC; >可能,假如排序你的首要字段不会给你最后一个,你必要添加一个DateTime字段(好比InsertedDate)并在每次在该表中建设一个新记录时生涯当前日期和时刻,这样你就可以获得最后一个像这样: SELECT TOP 1 MyPrimaryField FROM MyTable ORDER BY InsertedDate DESC; 在任何一种环境下,我以为您会发明添加AutoIncrement主键更轻易处理赏罚: >这不会让你支付太多价钱 来自Excel 要将数据导入Excel,您有以下几种选择: >行使查询建设数据链接,以便直接在Cell或范畴中行使功效. Sub GetLastPrimaryKey(PrimaryField as string,Table as string) as variant Dim con As String Dim rs As ADODB.Recordset Dim sql As String con = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source= ; C:myDatabase.accdb" sql = "SELECT MAX([" & PrimaryField & "]) FROM [" & MyTable & "];" Set rs = New ADODB.Recordset rs.Open sql,con,adLockReadOnly GetLastPrimaryKey = rs.Fields(0).Value rs.Close Set rs = Nothing End Sub 关于@@ Identity的留意事项 在尺度Access数据库(*)中行使@@ Identity时,您必需是careful of the caveats: >它仅合用于AutoIncrement Identity字段. (*):为了清晰起见,@@ IDENTITY示意差异,而且以更具猜测性的方法,假如您对数据库行使ANSI-92 SQL模式.但题目是ANSI 92的语法略有差异Access支持的ANSI 89气魄威风凛凛,旨在当Access用作前端时增进与SQL Server的兼容性. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |