Q&A

  • access violation 에러 좀 봐주세요~
안녕하세요. 주소 검색하는 부분에서 에러가 났습니다. ㅡㅡ;

폼 1에서 읍/면/동을 입력 후 검색 버튼 누르면 폼 2에서  like 검색으로 해당 주소들이 그리드에 나오고,
해당 주소를 선택하면 폼 1에 주소가 입력이 됩니다.

이렇게 한번은 성공했는데요..
문제는 폼1을 닫지 않은 상태에서 다시 읍/면/동을 검색하려고 하면
'access violation at address 00405999 in module 'P_Custom.exe'. Read of address 00000000 '
에러가 납니다.


DB는 paradox입니다.  

소스를 보자면,,

//이 부분은 폼 1
procedure TForm1.bbt_sel_dongClick(Sender: TObject);  //검색
begin
    if (ed_dong.text = '') then
    begin
        showmessage('검색하려는 읍/면/동을 입력하세요!');
        exit;
    end;        
    if not(assigned(Form2)) then
        Form2 := TForm2Create(nil);
    Form2.Show;
    
end;
  
// 이 부분은 폼 2에서입니다.
procedure TForm2.FormShow(Sender: TObject);
begin
    Query2.Close;
    Query2.SQL.Text :=
           'select zipcode, sido, gugun, dong, ri, bunji from zipcode where dong like :dong';
    Query2.ParamByName('dong').AsString := Form1.ed_dong.Text + '%' ;
    Query2.Open;
    if( Query2.recordcount = 0 ) then
    begin
        showmessage('해당하는 읍/면/동이 없습니다.');
        Close();    
        Form2.Free;
    end;
end;

procedure TForm2.DBGrid2DblClick(Sender: TObject);
var
    address: String;
begin
    address := DBGrid2.Fields[1].AsString + ' ' +
                      DBGrid2.Fields[2].AsString + ' ' +
                      DBGrid2.Fields[3].AsString + ' ' +
                      DBGrid2.Fields[4].AsString;
    Form1.ed_zipcode.Text := Query2.FieldByName('zipcode').AsString;
    Form1.ed_juso1.Text   := address;
    Form1.ed_dong.Text := '';
    Close();
    Form2.Free;
end;

어디가 잘못됐는지 좀 봐주세요..  .
그리고 폼 1은 auto-create form이고 폼 2는 available form으로 설정되있습니다.
주소 가져오는 부분에서 더 좋은 방법 있으면 좀 알려주시면 감사하겠습니다.~
도와주세용~~
2  COMMENTS
  • Profile
    김병윤 2008.03.25 21:21


    음...Form2를 닫으실때...

    Form2.Free; 요놈뒤에
    Form2 := Nil; <-- 요놈을 넣어주세요...

    그럼 아마도 HAPPY해지시지 않을까 싶네요..^^
  • Profile
    왕초보 2008.03.25 21:47

    감사합니다. 알려주신데로 했더니 access violation 에러 안나고 제가 원하는데로 됩니다.
    꾸벅^^