산넘어 산이라고...하나 해결하면 다른 문제가 생기네요..
이것때문에 오늘 하루종일 보냈습니다..
우선 정확한 에러 위치를 찾는데 반나절걸렸구요...해결책 찾다가 결국
도움을 청하게 되었습니다..
고수님들 함 봐주시기 바랍니다..
현상은 두개의 테이블을 비교해서 나온 결과값들을 프린트 해주는것인데요..
잘 되다가..특정 레코드 위치에서 invalid Parameter에러가 발생 합니다.
몇번이고 위치를 확인했습니다...
도통 원인을 모르겠습니다..
Dbase고 string 속성 입니다..
값은 1628인데...에러가 발생을 합니다....
도무지 모르겠습니다..에러의 정확한 위치를 찾는것도 반 해결인데..
나머지 반은 ㅜ.ㅜ
총 레코드의 갯수는 약 86개 정도 되구요...
1628은 한 79번째 정도 있습니다..고로 79째 까지는 에러 없이 잘 됩니다..
모두 레코드들은 잘 들어가 있구요 물론 저놈과 비슷한 4자릿수도 있습니다.
소스 올리겠습니다.
qry.SQL.Clear;
qry.Close;
qry.DatabaseName := 'MyNewAlias4';
qry.SQL.Add('select DISTINCT pmi_mesh from ' + Edit1.Text);
qry.Active := true;
qry.Open;
for j := 0 to qry.RecordCount -1 do
begin
FileName := '';
FileName := Edit1.text + '_' +qry.FieldValues['pmi_mesh'];
//ShowMessage(FileName);
memo1.Lines.Append(qry.FieldValues['pmi_mesh'] +'신규비교시작');
qryTemp.SQL.Clear;
qryTemp.close;
qryTemp.DatabaseName:= 'MyNewAlias2';
qryTemp.SQL.Add('select pmi_mesh, st_nd_id, ed_nd_id, tlinkidp1, tlinkidn1, ');
qryTemp.SQL.Add('st_dir, ed_dir, road_cate, link_cate, link_facil, road_no, ');
qryTemp.SQL.Add('width, oneway, lane, speedlh, road_name, regioncd, tollLink');
qryTemp.SQL.Add('from ' + trim(Edit2.Text));
qryTemp.SQL.Add('where pmi_mesh = ''' + qry.FieldByName('pmi_mesh').AsString + ''' ');
qryTemp.open;
DataSource1.DataSet := qryTemp;
DBGrid1.DataSource:= DataSource1;
//구테이블 루프
for i := 0 to qryTemp.RecordCount -1 do
begin
q.close;
q.sql.clear;
q.DatabaseName:= 'MyNewAlias';
q.SQL.Add (' select pmi_mesh, st_nd_id, ed_nd_id, tlinkidp1, tlinkidn1, st_dir, ed_dir, ');
q.SQL.Add (' road_cate, link_cate, link_facil, road_no, width, oneway, lane, speedlh, road_name, ');
q.SQL.Add (' regioncd, tollLink ');
q.SQL.Add (' from ' + edit1.Text);
//q.SQL.Add (' where pmi_mesh = ''' + qryTemp.FieldByName('pmi_mesh').AsString +''' ');
q.SQL.Add (' where st_nd_id = ''' + qryTemp.FieldByName('st_nd_id').AsString +''' ');
q.SQL.Add (' and ed_nd_id = ''' + qryTemp.FieldByName('ed_nd_id').AsString +''' ');
q.Active := true;
q.open;
if q.eof then //===없다면 (신규)
begin
Query2 := TQuery.Create( Self );
Query3 := TQuery.Create( Self );
Query2.Close;
Query2.SQL.Clear;
Query2.DatabaseName := 'MyNewAlias4';
Query2.SQL.Add('select st_nd_id from '+ Edit1.Text);
Query2.SQL.Add('where st_nd_id = ''' + qryTemp.FieldByName('st_nd_id').AsString + ''' ');
Query2.Open;
Query2.FetchAll;
Query3.Close;
Query3.SQL.Clear;
Query3.DatabaseName := 'MyNewAlias4';
Query3.SQL.Add('select ed_nd_id from '+ Edit1.Text);
Query3.SQL.Add('where ed_nd_id = ''' + qryTemp.FieldByName('ed_nd_id').AsString + ''' ');
여기에 값은 들어갑니다.
Query3.Open;//==========>에러 뜨는 부분 입니다..
Query3.FetchAll;
if (Query2.RecordCount > 0) and (Query3.RecordCount > 0) then
begin
mmTextFile1.Lines.Append(qryTemp.FieldByName('pmi_mesh').AsString +' - ' +qryTemp.FieldByName('st_nd_id').AsString + ' ' + qryTemp.FieldByName('ed_nd_id').AsString + ',' + '병합 link' );
end
else if (Query2.RecordCount > 0) or (Query3.RecordCount > 0) then
begin
mmTextFile1.Lines.Append(qryTemp.FieldByName('pmi_mesh').AsString +' - ' +qryTemp.FieldByName('st_nd_id').AsString + ' ' + qryTemp.FieldByName('ed_nd_id').AsString + ',' + '분할 link' );
end
else
begin
mmTextFile1.Lines.Append(qryTemp.FieldByName('pmi_mesh').AsString +' - ' +qryTemp.FieldByName('st_nd_id').AsString + ' ' + qryTemp.FieldByName('ed_nd_id').AsString + ',' + '신규 link' );
end;
end;
qryTemp.next;
end;
memo1.Lines.Append(qry.FieldValues['pmi_mesh'] +'신규비교완료');
qry.Next;
end;
찾아 봤는데 쉽게 찾아지질 않네요
Query3.Close;
Query3.SQL.Clear;
Query3.DatabaseName := 'MyNewAlias4';
Query3.SQL.Add('select ed_nd_id from '+ Edit1.Text);
Query3.SQL.Add('where ed_nd_id = :sText ')
ParamByName('sText').AsString :=
qryTemp.FieldByName('ed_nd_id').AsString;
위와 같이 코딩을 다른 방향으로 해보심이 어떨지