此功能适用于MDB Access数据库
Function InsertRecord(dbConnectionString, tableName, primaryKeyName, fieldNames, fieldValues)
Dim cn,rs,ID
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open dbConnectionString
cn.BeginTrans
rs.Open tableName, cn, 1, 3, 2 'adOpenKeyset, adLockOptimistic, adCmdTable
rs.AddNew fieldNames, fieldValues
rs.Update
rs.MoveLast
ID = rs.Fields(primaryKeyName).Value 'in MySQL it's not returning the last AUTOINCREMENT PrimaryKey ID
rs.Close
Set rs = Nothing
cn.CommitTrans
cn.Close
Set cn = Nothing
If Err.Number = 0 Then
InsertRecord = ID
Else
InsertRecord = Nothing
End If
End Function
当我执行以下代码时,我可以在* .MDB数据库的表中获取最后插入的主键(自动增量)ID
Dim ThisRecordID, arr1, arr2
arr1 = Array("mynumber", "mytext")
arr2 = Array("123456789", "max")
ThisRecordID = InsertRecord("{connection string}", "myTable", "ID", arr1, arr2)
Response.Write("Last record ID: " & ThisRecordID & "<br>")
假设该表名为&#34; myTable&#34;以及以下字段&#34; ID&#34; (INT自动增量),&#34; mynumber&#34; (文字),&#34; mytext&#34; (文本)。
如果我在MySQL数据库中运行具有相同字段的表的代码,&#34; ThisRecordID&#34; value不等于存储在最后一条记录中的ID值。
答案 0 :(得分:0)
你不能使用
Dim sql
If dbConnectionString = " [ your JET connection string ]" then
sql = "select top 1 ID from MyTable order by ID desc"
elseif dbConnectionString = " [ your MySQL connection string ]" then
sql = "select ID from MyTable order by ID desc limit 0,1"
end if
rs.open sql
response.write rs("ID")
rs.close
答案 1 :(得分:0)
我重写了这个函数:
Function InsertRecord(dbConnectionString, tableName, primaryKeyName, fieldNames, fieldValues)
Dim cn,rs,ID
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open dbConnectionString
cn.BeginTrans
rs.Open tableName, cn, 1, 3, 2 'adOpenKeyset, adLockOptimistic, adCmdTable
rs.AddNew fieldNames, fieldValues
rs.Update
' Fixed Bug:
' reading from a MySQL database, the following code is not returning the last AUTOINCREMENT PrimaryKey ID
' rs.MoveLast
' ID = rs.Fields(primaryKeyName).Value
rs.Close
Dim sql : sql = "SELECT * FROM " & tableName & " ORDER BY " & primaryKeyName & " DESC"
Set rs = cn.Execute(sql)
ID = rs.Fields(primaryKeyName).Value
rs.Close
Set rs = Nothing
cn.CommitTrans
cn.Close
Set cn = Nothing
If Err.Number = 0 Then
InsertRecord = ID
Else
InsertRecord = Nothing
End If
End Function
答案 2 :(得分:0)
从原始帖子中,您需要做的就是设置记录集光标位置。
Function InsertRecord(dbConnectionString, tableName, primaryKeyName, fieldNames, fieldValues)
Dim cn,rs,ID
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
rs.cursorLocation = 3
cn.Open dbConnectionString
cn.BeginTrans
rs.Open tableName, cn, 1, 3, 2 'adOpenKeyset, adLockOptimistic, adCmdTable
rs.AddNew fieldNames, fieldValues
rs.Update
rs.MoveLast
ID = rs.Fields(primaryKeyName).Value
rs.Close
Set rs = Nothing
cn.CommitTrans
cn.Close
Set cn = Nothing
If Err.Number = 0 Then
InsertRecord = ID
Else
set InsertRecord = Nothing
End If
End Function