如何通过SQL将多个值插入Access数据库的查找字段?

时间:2014-05-26 19:53:50

标签: ms-access vbscript asp-classic lookup

如何使用ASP将多个值插入Access数据库的查找字段?

(我已经尝试了一些方法,所以我甚至不确定将哪些代码显示为尝试。)

1 个答案:

答案 0 :(得分:2)

对于名为[Agents]的示例表,其具有名为[Languages] ...

的多值查找字段

TableDesign.png

以下VBScript代码表示添加名为" Maria"的新代理的一种方法。谁说英语和西班牙语

Option Explicit
Dim con, cmd, rst, newID
Const adInteger = 3
Const adVarWChar = 202
Const adParamInput = 1
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set con = CreateObject("ADODB.Connection")
con.Open _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=C:\Users\Public\Database1.accdb"

' insert all fields *except* multi-value Lookup Field
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandText = "INSERT INTO Agents (AgentName) VALUES (?)"
cmd.Parameters.Append cmd.CreateParameter("?", adVarWChar, adParamInput, 255, "Maria")
cmd.Execute 
Set cmd = Nothing

' get AutoNumber ID of newly-inserted record
Set rst = CreateObject("ADODB.Recordset")
rst.Open "SELECT @@IDENTITY", con, adOpenStatic, adLockOptimistic
newID = rst(0).Value
rst.Close
Set rst = Nothing

' insert multi-value Lookup Field values
Set cmd = CreateObject("ADODB.Command")
cmd.ActiveConnection = con
cmd.CommandText = "INSERT INTO Agents (Languages.Value) VALUES (?) WHERE AgentID=?"
cmd.Parameters.Append cmd.CreateParameter("?", adVarWChar, adParamInput, 255)
cmd.Parameters.Append cmd.CreateParameter("?", adInteger, adParamInput)
cmd.Prepared = True
cmd.Parameters(1).Value = newID
' first value
cmd.Parameters(0).Value = "English"
cmd.Execute
' second value
cmd.Parameters(0).Value = "Spanish"
cmd.Execute
Set cmd = Nothing

con.Close
Set con = Nothing

虽然这可能会回答问题的直接要求,但重要的是要注意:

  1. 访问SQL支持操作查找字段不完整,可能在一个开发环境与另一个开发环境不一致,

  2. " Microsoft强烈建议您使用Web应用程序中的Access" 反对 。 (参考:here)和

  3. 经验丰富的Access开发人员使用查找字段(参考:here)建议 反对 ,除非在特定情况下(例如,与SharePoint集成)