고민하다가 올립니다.
A, B 2개의 테이블이 있습니다.
A필드와 B필드에서 같은 조건을 따져
구분을 짓고 싶은데 중복되는 값에 대한 처리 문제입니다.
A와 B의 테이블에서 동명, 본번, 부번을 검색해서 같은 값이 있으면
A테이블의 NO1의 데이타값을 B테이블의 NO2라는 필드에 업데이트 시키는 내용입니다.
근데 아래와 같은 방법으로 하니깐 중복되는 데이타는 그냥 넘겨버리더군요
예를 들자면
"가동 100-1번지"라는 값을 가진 필드가 A에는 한개뿐이지만 B에는 1개이상이 될 수 가 있더군요.
아래와 같은 방법으로 쿼리를 실행하면 B테이블에서 같은 값이 몇개가 되더라도 한 필드에만 업데이트가 됩니다.
어떤 방법으로 접근을 해야할까요? 조언 부탁드립니다.
DB는 ACCESS입니다.
소스일부내용입니다.
try
database1.StartTransaction;
with query1 do begin
Close;
SQL.Clear;
SQL.Add(' select * from A ');
Open;
while not EOF do begin
with query2 do begin
Close;
SQL.Clear;
SQL.Add(' select * from B ');
SQL.Add(' where ');
SQL.Add(' 동명=:동명 ');
SQL.Add(' and 본번=:본번 ');
SQL.Add(' and 부번=:부번 ');
Prepare;
ParamByName('동명').AsString := Query1.FieldByName('동명').ASString;
ParamByName('본번').AsString := Query1.FieldByName('본번').ASString;
ParamByName('부번').AsString := Query1.FieldByName('부번').ASString;
Open;
with Query3 do begin
Close;
SQL.Clear;
SQL.Add(' Update B ');
SQL.Add(' set ');
SQL.Add(' NO2=:NO2 ');
SQL.Add(' where ');
SQL.Add(' ID=:ID ');
Prepare;
ParamByName('NO2').AsString := Query1.FieldByName('NO1').ASString;
ParamByName('ID').AsString := Query2.FieldByName('ID').ASString;
ExecSQL;
end;
end;
Next;
end;
end;
database1.Commit;
Except on Exception do
database1.Rollback;
end;
ShowMessage('Completed');
end;