FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird 팁&트릭
[20] InterBase/FireBird와 ADO
박지훈.임프 [cbuilder] 7440 읽음    2006-11-18 19:56
아래의 주소에 있는 글을 번역한 것입니다.
http://www.bdcsoftware.com/blog/entry/4/Interbase_and_ADO_tutorial


SQL서버나 액세스 데이터베이스 대신 쓸 만한 오픈소스 솔루션이 없는지 한번쯤은 궁금하신 적이 있을 겁니다.
저도 그런 적이 있었고, 인터베이스를 찾아냈습니다. 인터베이스는 볼랜드에서 나온 클라이언트/서버 데이터베이스이고, 오픈소스 기반입니다. 인터베이스는 윈도우, 리눅스, 그리고 여러 다른 유닉스 계열 OS에서 동작합니다. 인터베이스는 매우 적은 메모리를 사용하고, 상당히 빠르기까지 합니다. 그리고 대용량 데이터베이스 파일도 지원합니다. (2GB 이상을 말하는 겁니다. 300GB 이상의 데이터베이스를 운영중인 사람도 알고 있습니다) 어쨌든, 이 강좌에서는 여러분이 인터베이스를 사용하는 데 필요한 여러 문제들과 툴들에 대해 설명하겠습니다.

먼저 인터베이스의 장점에 대해 설명하겠습니다.
1. 오픈 소스이다
2. 빠르다
3. 크기가 작다
4. 배포가 매우 편하다 (와이즈, 인스톨실드를 위한 스크립트가 있음)
5. ADO와 사용 가능
6. ODBC와 사용 가능
7. 대단한 트랜잭션 관리 (읽기 작업이 쓰기 작업을 블로킹하지 않으며 반대도 마찬가지임)
8. 여러 플랫폼을 지원 (리눅스/유닉스)
9. BLOB 필드 지원 (이미지, 메모 필드 등)
10. 배열 지원 (배열을 각각의 필드에 저장할 수 있음)

인터베이스를 시작하려면, 서버와 클라이언트 소프트웨어가 필요합니다. 원래의 오픈소스 버전의 소스와 바이너리는 볼랜드에서 다운로드 가능합니다.
http://www.borland.com/devsupport/interbase/opensource/

수정된 버전인 파이어버드는 다음 주소에서 다운로드할 수 있습니다.
http://www.ibphoenix.com/ibp_download.html

서버 및 클라이언트 바이너리를 다운로드하고 설치합니다. 인터베이스 서버에는 ODBC 드라이버가 포함되어 있지만, 저는 ODBC를 싫어하고 보통의 작업에는 ADO/OleDB를 이용합니다. 그래서 인터베이스를 위한 OleDB 드라이버를 찾아봤습니다. 다행히도 여러 종류가 있더군요. 아래 사이트에서 다운로드 가능한 사이트로의 링크들을 볼 수 있습니다.
http://www.interbase2000.org/tools_conn.htm

저는 http://www.lcpi.lipetsk.ru/prog/eng/index.html 에서 다운받은 IBProvider를 선택했습니다. 프로바이더를 ADO와 사용하는 방법을 보여주는 몇가지 VB 예제가 포함되어 있었기 때문입니다. 여러분이 다운로드할 수 있는 버전은 30일 평가판입니다. 완전히 무료인 OleDB 프로바이더를 원한다면 Http://www.oledb.net/?Page=FAQ 를 참고하세요. 하지만, 제가 만든 모든 샘플 코드는 IBProvider에서만 테스트해봤다는 것을 말씀드립니다.

일단 모든 파일을 다운로드하고 설치했다면, 이제 개발을 시작할 준비가 된 것입니다. 인터베이스에는 employee.gdb 라는 샘플 데이터베이스가 포함되어 있습니다. 우리는 이 데이터베이스를 예제로 사용할 것입니다. (디폴트 위치는 C:\Program Files\Borland\InterBase\examples\Database 입니다). 어쨌든, 기초부터 시작해봅시다.

인터베이스에 연결하기
데이터베이스로의 연결을 맺어봅시다. 예제 연결 코드는 다음과 같습니다.
Dim adoConn As New ADODB.Connection 

adoConn.ConnectionString = "provider=LCPI.IBProvider;data source=localhost:C:Interbase DBsEmployee.gdb;ctype=win1251;user id=SYSDBA;password=masterkey" 

adoConn.Open 

몇가지 고려해야 할 것들이 있습니다.
디폴트 유저 네임과 패스워드(SQL서버에서의 SA처럼)는 각각 SYSDBA와 masterkey입니다(대소문자 구별). 'data source' 파라미터는 'IP주소:서버상의파일위치' 과 같은 형식입니다. 여러분의 개발 PC에 서버를 설치했다면 localhost나 여러분의 IP를 쓰면 됩니다. 원격의 서버에 설치했다면 그 서버의 IP 주소를 쓰면 됩니다. 파일 위치 부분은 조금 복잡한데, 서버의 로컬 위치이며 UNC 패스를 쓰면 안됩니다.

일단 연결이 맺어졌으면, 이제 데이터베이스 작업을 시작할 수 있습니다.

인터베이스 데이터베이스 작업하기
무엇보다 먼저, 인터베이스와 작업하는 것은 SQL서버나 액세스를 사용하는 것만큼 쉽습니다. 하지만 몇가지 고려해야 하는 사항들이 있습니다.

첫번째로, 인터베이스에는 다이얼렉트(dialect)라는 개념이 있습니다. 이것은 여러분이 데이터베이스에 명령을 보낼 때의 SQL 문법을 의미합니다. 인터베이스 6.0에서는 Dialect 1(이전버전 호환용)와 Dialect 3를 사용할 수 있습니다. 샘플 데이터베이스는 Dialect 1으로 작성되어 있습니다. 만약 Dialect 3를 사용하려고 한다면(저처럼), 몇가지 이상한 동작을 보게 될 겁니다. 여러분의 데이터베이스에 소문자 테이블과 필드 이름이 있는 경우, 소문자 이름들을 쌍따옴표로 감싸야 합니다. 예를 들어 Select "CompanyName", "Address" from "tblCustomers" 이렇게 말이죠. 말할 필요도 없이 이 문제는 VB 개발자들에게는 혼란을 가져옵니다. 한가지 피해가는 방법은 테이블과 필드의 이름으로 대문자를 사용하는 겁니다. (하지만 제게 왜 그런지를 묻지는 말아주세요) 예를 들면, SELECT COMPAN_YNAME, ADDRESS FROM TBLCUSTOMERS 이렇게 말이죠.

제가 발견한 다른 문제는, 커맨드 타입으로 adCmdStoredProc을 쓸 수 없다는 것입니다. 이 문제를 피하려면 adCmdText를 쓰면 됩니다. 이후에 더 자세히 설명드리겠습니다.

네, 이제, 우리 데이터베이스에 데이터를 넣고 빼려면 어떻게 할까요? SQL 문을 실행하기 위해 여러분이 일상적으로 사용하던 레코드셋 객체를 사용하거나 스토어드 프로시저를 이용할 수도 있습니다.

아래에 간단한 셀렉트 문을 예로 보여드립니다.
Dim rst As New Recordset 

rst.Source = "SELECT CUSTOMER.CONTACT_FIRST, " & _ 
"CUSTOMER.CONTACT_LAST, CUSTOMER.COUNTRY " & _ 
"FROM CUSTOMER" 

rst.ActiveConnection = adoConn 
adoConn.BeginTrans 
rst.Open 
adoConn.CommitTrans 


그리고 아래는 간단한 스토어드 프로시저 실행 예입니다.
Dim rst As New Recordset 
Dim cmd As New ADODB.Command 

adoConn.Open 

With cmd 
.ActiveConnection = adoConn 
.CommandText = "Select * FROM DEPT_BUDGET (100)" 
End With 

adoConn.BeginTrans 
Set rst = cmd.Execute 
adoConn.CommitTrans 

스토어드 프로시저가 로우들을 리턴하는 경우, SELECT * FROM 프로시저이름 이런 식으로 호출하면 됩니다. 프로시저가 로우를 리턴하지 않으면 EXECUTE 프로시저이름 이렇게 호출하면 됩니다.

프로시저에 파라미터를 넘겨주고 돌려받는 방법도 좀 특이합니다. 3개의 파라미터를 받는 인서트 스토어드 프로시저의 경우, 파라미터들을 전달하려면 인라인 문법을 사용해야 합니다. 예를 들면, 'execute procedure PROC_INSERT_TBLCUSTOMERS (쉼표로 나뉘어진 파라미터 목록)' 아니면 다음과 같이 할 수도 있습니다.
With cmd 
.ActiveConnection = adoConn 
.CommandText = " execute procedure PROC_INSERT_TBLCUSTOMERS (?,?,?)" 
End With 

adoConn.BeginTrans 
cmd(0) = parameter value 
cmd(1) = parameter value 
cmd(2) = parameter value 
cmd.Execute 
adoConn.CommitTrans 

어쨌든, 이 정도가 기초입니다. 여러분이 인터베이스에 관심을 가져주면, 이미지, 배열, UDF 함수들을 이용하고 인터베이스 툴들을 설명하는 두번째 강좌를 써볼 것입니다. 지금은 이 강좌의 샘플 코드와 볼랜드에서 제공한 샘플 데이터베이스를 살펴보시기 바랍니다.

+ -

관련 글 리스트
20 InterBase/FireBird와 ADO 박지훈.임프 7440 2006/11/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.