2013-01-11 5 views
1

그냥 VBA를 사용하기 시작했으며 Employees이라는 설정 한 더미 테이블의 모든 데이터에 액세스하려고합니다. 필드의 모든 레코드에 액세스

는 코드 임하려고 :

Sub getRecords() 

Dim dbs As Database 
Dim rst As Recordset 
Dim sql As String 

Set dbs = CurrentDb 
sql = "SELECT * FROM Employees" 
Set rst = dbs.OpenRecordset(sql) 

End Sub 

여기에 궁극적 인 목적은 화면에 내용을 인쇄하는 것입니다 - 이것은 다른 구성 요소로 설정 한 기록을 깨는 포함까요? 그렇다면 어떤 구성 요소가 일반적인 레코드 세트를 구성 할 수 있습니까? 다음과 같이

테이블 형식은 다음과 같습니다

Emp_Id - Number 
Emp_Name - Text 
Emp_Email - Text 

답변

3

당신은 필드를 통해 반복 할 수

Sub getRecords() 

Dim dbs As Database 
Dim rst As Recordset 
Dim sql As String 

Set dbs = CurrentDb 
sql = "SELECT * FROM Employees" 
Set rst = dbs.OpenRecordset(sql) 

Do while not rst.eof 
    For each fld in rst.Fields 
     Debug.Print fld, fld.name 
    Next 
    rst.MoveNext 

    ''You can also edit or add 
    rst.Edit 
    rst!Emp_Name = "Something" 
    rst.UpDate 
Loop 

End Sub 

나는 같은 SQL로도 등록되는 변수의 이름을 호출하지 않도록합니다. 당신은 기록을 통해 반복하여 시작해야합니다

db.Execute "UPDATE aTable SET aField = 'Some text'", dbFailOnError 
+0

멋진 답변 - 몇 가지 사항 : 자바 배경에서 나오면 \ n을 사용하여 텍스트 줄을 분리 할 수 ​​있습니다. VBA에서도 이와 비슷한 옵션이 있습니까? – Katana24

+1

vbCrLf, vbCr 및 vbLf, chr (13) 및 chr (10)을 개별적으로 또는 함께 사용하고 vbNewLine을 사용할 수 있습니다. Debug.Print는 직접 실행 창 (ctrl + G 창)에 한 줄을 인쇄합니다. 항상 MS Access를 생각하는 것보다 훨씬 쉽습니다 기억하십시오 : – Fionnuala

0

: 업데이트

, 당신은 일반적으로 실행 쿼리를 사용하여 데이터베이스 오브젝트를의 againt 실행하는 것이 가장 적합합니다. 시도하십시오 :

Do While Not rst.EOF And Not rst.BOF 
... 
Loop 

이렇게하십시오. BOF와 EOF는 각각 레코드 세트의 시작과 끝과 관련이 있습니다. 테이블에 데이터가 없으면 전체 루프를 건너 뜁니다. 의

Do While Not rst.EOF And Not rst.BOF 
    Debug.Print rst.Fields("myfield") 
    Debug.Print rst.Fields(0) 
Loop 

: 당신이 선택 목록에서 필드의 위치에 관련하는 인덱스를 사용하거나 개별적으로 필드를 볼 수 있습니다 거기에서

, 또는과 같이 필드 이름을 참조하여 출발점. 인텔리 센스가이 사실을 도와야합니다.

PS : 항상 메모리를 회수 할 후에 당신의 recordset 객체를 닫 기억 : rst.Close()를 설정 RST = 아무것도

종류와 관련, 폴.

+0

레코드 집합을 닫기위한 +1 – Katana24

+0

MoveNext를 추가하는 것을 잊었습니다! 너! – Paul

+0

하지만 그 줄이 작동하지 않는다고 말할 것입니다 - 런타임 오류 91이 발생합니다. MoveNext 객체는 어디로 이동합니까? – Katana24

관련 문제