|
제가 설명이 좀 부족했던것 같습니다.
저는 DB를 Access의 mdb를 사용하였습니다.
그리고 이를 이용하기위해 ADO를 이용하였는데.
TADOConnection 과 TADOTable를 사용하였습니다.
두개의 클래스에 대한 객체는 컴포넌트를 이용하지 않고
메인 폼에서 두개의 클래스에 대해 객체를 생성을 하고.
이를 버튼 이벤트시 사용을 했습니다,
메인 폼이 닫힐떄 두개의 객체를 소멸 시켰습니다.
사실 Table->Connection 은 TADOTable->Connection입니다.
나머지 ADOTable->TableName 부분이나 ADOTable->Open() 및 ADOTable->Close()는 저번에
제가 질문을 드렸던 부분과 동일합니다..
저의 설명이 부족하여... 죄송합니다..
다시한번 제가 도움을 받을 수 있다면,,, 감사합니다
강요찬 님이 쓰신 글 :
: 나그네님의 글을 읽고 말 그대로라면 참 재밌는 현상일 것 같아 시험을 해 보았습니다.
: 그런데.. 제가 실험한 결과로는 Table1->Close(); 라인에 그 어떤 오류도 나타나지 않더군요.
: 물론 모든 데이터파일은 모두 비어 있는 파일을 사용했습니다.("a.dbf","b.dbf","c.dbf")
:
: DBGrid->DataSource1->Table1 로 연결해서, 연결된 테이블이 바뀜에 따라 그리드 타이틀이 바뀌는 것까지 확인했습니다.
:
: 오류가 있다면, 어떤 다른 곳에 오류가 있는 듯 싶습니다.
:
: 아래 코드와 같이 <BitBtn1> 버튼을 계속 눌러 보았습니다.
:
: void __fastcall TFSQLTest::BitBtn1Click(TObject *Sender)
: {
: AnsiString table[]={"a.dbf","b.dbf","c.dbf"};
: static int n=0;
:
: Table1->Close();
: Table1->TableName=table[n%3];
: Table1->Open();
: n++;
: }
:
:
: 그런데..
: 나그네님의 글 중
:
: myTable->Connection = myConnection1;
:
: 이 라인은 무엇을 뜻하는지 모르겠습니다.
: TTable 옵젝트 클래스에 Connection 이라는 Property 는 못 보았는데요...?
:
:
: =======================================================================
:
: 나그네 님이 쓰신 글 :
: : 저는 TTable을 쓸때면 이렇게 씁니다.
: : 전역에 TTable객체를 선언하구,
: : 폼의 Create()에서 그 객체를 생성합니다.
: : void __fastcall TForm1::FormCreate(TObject *Sender)
: : {
: : myTable = new TTable(this);
: : myTable->Connection = myConnection1;
: : }
: :
: : 그리고 이 테이블 객체를 사용할때는 이렇게 사용을 합니다.
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: : myTable->Close();
: : myTable->TableName = tblMyTable;
: : myTable->Open();
: : ..............
: : ..............
: : }
: :
: :
: : 이렇게 해서 사용을 하면 대부분 문제없이 잘 돌아 갑니다.
: : 그런데... 위에서 버튼을 여러번 누를경우 테이블을 먼저 닫아주는 부분에서
: : 에러가 가끔 나긴하거든요.
: :
: : 에러가 나는 이유를대충 보니깐.. Close()하려는 테이블에 내용이 전혀 없을경우 에러가 나더라구요.
: :
: : 예를 들어보면
: :
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: : switch(nCase){
: : case 1:
: : myTable->Close();
: : myTable->TableName = tblMyTable1;
: : myTable->Open();
: : return;
: : case 2:
: : myTable->Close();
: : myTable->TableName = tblMyTable2;
: : myTable->Open();
: : return;
: :
: : case 3:
: : myTable->Close();
: : myTable->TableName = tblMyTable3;
: : myTable->Open();
: : return;
: :
: : default:
: : return;
: : }
: : }
: :
: : 이런 경우에 case가 1에서 2로 바뀔때 tblMyTable1의 내용이 있다면
: : myTable->Close()도 잘 하고 myTable->Open()도 잘하는데..
: : case 2: 에서 만약 tblMyTable2의 레토드 갯수가 하나도 없을 경우....
: : 다시 case 3으로 넘어 간다면..
: : tblMyTable->Close()에서 에러가 나옵니다..
: :
: :
: : 사실,, 모든 테이블은 그 내용이 들어있는건 기본 가정입니다.
: : 하지만..이런 에러를 잡지 않은채 코딩을 한다는게 좀 걸려서요..
: :
: :
: : 제가 지금 겪는 이런 에러에 대해 잘 대처할 수 있는 방법을 없을까요??
: :
: : 도움을 바랍니다.....
: :
|