2016-06-16 3 views
0

Access에서 사용자 및 기타 필드를 나열하도록 Active Directory를 쿼리하고 있습니다. 쿼리 된 결과를 기존 테이블에 추가 할 수 있습니까? 현재 INSERT INTO 사용하려고하지만 내 Object 변수가 설정되지 않았거나 변수를 차단하는 데 문제가 있습니다.Access에서 테이블에 쿼리 된 레코드 집합 추가

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 

답변

0

모든 내부 "이 문자열이 아닌 같은 코드 문자열 (objRecordSet.Fields("myFieldName").Value의 값) 삽입 문에서 인용 할 필요가로 해석됩니다 쌍 따옴표.

문자열에서 SQL 문
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 

스토어, 당신은 Debug.Print으로 확인할 수 있습니다.

0

따옴표가 필요하지 않도록 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