2016-09-14 3 views
3

앞에서 설명한 도움의 손길 덕분에 레코드 세트의 문자열 사이에서 단어 빈도를 계산하는 기능적 접근 방법이 있습니다. 다음 코드는 원하는 결과를 생성합니다.VBA에 액세스 : Scripting.Dictionary - 테이블로 덤프 하시겠습니까?

마지막 단계는 사전 구조를 currentDB의 Access 테이블로 덤프하는 것입니다. 내가 아래에 주석으로 각 키를 통해 단계 수 있으며 SQL을 통해 테이블에 추가 -하지만 그것은 매우 천천히 승/24K 조건입니다.

은 >> 솔루션 승/업데이트] < <

Private Sub Command0_Click() 

Dim counts As New Scripting.Dictionary 
Dim word As Variant 
Dim desc As String 

Dim rs1 As DAO.Recordset 
Dim rs2 As DAO.Recordset '<< solution 
Dim strSQL As String 
Dim db As Database 

Set db = CurrentDb 

strSQL = "SELECT DISTINCT Items.Description FROM Items ;" 

Set rs1 = db.OpenRecordset(strSQL, dbOpenDynaset) 

Do While Not rs1.EOF 
    For Each word In Split(rs1!Description, " ") 
     If Not counts.Exists(word) Then 
      counts.Add word, 1 
     Else 
      counts.Item(word) = counts.Item(word) + 1 
     End If 
    Next 
    rs1.MoveNext 
Loop 

'>> .AddNew Solution inserted as suggested below << 

rs2 = db.OpenRecordset("Freq", dbOpenTable) 

For Each word In counts.Keys 
    With rs2 
     .AddNew    ' Add new record 
     .Fields!Term = word 
     .Fields!Freq = counts(word) 
     .Update 
     .Bookmark = .LastModified 
    End With 
Next 

rs2.Close 

'>> End Solution << 

Set rs1 = Nothing 
Set rs2 = Nothing 

MsgBox "Done" 

End Sub 

질문 :

  1. 내가 키 하나씩 통해 스테핑 대, 대량의 테이블에 사전 덤프 수 있습니까?

이론적 설명 : 테이블 구조를 사용하여 다운 스트림 프레젠테이션 & 조작을 수행하는 것이 더 쉬워졌습니다.

감사합니다.

+1

정말 반복하지 않고 할 수있는 방법이 없다

이 답변을 참조하십시오. .NET에서도 Dictionary와 가장 가까운 것은 키/값 쌍의 배열입니다. DAO 연결은 INSERT 루프로 좋은 성능을 제공해야합니다. – Comintern

+0

사전에 먼저 쓰는 대신 테이블에 직접 추가하는 것이 어떻습니까? 그런 다음 데이터를 개수로 그룹화 할 수 있습니다. –

답변

1

행 삽입 방법이 코드에 표시되지 않습니다. 각 행에 별도의 INSERT INTO (...) VALUES (...) 문을 사용한다고 가정합니다.

루프에서 여러 삽입의 경우 SQL INSERT 문을 사용하지 마십시오. 대신 DAO.Recordset.AddNew과 함께 사용하면 훨씬 빨라집니다. 예는 https://stackoverflow.com/a/33025620/3820271

그리고 여기 : https://stackoverflow.com/a/36842264/3820271

+1

Andre, 17K <1 초 미만으로 제안한대로 "AddNew"삽입합니다. 기대하지 않았다! 감사합니다 (위의 코드를 ".AddNew"조각을 반영하도록 수정했습니다). –

+0

@ MarkPelletier :'.Bookmark = .LastModified'를 제거하여 더 많은 ms를 면도 할 수 있습니다. 새로 추가 된 레코드에서 데이터를 읽는 경우에만 필요합니다. Autonumber Primary 키. – Andre

관련 문제