2014-11-13 4 views
-1

1에서 테이블의 레코드 수로 이동하는 for 루프가 있습니다. 루프를 끝내고 기본적으로 클라이언트 이름의 첫 번째 단어가 이전 것과 동일한 내부 ID를 제공하기는하지만, 인덱스를 사용하여 레코드를 참조하는 방법을 잘 모르겠다면 기본적으로 말하고 싶습니다. mid 함수를 사용하여 비교하려는 이름의 일부를 추출합니다. 나는 오히려 Access에서 VBA에 새로운 것이므로이 주제에 대한 어떤 도움도 크게 감사 할 것입니다. 내가 지금까지 가지고있는 것을 풀었다.Access vba의 테이블을 반복하십시오.

Sub RevH() 
Dim dte As String, clientQry As String, db As Database, clientTable As Recordset 

Set db = CurrentDb 


dte = InputBox("What date was the Data Dump run?", "Please Input a date") 


clientQry = "SELECT DISTINCT t.[CLIENT ID], t.[CLIENT NAME] " & _ 
      "INTO Clients " & _ 
      "FROM FN_DataDump_ALL_" & dte & " as t WHERE " & _ 
      "((t.[CLIENT NAME] Not Like ""*Test*"") AND (t.[CLIENT NAME] Not Like ""*Demo*"") AND (t.[CLIENT NAME] Not Like ""*Client*"")AND (t.[CLIENT NAME] Not Like ""Tufts"") AND (t.[CLIENT NAME] Not Like ""SCAN"") AND (t.[CLIENT NAME] Not Like ""US Script"") AND (t.[CLIENT NAME] Not Like ""Care1st Health Plan"") AND (t.[CLIENT NAME] Not Like ""PBM View"") AND (t.[CLIENT NAME]Not Like ""ScriptGuideRx"") AND (t.[CLIENT NAME] Not Like ""Argus"") AND (t.[CLIENT NAME] Not Like ""Centene"") AND (t.[CLIENT NAME] Not Like ""MMIT-FN - FormularyEditor"") AND (t.[CLIENT NAME] Not Like ""CVS Caremark"") AND (t.[CLIENT NAME] Not Like ""Caterpiller"") AND (t.[CLIENT NAME] Not Like ""Horizon BCBS"") AND (t.[CLIENT NAME] Not Like ""Health Net"") AND (t.[CLIENT NAME] Not Like ""CMS"")) " & _ 
      "ORDER BY [CLIENT NAME]" 


If TableExists("Clients") Then 
    CurrentDb.TableDefs.Delete ("Clients") 
End If 

CurrentDb.Execute clientQry 


DoCmd.RunSQL "ALTER TABLE Clients ADD COLUMN [Internal_ID] DOUBLE;" 

Set clientTable = CurrentDb.OpenRecordset("Clients") 


For i = 1 To DCount("[CLIENT NAME]", "Clients") 



Next i 





End Sub 
+0

[user4095610] (http://stackoverflow.com/users/4095610/user4095610)? – HansUp

+0

아니요? 왜 물어볼 거니? – user4248690

+0

'clientQry'의 텍스트는 저에게 deja vu의 감각을주었습니다. – HansUp

답변

3

for 루프 대신 사용해보십시오.

Dim intID As Integer 
Dim sName As String 

intID = 0 
sName = vbNullstring 
If Not clientTable.EOF And Not clientTable.BOF Then 
    clientTable.MoveFirst 
    Do While Not clientTable.EOF 

    --apply your name comparison logic 
    If sName <> Left(clientTable("[Client Name]"),5) Then 
     sName = Left(clientTable("[Client Name]"),5) 
     intID = intID + 1 
    End If 
    clientTable.Edit 
    clientTable("[Internal_ID]") = intID 
    clientTable.Update 
    clientTable.MoveNext 
    Loop 
End If 
+0

내가 원하는 것을 거의하고있다. sName이 처음으로 초기화되는 대상은 무엇입니까? – user4248690

+0

sName 초기 값은 비어 있습니다. sName = vbNullstring을 설정하거나 그대로 둘 수 있습니다. – bodjo

+0

전체 문자열 대신 처음 5 글자 만 비교하려면 어떻게 수정해야합니까? 그것을위한'mid' 함수를 구현할 수 있을까요? – user4248690

관련 문제