2012-06-05 3 views
0

여기 내 문제가 있습니다. 나는 2 개의 테이블을 가지고있다 tvehicle와 tPMCL tVehicle 테이블은 우리 차량의 목록을 가지고있다. tPMCL은 예방적인 maint가있을 때 보유한다. 수행.ACCESS VBA 문자열과 다른 테이블의 문자열 비교

tvhhicle.VehicleTagnumber는 실제 플레이트 번호를 보유하고 있으며 tPMCL.Tag는 입력 한 시점부터 그 번호를 조회 한 색인 만 보유하고 있습니다. 태그 번호가 있으므로 데이터 비교를 통해 반복 할 때 그것은 다음과 같이 일치 할 수 있습니다 :

"XPE 269"의 행을 따라 무언가를 비교하고 있습니다. 그렇게 작동하지 않습니다.

아이디어가 있으십니까? 대답은 처음부터 조회를 수행하는 다른 방법 일 수있는 VBA 대답이 아닐 수도 있습니다. 그러나 나는 조회를 수행하고 실제로 플레이트 번호가 아닌 인덱스를 저장하는 다른 방법을 찾을 수 없습니다.

+0

인덱스의 출처는 어디입니까? 인덱스에서 플레이트를 어떻게 얻습니까? – Fionnuala

+0

tPMCL.Tag *는 실제로 인덱스 *입니까 아니면 외래 키입니까? –

+0

tMPCL은 조회 whan 데이터를 입력 할 때이 값을 사용합니다. – user1437797

답변

1

색인으로 생각하는 것은 사실 외래 키입니다. 이것은 좋은 일입니다. 즉, VehicalTagNumber가 바뀔 위치 (예 : 잘못된 입력)가 있으면 참조 테이블을 업데이트 할 필요가 없습니다.

tPMCL을 반복해야하고 해당 태그 번호가 필요한 경우 두 가지 중 하나를 수행 할 수 있습니다.

Dlookup을 사용하여 각 루프에서 가져올 수 있습니다. 예 :

Dim strTag As String 
strTag = DLookup("[VehicleTagnumber]", "tvhhicle","[Id] = 1") 

그러나 많은 수의 기록에서는 속도가 느려집니다.

대신 테이블을 직접 여는 대신 두 테이블을 조인하는 SQL 문에 레코드 세트를 기반으로하십시오.

Dim dbVehicle As Object 
Dim rstVehicle As Object 
Dim fldEnumerator As Object 
Dim fldColumns As Object 
Dim strSQL as String 

Set dbVehicle = CurrentDb 
Set rstVehicle = dbVehicle.OpenRecordset("tVehicle") 
Set fldColumns = rstVehicle.Fields 

strSQL = "SELECT * FROM tMPCL m INNER JOIN tVehicle v ON m.Tag = v.ID" 

Set rsttPMCL = dbVehicle.OpenRecordset(strSQL) 
+0

여기 나를 완전히 잃어 버렸습니다. VBA를 가진 나의 skils는 기껏해야 meeger이고, 나는 당신이 배치 한 무슨과의 논리를 따라갈 수 없다. 나는 내 데이터베이스가 있다면 그 사실을 알아 내지 못한다. 우리는 한 번에 최대 5 ~ 6 대의 차량을 갖게 될 것이기 때문입니다. 이 프로그램의 수명 내내 내 데이터베이스는 2 개의 테이블에 데이터를 복제하는 경우에도 15 MB 중 10에 도달 할 수 있습니다. – user1437797

+0

여기 내 코드를 통해 내가하고있는 일을 볼 수 있습니다. – user1437797

+0

'Dim dbVehicle As Object Dim rstVehicle As Object Dim fldEnumerator As Object Dim fldColumns 오브젝트 세트 dbVehicle = CurrentDb set rstVehicle = dbVehicle.OpenRecordset ("tVehicle") fldColumns = rstVehicle.Fields를 설정하십시오. rsttPMCL = dbVehicle을 설정하십시오.OpenRecordset ("tPMCL")' – user1437797