안녕하세요? 목동입니다. 또 이상한 질문을 들고 나왔습니다..
날씨도 썰렁해 지는데 이상한 질문만 드려서 미리 죄송스럽다는 말씀을 드려야 겠네요.. ^^;;
제 사용환경은 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 명등을 모두 동일하게 가지나요?
질문 드린 내용이 상당히 길어 졌는데.. 제가 잘 말씀 드린건지 모르겠네요.. 초보 델파이어의 슬픔 이랍니다..
추운 겨울 건강하세요..
쉽게 주소를 가르키고 있나 가르키지 않느냐의 문제지요...
음 답변이