繁体   English   中英

将查询的记录集追加到Access中的表

[英]Append queried Recordset to Table in Access

我正在查询Active Directory以列出Access中的用户和其他字段。 有没有一种方法可以将查询的结果附加到现有表中? 目前,我正在尝试使用INSERT INTO,但是我的Object变量未设置或块变量时出现问题。

Private Sub Command0_Click()

Dim objRecordSet As Object
Dim objCommand As Object
Dim objConnection As Object
Dim dbs As Database

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.Properties("Sort On") = "whenCreated"

objCommand.CommandText = _
"SELECT Name,Title,PhysicalDeliveryOfficeName,WhenCreated,Mail FROM 'LDAP://OU=Standard Users,OU=Active Users,OU=All Users,DC=contoso,dc=local' WHERE objectCategory='user'"
Set objRecordSet = objCommand.Execute

objRecordSet.MoveFirst
Do Until objRecordSet.EOF
  dbs.Execute " INSERT INTO ADUsers" & "(Name,Title,Site,Created,Email) VALUES " & "(objRecordSet.Fields('Name').Value,objRecordSet.Fields('Title').Value,objRecordSet.Fields('physicalDeliveryOfficeName').Value,objRecordSet.Fields('whenCreated').Value,objRecordSet.Fields('Mail').Value);"
  dbs.Close
  Debug.Print objRecordSet.Fields("Name").Value; "," & objRecordSet.Fields("Title").Value; "," & objRecordSet.Fields("physicalDeliveryOfficeName").Value; "," & objRecordSet.Fields("whenCreated").Value; "," & objRecordSet.Fields("Mail").Value

objRecordSet.MoveNext

Loop

End Sub

双引号"所有内容都解释为字符串,而不是代码,字符串( objRecordSet.Fields("myFieldName").Value )必须在insert语句中引用。

dim strSQLInsert as String

strSQLInsert = "INSERT INTO ADUsers(Name,Title,Site,Created,Email) VALUES ('" & _ 
  objRecordSet.Fields("Name").Value & "','" & _
  objRecordSet.Fields("Title").Value & "','" & 
  objRecordSet.Fields("physicalDeliveryOfficeName").Value & "','" & _
  objRecordSet.Fields("whenCreated").Value & "','" & _
  objRecordSet.Fields("Mail").Value & "');"

Debug.Print strSQLInsert

dbs.Execute strSQLInsert

将您的sql语句存储在字符串中,然后可以使用Debug.Print进行检查。

考虑使用querydefs进行参数化查询以避免使用引号。 另外,请确保初始化数据库对象,这可能是您的主要问题: set dbs = CurrentDb

...
Dim strSQL As String
Set dbs = CurrentDb

strSQL = "PARAMETERS NameParm TEXT(255), TitleParam TEXT(255), SiteParam TEXT(255)," _
             & " CreatedParm Date, EmailParam TEXT(255);" _
             & " INSERT INTO ADUsers (Name, Title, Site, Created, Email)" _
             & " VALUES ([NameParm], [TitleParam], [SiteParam], [Created], [Email]);"

Do Until objRecordSet.EOF

   Set qdef = dbs.CreateQueryDef("", strSQL)

   qdef!NameParam = objRecordSet![Name]
   qdef!TitleParam = objRecordSet![Title]
   qdef!SiteParam = objRecordSet![PhysicalDeliveryOfficeName]
   qdef!CreatedParam = objRecordSet![WhenCreated]
   qdef!EmailParam = objRecordSet![Mail]

   qdef.Execute (dbfailOnError)
   Set qdef = Nothing

   objRecordSet.MoveNext
Loop

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM