摘自:Access911 原文:http://access911.net/71FAB21E16DC.htm
问题:
|
请教一个问题,请各位帮忙!!! Access数据库中,有“自动编号”类型字段,但在表中新插入新记录后,在编程中 如果取得新插入记录的自动编号的值 |
回答:
|
有
我在写登陆界面的时候也遇到同样的问题 我用 insert into 来添加一个新的人员,但是该人员的password字段值是用这条记录的自动编号字段的值+密码 这样的格式来存储的,也就是说我必须先添加,然后用 update 来设置密码,就遇到了和你相同的问题。
我的办法是:在insert into 的同时将你自己生成的一个uid存储在新纪录的 password 里面,在 update 的时候只要找到这段值就可以了。 以下是我的代码
DoCmd.SetWarnings False Dim strGUID As String strGUID = CreateGUID '建立一个GUID '建立GUID有很多方法,你甚至可以建立一个你自己的GUID: 日期+时间+人员姓名+4位数的随机数字 Debug.Print strGUID DoCmd.RunSQL "INSERT INTO tbl_family ( name, pwd ) SELECT '" & text4.Value & "' AS 表达式1, '" & strGUID & "' AS 表达式2" Dim strUID As String strUID = Trim(str(DLookup("id", "tbl_family", "name='" & text4.Value & "' and pwd='" & strGUID & "'"))) DoCmd.RunSQL "UPDATE tbl_family SET tbl_family.pwd = md5('" & strUID & "|" & Text6.Value & "') WHERE tbl_family.id=" & strUID
DoCmd.SetWarnings True |
| 方法一:
|
很简单,先取id后update
dim rcd as long Dim rs As New ADODB.Recordset rs.Open "表1", CurrentProject.Connection, adOpenDynamic, adLockOptimistic rs.AddNew rcd=rs("id") rs.update rs.Close
docmd.runsql "update … where id="&str(rcd) |
|
方法二:
|
必须 jet oledb 4 支持
Private Sub AutoIncTest() Dim cnn As ADODB.Connection 'Dim cmd As ADODB.Command Dim rst As ADODB.Recordset Set cnn = CurrentProject.Connection 'Set cmd = New ADODB.Command 'Set cmd.ActiveConnection = cnn 'cmd.CommandType = adCmdText 'cmd.CommandText = "INSERT INTO tblNewOrder2 " & _ "(ItemId, Quantity) VALUES (1, 20)" 'cmd.Execute 'Set cmd = Nothing cnn.execute "insert into tblneworder2 (item) values ('dd')" Set rst = New ADODB.Recordset rst.Open "SELECT @@IDENTITY AS LastOrderId", _ cnn, Options:=adCmdText Debug.Print "OrderId for new record = " & _ rst("LastOrderId") rst.Close Set rst = Nothing End Sub |
|
原文地址:http://access911.net/71FABF1E17DC.htm
|