반응형
델파이, MS SQL server연결에 대한 작은 것
========================================
작성자 : 윤석천 / likesam@hitel.net
작성일 : 2000-02-25
버전 : 0.0.0.1 (전혀 Debugging이 되어 있지 않음)
게시사이트 : 델파이코리아(http://www.delphikorea.com), Hitel vtool동호회
저작권 : Free.
부탁글 : Delphi의 사용방법, 혹은 delphi-MS SQL과의 연결 방법에 대한 일체
편지나 문의를 받지 않습니다. 아래의 code에서 보시면 아시겠지만
저또한 완전 초보이며, 제가 대답할 실력이 되지 않습니다, ^^;
[차례]
1. 서론
2. 응용프로그램에서의 DB연결용 설정
3. 많이들 궁금해 하는 문제(FAQ)
4. 결론
1. 서론
=======
델파이와 MS SQL은 오라클을 쓸수 없는 불쌍하고 가난한 자의 선택이라고 알려져 있습니다. 따라서, NT를 어쩔 수 없이 써야 하거나, NT밖에 모르거나, 오라클을 사기에는 너무 비싸거나, MS사의 vapor ware에 속은 사람들이 주로 사용하고, 델파이와 MS SQL의 접속에 대한 정보는 그다지 찾는 사람이 없습니다.(그만큼 쉽기 때문일까요?)
여기서는 ODBC방식보다 성능이 뛰어난 DBE를 통해 연결하는 방식을 설명하고 있으며, 델파이 3.0을 기준으로 설명하고 있으므로 버전에 따라 조금씩 차이가 날 수 있습니다. 또한 BDE에서 alias를 잡는 부분은 배제하고, Tdatabase componet를 주로 설명하였고, 권용길님의 oracle연결의 패러디성이 강합니다. style을 제공하여 주신 용길님께 죄송하다는 말씀을 전합니다.^.^;
2. 응용프로그램에서의 DB연결용 설정
===================================
[MS SQL연결을 위해 필요한 것들]
- 델파이 SQL Links
- MS SQL serve 연결용 DLL
일단,델파이를 설치할 때, MS SQL 드라이버를 선택하셔서 SQL Link를 설치 해야 합니다. MS SQL server 연결용 DLL은 여기 저기서 쉽게 구할수 있습니다.
쉬운 방법은 MS SQL server CD-ROM을 가지고 계시다면 여기서 Client를 설치 할 수있습니다.
다음으로 쉬운 방법은 MS OFFICE류 (Excell을 포함)을 까시면서 Data Access부분에 보면 SQL Server driver를 설정하여 설치 할 수 있습니다.
가장 쉬운 방법은 MS SQL서버에 대한 연결이 정상적으로 이루어져 있는 computer의 하드를 꺼내어, 설치하고자 하는 PC의 HDD와 바꾸는 방법입니다.(^.^;) 다시 말해서 windowssystem밑을 잘보시면 dbmssocn.dll (TCP/IP 연결용), dbnmpntw.dll (NetBios 연결용), Ntwdblib.dll 등의 화일을 찾으 실 수 있는데, 여기서 db*.dll에서 연결하시는 protocol에 맞는 것과 ntwdblib.dll을 복사하여 설치가 되어 있지 않는 PC에 넣어 주시면 됩니다.
[MS SQL 연결 설정]
이는 오라클에 비해서 상당히 쉽습니다. MS SQL에 별도로 설정을 잡을 필요가 없고 거의 모든 RDB연결시 마찬가지리라 생각됩니다만, 프로그램 실행시 설정을 alias를 동적으로 잡거나, 아니면 아예, alias를 만들지 말고 프로그램에서 잡고 들어 가는 것이 낳을 것 같습니다.
제가 사용하는 설정용 procedure를 보여 드리지요.
// M$ SQL용으로 DB 설정을 잡음
Function SetDBParams_mssql : Boolean;
begin
try
with DBMod.DataBase1 do begin
Close;
DataBaseName := 'HLCDYEDB';
// Alias를 쓰려면 DriverNamge을 Remark Out할 것
// AliasName := 'HLCDYE';
AliasName := '';
DriverName := 'mssql';
HandleShared := true;
KeepConnection := true;
LoginPrompt := false;
TransIsolation := tiReadCommitted;
with Params do begin
Add ('USER NAME=***'); // 사용하시는 user name
Add ('PASSWORD=***'); // 사용하시는 password
Add ('SERVER NAME=***'); // 사용하시는 server의 netbios상 이름
Add ('DATABASE NAME=HLCDYEDB'); // 사용하시는 DB Name
Add ('OPEN MODE=READ/WRITE');
Add ('SCHEMA CACHE SIZE=8');
Add ('BLOB EDIT LOGGING=');
Add ('LANGDRIVER=');
Add ('SQLQRYMODE=');
Add ('SQLPASSTHRU MODE=SHARED NOAUTOCOMMIT');
Add ('DATE MODE=0');
Add ('SCHEMA CACHE TIME=-1');
Add ('MAX QUERY TIME=300');
Add ('MAX ROWS=-1');
Add ('BATCH COUNT=200');
Add ('ENABLE SCHEMA CACHE=TRUE');
Add ('SCHEMA CACHE DIR=c:temp');
Add ('HOST NAME=' + '자기 computer이름');
// 접속하여 들어가는 com의 이름을 알림
Add ('APPLICATION NAME=DPMS');
Add ('NATIONAL LANG NAME=');
Add ('ENABLE BCD=FALSE');
Add ('TDS PACKET SIZE=4096');
Add ('BLOBS TO CACHE=64');
Add ('BLOB SIZE=32');
end; // of with
end; // of with
Result := true;
public_u.WriteToStatus(statusBar1,0,'Microsoft SQL Server');
except
Result := false;
end; // of try
end; // of Function
요거를 조금만 응용하시면 alias를 동적으로 설정하는 것도 가능하지만,
function CreateAlias : Boolean;
var
slstParam: TstringList;
begin
try
try
slstParam := TStringList.Create;
with slstParam do begin
// 위에 있는 parameter부분들
end; // of Params
with Session do begin
// Alias가 있다면 지움
if IsAlias ('HLCDYE') then DeleteAlias ('HLCDYE');
// Alias를 만듦
AddAlias('HLCDYE', 'mssql', slstParam );
SaveConfigFile
end; // of with
CreateAlias := true;
except
CreateAlias := false;
end; // of try
finally
slstParam.Free;
end;
end; // of function
저는 이것 저것 다른 프로그램들, 특히 BDE에 같이 물리지만 다른 응용프로그램이 돌아가는 것을 목숨걸고 막는 프로그램들 때문에, 동적으로 alias생성은 권하고 싶지 않습니다.
그리고 나서, 상기 연결점이 있는 Tdatabase component를 적절히 사용하시면 됩니다. 만약, 작성하시는 프로그램내에서 design시에 DB연결이 필요하시다면, 아래와 같이 해보세요.
DataBase component의 object inspector에서
DataBaseName Database 이름
AliasName 비움
DriverName mssql
HandleShared true;
KeepConnection true;
LoginPrompt false;
TransIsolation tiReadCommitted
을 넣으시고 parameter에는 위에서 parameter부분을 타이핑해서 넣으세요.
3. 많이들 궁금해 하는 문제(FAQ)
===============================
가. DB 연결이 안될때.
먼저 win 95등을 사용할 경우 PC가 NT에 접속할 사용자명, 암호가 제대로 입력하고 실행되는지 확인해 보세요. NT의 사용자 인증과정은 제가 잘 모르지만, win95에서의 시작할 때의 사용자 명으로 물고 들어 가는 것 같습니다. 그러므로, 이것이 잘못 되었다면 MS SQL접근은 커녕 NT조차도 들어가지 않습니다.
Lan cable이 빠졌거나, network연결이 끊어졌나 확인해보세요. ping은 이럴때 유용한 도구입니다. ping의 사용방법은 아시죠? (ping 서버의 이름)
사용자에게 요즘 새로 깔거나, 지운 프로그램이 있는지 확인해 보세요.
MS office에 MS SQL server driver가 들어가 있으므로, 이를 option에서 설정치않고 설치하였을 경우 해당 driver를 필요없다고 지워버리는 수가 많습니다. (악독한 M$)
나. BDE의 설정시 Host, server의 차이는?
제가 알기로는 server는 RDBMS(MS SQL, sybase)등이 돌아가는 server이름을
말합니다. 그러나 host는 RDB쪽에서 client의 접속을 받아들인 process에서
식별용으로 사용되더군요. 제 경험으로는 sql명령중 sp_who를 하여 현재
접속 사용자를 볼 경우 보여지는 hostname과 BDE의 host와 일치하더군요.
그래서 저는 host에는 각 PC의 ip address혹은 host name을 넣어줘서 사용합니다.
4. 종언
=======
========================================
작성자 : 윤석천 / likesam@hitel.net
작성일 : 2000-02-25
버전 : 0.0.0.1 (전혀 Debugging이 되어 있지 않음)
게시사이트 : 델파이코리아(http://www.delphikorea.com), Hitel vtool동호회
저작권 : Free.
부탁글 : Delphi의 사용방법, 혹은 delphi-MS SQL과의 연결 방법에 대한 일체
편지나 문의를 받지 않습니다. 아래의 code에서 보시면 아시겠지만
저또한 완전 초보이며, 제가 대답할 실력이 되지 않습니다, ^^;
[차례]
1. 서론
2. 응용프로그램에서의 DB연결용 설정
3. 많이들 궁금해 하는 문제(FAQ)
4. 결론
1. 서론
=======
델파이와 MS SQL은 오라클을 쓸수 없는 불쌍하고 가난한 자의 선택이라고 알려져 있습니다. 따라서, NT를 어쩔 수 없이 써야 하거나, NT밖에 모르거나, 오라클을 사기에는 너무 비싸거나, MS사의 vapor ware에 속은 사람들이 주로 사용하고, 델파이와 MS SQL의 접속에 대한 정보는 그다지 찾는 사람이 없습니다.(그만큼 쉽기 때문일까요?)
여기서는 ODBC방식보다 성능이 뛰어난 DBE를 통해 연결하는 방식을 설명하고 있으며, 델파이 3.0을 기준으로 설명하고 있으므로 버전에 따라 조금씩 차이가 날 수 있습니다. 또한 BDE에서 alias를 잡는 부분은 배제하고, Tdatabase componet를 주로 설명하였고, 권용길님의 oracle연결의 패러디성이 강합니다. style을 제공하여 주신 용길님께 죄송하다는 말씀을 전합니다.^.^;
2. 응용프로그램에서의 DB연결용 설정
===================================
[MS SQL연결을 위해 필요한 것들]
- 델파이 SQL Links
- MS SQL serve 연결용 DLL
일단,델파이를 설치할 때, MS SQL 드라이버를 선택하셔서 SQL Link를 설치 해야 합니다. MS SQL server 연결용 DLL은 여기 저기서 쉽게 구할수 있습니다.
쉬운 방법은 MS SQL server CD-ROM을 가지고 계시다면 여기서 Client를 설치 할 수있습니다.
다음으로 쉬운 방법은 MS OFFICE류 (Excell을 포함)을 까시면서 Data Access부분에 보면 SQL Server driver를 설정하여 설치 할 수 있습니다.
가장 쉬운 방법은 MS SQL서버에 대한 연결이 정상적으로 이루어져 있는 computer의 하드를 꺼내어, 설치하고자 하는 PC의 HDD와 바꾸는 방법입니다.(^.^;) 다시 말해서 windowssystem밑을 잘보시면 dbmssocn.dll (TCP/IP 연결용), dbnmpntw.dll (NetBios 연결용), Ntwdblib.dll 등의 화일을 찾으 실 수 있는데, 여기서 db*.dll에서 연결하시는 protocol에 맞는 것과 ntwdblib.dll을 복사하여 설치가 되어 있지 않는 PC에 넣어 주시면 됩니다.
[MS SQL 연결 설정]
이는 오라클에 비해서 상당히 쉽습니다. MS SQL에 별도로 설정을 잡을 필요가 없고 거의 모든 RDB연결시 마찬가지리라 생각됩니다만, 프로그램 실행시 설정을 alias를 동적으로 잡거나, 아니면 아예, alias를 만들지 말고 프로그램에서 잡고 들어 가는 것이 낳을 것 같습니다.
제가 사용하는 설정용 procedure를 보여 드리지요.
// M$ SQL용으로 DB 설정을 잡음
Function SetDBParams_mssql : Boolean;
begin
try
with DBMod.DataBase1 do begin
Close;
DataBaseName := 'HLCDYEDB';
// Alias를 쓰려면 DriverNamge을 Remark Out할 것
// AliasName := 'HLCDYE';
AliasName := '';
DriverName := 'mssql';
HandleShared := true;
KeepConnection := true;
LoginPrompt := false;
TransIsolation := tiReadCommitted;
with Params do begin
Add ('USER NAME=***'); // 사용하시는 user name
Add ('PASSWORD=***'); // 사용하시는 password
Add ('SERVER NAME=***'); // 사용하시는 server의 netbios상 이름
Add ('DATABASE NAME=HLCDYEDB'); // 사용하시는 DB Name
Add ('OPEN MODE=READ/WRITE');
Add ('SCHEMA CACHE SIZE=8');
Add ('BLOB EDIT LOGGING=');
Add ('LANGDRIVER=');
Add ('SQLQRYMODE=');
Add ('SQLPASSTHRU MODE=SHARED NOAUTOCOMMIT');
Add ('DATE MODE=0');
Add ('SCHEMA CACHE TIME=-1');
Add ('MAX QUERY TIME=300');
Add ('MAX ROWS=-1');
Add ('BATCH COUNT=200');
Add ('ENABLE SCHEMA CACHE=TRUE');
Add ('SCHEMA CACHE DIR=c:temp');
Add ('HOST NAME=' + '자기 computer이름');
// 접속하여 들어가는 com의 이름을 알림
Add ('APPLICATION NAME=DPMS');
Add ('NATIONAL LANG NAME=');
Add ('ENABLE BCD=FALSE');
Add ('TDS PACKET SIZE=4096');
Add ('BLOBS TO CACHE=64');
Add ('BLOB SIZE=32');
end; // of with
end; // of with
Result := true;
public_u.WriteToStatus(statusBar1,0,'Microsoft SQL Server');
except
Result := false;
end; // of try
end; // of Function
요거를 조금만 응용하시면 alias를 동적으로 설정하는 것도 가능하지만,
function CreateAlias : Boolean;
var
slstParam: TstringList;
begin
try
try
slstParam := TStringList.Create;
with slstParam do begin
// 위에 있는 parameter부분들
end; // of Params
with Session do begin
// Alias가 있다면 지움
if IsAlias ('HLCDYE') then DeleteAlias ('HLCDYE');
// Alias를 만듦
AddAlias('HLCDYE', 'mssql', slstParam );
SaveConfigFile
end; // of with
CreateAlias := true;
except
CreateAlias := false;
end; // of try
finally
slstParam.Free;
end;
end; // of function
저는 이것 저것 다른 프로그램들, 특히 BDE에 같이 물리지만 다른 응용프로그램이 돌아가는 것을 목숨걸고 막는 프로그램들 때문에, 동적으로 alias생성은 권하고 싶지 않습니다.
그리고 나서, 상기 연결점이 있는 Tdatabase component를 적절히 사용하시면 됩니다. 만약, 작성하시는 프로그램내에서 design시에 DB연결이 필요하시다면, 아래와 같이 해보세요.
DataBase component의 object inspector에서
DataBaseName Database 이름
AliasName 비움
DriverName mssql
HandleShared true;
KeepConnection true;
LoginPrompt false;
TransIsolation tiReadCommitted
을 넣으시고 parameter에는 위에서 parameter부분을 타이핑해서 넣으세요.
3. 많이들 궁금해 하는 문제(FAQ)
===============================
가. DB 연결이 안될때.
먼저 win 95등을 사용할 경우 PC가 NT에 접속할 사용자명, 암호가 제대로 입력하고 실행되는지 확인해 보세요. NT의 사용자 인증과정은 제가 잘 모르지만, win95에서의 시작할 때의 사용자 명으로 물고 들어 가는 것 같습니다. 그러므로, 이것이 잘못 되었다면 MS SQL접근은 커녕 NT조차도 들어가지 않습니다.
Lan cable이 빠졌거나, network연결이 끊어졌나 확인해보세요. ping은 이럴때 유용한 도구입니다. ping의 사용방법은 아시죠? (ping 서버의 이름)
사용자에게 요즘 새로 깔거나, 지운 프로그램이 있는지 확인해 보세요.
MS office에 MS SQL server driver가 들어가 있으므로, 이를 option에서 설정치않고 설치하였을 경우 해당 driver를 필요없다고 지워버리는 수가 많습니다. (악독한 M$)
나. BDE의 설정시 Host, server의 차이는?
제가 알기로는 server는 RDBMS(MS SQL, sybase)등이 돌아가는 server이름을
말합니다. 그러나 host는 RDB쪽에서 client의 접속을 받아들인 process에서
식별용으로 사용되더군요. 제 경험으로는 sql명령중 sp_who를 하여 현재
접속 사용자를 볼 경우 보여지는 hostname과 BDE의 host와 일치하더군요.
그래서 저는 host에는 각 PC의 ip address혹은 host name을 넣어줘서 사용합니다.
4. 종언
=======
반응형