Q&A

  • QUERY 의 nil 이 생길 조건은?
안녕하세요? 목동입니다. 또 이상한 질문을 들고 나왔습니다..

날씨도 썰렁해 지는데 이상한 질문만 드려서 미리 죄송스럽다는 말씀을 드려야 겠네요.. ^^;;

제 사용환경은 sql 6.5 (-_-;;), Delphi4, 입니다.



MDI 폼에서 문제 입니다.

MDI에서 각 DB의 connection 을 form create 시 걸어 놓고

하부 폼에서 Query 컴포넌트 속성을 가지는 'Dset' 이라는 변수를 선언한후 이 Dset에 하부폼의 Query 를 대입합니다. 그 후 이 폼의 Dset 에 값을 MDI 의 Main 폼에서 check 를 하여 DB Connectin 여부를 알아 낼때의 문제 입니다..



간추린 Source 입니다.

------------------------------ MDI 의 하부폼 Source

//// 폼 이름 abc

procedure A.FUNC_CHK(var KEY: integer);

begin

Dset := query1;

CASE KEY of

1 : begin // key 값은 1을 받습니다

SELECT_RTN; // qyury 값을 Param 값에 따라 변경하는 부분

// ==> Debuging 결과 이곳까지는 값이 정상적으로 이동됩니다.

if not Mainf.DBConnection_Check then exit; // MDI 의 main 폼 이름이 Mainf 입니다

MOVE_INI;// DBGrid 에 값을 옮겨 주는 부분

end;

// source 생략

------------------------------MDI 의 하부폼 Source 끝

위 부분에서 "if not Mainf.DBConnection_Check then exit;"로 Main 폼의 DBConnection_Check 함수로 핸들이 넘어 갑니다



------------------------------MDI 의 Main Form source

function TMainf.DBConnection_Check : boolean;

var i : integer;

paramItem : string;

begin

result := false;

if Dset = nil then //// <======= 이 부분으로 진행 됩니다

begin

application.messagebox('선택된 database가 없습니다.','DATABASE ERROR',

mb_ok + mb_iconwarning);

exit;

end;

with Dset do

begin

close;

for I := 0 to ParamCount - 1 do

begin

----------

----------

end

/////// Source 생략

------------------------------MDI 의 Main Form source 끝

위에서 'Dset = nil' 의 조건으로 Error 메세지를 뿌려 준후 프로그램이 종료 됩니다.. 참 단순한 문제 인데.. 잘 풀리지가 않네요.

위 문장에서 'Dset = nil' 의 문장 뜻은 무엇인가요? 위의 DBConnection_Check 함수는 다른 MDIChildForm 에서도 사용되고 있고 다른 프로그램은 정상적으로 진행 됩니다. 처음에는 abc 라는 폼에서 query 와 연관된 Data base 가 없어서 그런가 하고 Main 폼을 찾아 보니 그쪽에서 이미 abc 에서 사용하는 Database 를 Conntion 하고 있습니다.

즉 MDI Main 폼에서

if Database1.Connected then Database1.Connected := false;

Database1.Params.LoadFromFile('abc.log');

Database1.Connected := True;

의 DB Connect 를 사용하고 있고 같은 DB 를 사용하는 다른 MDIChild 는 잘 연결이 되고 있는데 위에서 말씀드린 폼만 연결이 안된다고 나오네요.. 생각만큼 쉽지가 않다군요 -_-;;;



질문을 요약하면 'Dset=nil'이라는 뜻이 정확히 무엇인가요? 게시판에서 검색을 해 보아도 제 경우와 같은 답변은 안 나온듯 해서 질문드립니다..(제가 이해력이 좀 부족해서.. 긁적.. 긁적.. ^^)

두번째로 MDI Child(aaa) 폼에서 Dset 의 값을 미리 확인해 볼수 있는 방법이 있을까요? 무식하게 showmessage(dset) 하니까 당연히 안 나오더군요... -_-;;

세번째 Query 형을 가지는 Dset 에서 Dset 은 Query 의 모든 속성을 가지나요? 즉, 내부의 sql 문장이나 property 의 database 명등을 모두 동일하게 가지나요?



질문 드린 내용이 상당히 길어 졌는데.. 제가 잘 말씀 드린건지 모르겠네요.. 초보 델파이어의 슬픔 이랍니다..

추운 겨울 건강하세요..





1  COMMENTS
  • Profile
    kuma 2001.12.12 02:04
    음 nil은 c로는 NULL을 가르키는 거거든요...

    쉽게 주소를 가르키고 있나 가르키지 않느냐의 문제지요...

    음 답변이