안녕하세요. 저는 강민정이라고 하고 델파이를 다룬지 얼마 안되서 모르는 것이
너무 많습니다. 제발 도와주세요~
지금 짜고 있는 프로그램은 명함관리 프로그램인데 그 중에서 우편번호를 불러오는 프로시져에서 에러가 났습니다.
이 프로시져의 역할은 우편번호를 검색한 다음 OK버튼을 누르면 처음 우편번호를 검색했던 폼으로 돌아가 우편번호와 해당 주소를 입력하는 것입니다.
그런데 우편번호를 부르는 폼이 3개나 되서 어느 폼이 이 프로시져를 불렀는지
구별하기 위해서 flag를 두었고 각 폼에서 우편번호를 부를때 flag를 true를 시킨후 우편번호 폼에서 Ok를 누르면 어느 flag가 true인지 확인해서 해당 폼으로 자료를 넘기게 하고 싶었습니다.
그런데 실행을 시켜보면 멘처음에 있는 "frm_private.zipFalgHP와 ZipFlafCP"
를 사용했을때는 에러가 안나는데 나머지 부분에서는 Accedd Violation 에러가 납니다. 도대체 이유를 모르겠어요..
흑흑.. 델파이 왕초보라 모르는 것이 너무 많습니다. 제발 도와주세요..
코딩은 다음과 같습니다.
==========================================================================
procedure Tfrm_zip.btn_OKZClick(Sender: TObject);
begin
if frm_private.zipFlagHP = True then
begin
frm_private.add_hZipP.Text := DBEdt_PostNo.Text;
frm_Private.zipFlagHP := False;
btn_ExitZClick(sender);
frm_private.add_haddrP.text := DBEdt_Addr.Text;
end
else if frm_private.zipFlagCP = True then
begin
frm_private.add_cZipP.Text := DBEdt_PostNo.Text;
frm_Private.zipFlagcP := False;
btn_ExitZClick(sender);
frm_private.add_caddrP.text := DBEdt_Addr.Text;
end
else if frm_work.zipFlagCW = True then
begin
frm_work.add_cZipW.Text := DBEdt_PostNo.Text;
frm_work.zipFlagcW := False;
btn_ExitZClick(sender);
frm_work.add_caddrW.text := DBEdt_Addr.Text;
end
else if frm_work.zipFlagHW= True then
begin
frm_work.add_hZipW.Text := DBEdt_PostNo.Text;
frm_work.zipFlagHW := False;
btn_ExitZClick(sender);
frm_work.add_haddrW.text := DBEdt_Addr.Text;
end;
end;
혹시 우편번호폼을 불러들이는 다른 폼들에서 TTable 컴퍼넌트를 사용하고 있지는 않은지요..? 그리고 우편번호를 불러들이는 폼에서 사용하는 데이터 컨트롤이 TTable, TDBEdit, TDBGrid 등이 아닌지요..?
만약 TTable을 사용하여 작업을 하고 계신다면 각 폼이 테이블을 참조할때마다, 즉 테이블에서 값을 읽어오는 작업을 통해 데이터베이스의 커서를 이동시키는 작업을 수행하게 된다면 폼 이동시마다 TTable의 Open, Close, Reflesh 이벤트를 적절하게 사용하실 필요가 있습니다. TTable 컴퍼넌트는 여간 귀찮은 게 아니거든요. 그래서 Query 컴퍼넌트 사용을 권합니다. SQL을 따로 공부해야 하는 필요가 있지만, TTable 컴퍼넌트 보다는 훨씬 편하고 여러가지 다양한 작업도 수행할 수 있습니다.
아마, Form1에서 Table1을 사용하고, Table 검색을 통해 데이터를 읽었다면, Form2로 넘어가서 작업할때는 Table1을 Close, Open, Refresh 하셔야 할겁니다. 물론 Refresh만 하셔도 되지만, 더욱 정확성을 기하기 위해서 입니다.
찾아보시면 더욱 좋은 방법이 있을 겁니다. 저는 Table 컴퍼넌트를 사용해본지가 하도 오래되나서...죄송합니다.