전봉수 님이 쓰신 글 :
: 아폴론님 자세한 답번 너무 고맙습니다.
: 저도 처음에는 IBQUery,IBTransaction,IBDatabase,DataSource를 사용하였습니다. 그런데요 IBDatabase
: 를 마우스로 더블클릭해서 셋팅할때 로컬로 하니까 않되서 Database에 IP와 FDB경로를 입력하여야 하기때문
: 에 배포 할곳마다 프로그램을 수정하여야 하는 문제가 있는것 같았습니다. Firebird_ODBC를 사용하면
: Datamodule Qyery 2개언저 놓고 제공된 Utile만 프로그램에 연결시키면 DBgrid를 사용하지 않는한 DB컴포
: 넌트를 폼에 더이상 언져놓을 필요가 없거든요? Win 7이 앞으로 많이 보급이 될텐데 방법을 다시 바꿔야 되는데
: 도무지 감이 잡히지 않습니다. 좀더 배울수 있게 이메일로 약간의 소스라도 공개 해 줄수 없나요?
: 제 이메일 주소는 jeunbskr@naver.com 입니다. 부탁드립니다.
"배포 할곳마다 프로그램을 수정하여야 하는 문제" 는 없습니다.
User마다 경로가 다르다면 경로를 셋팅 하게끔 해주어야 하지요..
프로그램을 각 회사에 배포했다면 각 회사마다 물론 경로가 다르겠지요..
그럼 데이터베이스 경로를 프로그램이 찾아 오도록 설계가 되어야합니다.
처음에 데이터베이스를 닫고.. 로그인 시란든가?. 시점에
데이터베이스 경로를 변수로 가져 오도록합니다.
이 경로값은 레지스트리를 읽어서 가져오게 합니다.
레지스트리에 값이 없다면(최초 실행시는 없겠죠) 팝업을 띄워서 경로를 등록하게 합니다.
아래는 레지스트리를읽어서 DB경로를 가져 옵니다.
FDrive := '';
ADDrive := '';
Reg:= TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
Reg.OpenKey('SOFTWARE\Program_Path\',false);
if Reg.HasSubKeys then begin
end else
begin
C_dr := Reg.ReadString('Kubn');
F_Dr := Reg.ReadString('Path');
end;
finally
Reg.Free;
end;
try
if C_dr = 'S' then begin //고정IP
TR_path := F_dr+':C';
FDrive := F_dr+':C:\DataBase\JDATABASE.FDB'; //DB경로
Zipdrive := F_dr+':C:\DataBase\ZIPCODE.FDB'; //우편번호 디비 경로
end else
if C_dr = 'N' then begin //컴퓨터이름
TR_path := F_dr;
FDrive := '\\'+F_dr+'\C:\DataBase\JDATABASE.FDB'; //DB경로
Zipdrive:= '\\'+F_dr+'\C:\DataBase\ZIPCODE.FDB'; //우편번호 디비 경로
end else
if C_dr = 'C' then begin //클라이언트
TR_PATH := 'C';
FDrive := 'C:\DataBase\JDATABASE.FDB';
Zipdrive := 'C:\DataBase\ZIPCODE.FDB'; //우편번호 디비 경로
end else
begin
showmessage('DataBase가 설치된 컴퓨터의 설정을 하셔야 합니다. ');
//설정값이 없으므로 경로를설정 할 수 있는 창을 띄운다.
if Tr001F = nil then
Tr001F := TTr001F.Create(Self);
if Tr001F.WindowState = wsMinimized then
Tr001F.WindowState := wsNormal else
Tr001F.show;
end;
except
showmessage('Registry의 DataBase 경로 확인 불가. 관리자에게 문의 바랍니다. ');
end;
아래는 디비를 오픈합니다.
if Datamd.DBApollon.Connected = False then begin
if WindowsVersionStr = 'Windows Vista' then begin
if Length(TRIM(FDrive)) <= 35 then
Datamd.DBApollon.DatabaseName := ':'+FDrive else
Datamd.DBApollon.DatabaseName := ':'+FDrive
end else
begin
Datamd.DBApollon.DatabaseName := FDrive;
end;
Datamd.DBApollon.Params.Add('user_name=SYSDBA');
Datamd.DBApollon.Params.Add('password=masterkey');
Datamd.DBApollon.Connected := True;
end;
정답은 아닙니다만..뭐 이런 방식으로 하고 있습니다..
|