안녕하세요! 급하게 질문 드립니다.
BDE를 이용하여 SQL Server에 연결 되어지는 프로그램을 만들었습니다.
SQL Server는 따로 있고 제컴에 SQL클라이언트 를 깔아서 SQLServer클라이언트네트위크유틸리티에서
네트위크 라이브러리 및 서버별칭을 에 세팅후 연결해 왔습니다.
그런데 SQL Server라이센스 때문에 SQLServer클라이언트를 못깔것 같아요...
그래서 질문 드립니다.
SQLServer클라이언트를 설치 하지 않고 바로 BDE에서 SQL Server로 연결 하려면 어떻게 하면되나요?
SQLServer클라이언트네트위크유틸리티 설정 없이 실행 했을때 Cannot load an IDAPI service library.라는 에러가 나네요.!
아래는 그때 만들었던 셋업프로그램의 일부입니다.
<!--CodeS-->
unit UMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TCopyForm = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Memo1: TMemo;
RadioGroup1: TRadioGroup;
RadioGroup2: TRadioGroup;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
CopyForm: TCopyForm;
OSPath:string;
implementation
uses IdGlobal,Registry;
{$R *.dfm}
procedure TCopyForm.BitBtn1Click(Sender: TObject);
var
ProgramPath:string;
function CheckDestPath():string;
const
destPath:array [0..3]of string=('C:\Program Files\','Common Files\','Borland Shared\','BDE\');
var
cnt:byte;
begin
memo1.lines.Add('패스를 체크합니다...');
result:='';
for cnt:=0 to 3 do begin
result:=result+destPath[cnt];
if not DirectoryExists(result) then
if not CreateDir(result) then
raise Exception.Create('Cannot create '+result);
end;
memo1.lines.Add(' Check good...');
end;
procedure CheckReg(dest_path:string);
var
Reg: TRegistry;
begin
memo1.lines.Add('레지스트리를 체크합니다...');
Reg:=TRegistry.Create;
with reg do begin
try
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('\Software\Borland\Database Engine', True) then begin
WriteString('CONFIGFILE01',Dest_Path+'IDAPI32.CFG');
WriteString('DLLPath',Dest_Path);
WriteString('RESOURCE','0009');
WriteString('UseCount','1');
CloseKey;
end;
if OpenKey('\Software\ODBC\ODBC.INI\Alias', True) then begin // SQL Server 의 Alias Name
WriteString('Description','Alias'); // SQL Server 의 Alias Name
WriteString('Driver',OSPath+'SQLSRV32.dll');
WriteString('Language','한국어');
WriteString('LastUser','UserName');//SQL Server 에 등록된 유저네임
WriteString('Regional','Yes');
WriteString('Server','111.111.111.111'); //SQL Server 의 IP Address
CloseKey;
end;
if OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True) then begin
WriteString('Alias','SQL Server'); // SQL Server 의 Alias Name
CloseKey;
end;
if OpenKey('\Software\ODBC\ODBC.INI\ODBC File DSN', True) then begin
WriteString('DefaultDSNDir','C:\Program Files\Common Files\ODBC\Data Sources');
CloseKey;
end;
finally
free;
inherited;
end;
end;
memo1.lines.Add(' Check good...');
end;
procedure CopyFile(srcFilePath,destPath:string);
var
Result:integer;
SearchRec:TSearchRec;
NewFile: TFileStream;
OldFile: TFileStream;
NewFileName: string;
begin
Result:=FindFirst(srcFilePath+'*.*',faAnyFile-faDirectory,SearchRec);
memo1.lines.Add('파일복사를 시작합니다...');
while Result=0 do begin
OldFile:=TFileStream.Create(srcFilePath+SearchRec.name, fmOpenRead or fmShareDenyWrite);
NewFileName:=DestPath+SearchRec.name;
try
NewFile := TFileStream.Create(NewFileName, fmCreate or fmShareDenyRead);
try
NewFile.CopyFrom(OldFile, OldFile.Size);
memo1.lines.Add(NewFileName+format(', %d Bytes Copied',[searchrec.Size]));
Application.ProcessMessages;
finally
FreeAndNil(NewFile);
end;
finally
FreeAndNil(OldFile);
end;
Result:=FindNext(SearchRec);
end;
FindClose(SearchRec);
memo1.lines.Add('파일 복사가 끝났습니다.');
end;
begin
bitBtn1.Enabled:=false;
bitBtn2.Enabled:=false;
CheckReg(CheckDestPath());
copyFile(ExtractFilePath(Application.ExeName)+'BDE\',CheckDestPath());
copyFile(ExtractFilePath(Application.ExeName)+'DLL\',OSPath);
ProgramPath:='c:\한원\'+RadioGroup2.Items.Strings[RadioGroup2.Itemindex];
if not DirectoryExists('c:\한원') then
if not CreateDir('c:\한원') then
raise Exception.Create('Cannot create '+'c:\한원');
if not DirectoryExists(ProgramPath) then
if not CreateDir(ProgramPath) then
raise Exception.Create('Cannot create '+ProgramPath);
copyFile(ExtractFilePath(Application.ExeName)+RadioGroup2.Items.Strings[RadioGroup2.Itemindex]+'\',ProgramPath+'\');
memo1.lines.Add('모든 셋업이 끝났습니다. *.~');
memo1.lines.Add('프로그램종료후 반드시');
memo1.lines.Add('ODBC 관리도구에서 클라이언트구성>네트워크라이브러리를');
memo1.lines.Add('TCP/IP 로 변경해 주십시오.');
bitBtn1.Enabled:=true;
bitBtn2.Enabled:=true;
end;
procedure TCopyForm.BitBtn2Click(Sender: TObject);
begin
close;
end;
procedure TCopyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TCopyForm.FormDestroy(Sender: TObject);
begin
CopyForm:=nil;
end;
procedure TCopyForm.FormCreate(Sender: TObject);
begin
//클라이언트의 OS 체크
if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then begin
OSPath:='C:\windows\System\';
RadioGroup1.ItemIndex:=0;
end
else begin
RadioGroup1.ItemIndex:=1;
OSPath:='C:\winNT\System32\';
end;
memo1.Lines.Clear;
memo1.Lines.Add('시작 버튼을 눌러주십시오.');
end;
procedure TCopyForm.RadioGroup1Click(Sender: TObject);
begin
case RadioGroup1.ItemIndex of
0,2 : OSPath:='C:\windows\System\';
1 : OSPath:='C:\winNT\System32\';
end
end;
end.
<!--CodeE-->