MySQL Tcl 인터페이스 Fbsql

admin의 아바타

http://www.fastbase.co.nz/fbsql/index.html

Fbsql은 Tcl의 MySQL 인터페이스 확장 패키지입니다. Fbsql은 Fast base sql의 준말이며, Tcl 8.x이상을 지원합니다. Solaris/Linux/Windows에서 사용가능합니다.

설치

Windows사용자는 아래의 두 파일만 현재 작성중인 Tcl스크립트가 있는 곳에 두면 바로 사용가능합니다.

fbsql.dll, libmysql.dll

Solaris사용자는 root권한으로 설치된 mysql이 시스템에 설치되어 있어야하며, Windows와 마찬가지로 fbsql.so만 현재 작성중인 Tcl스크립트가 있는 곳에 두면 바로 사용가능합니다.

Linux사용자는 root권한으로 설치된 mysql이 시스템에 설치되어 있어야하며, Fbsql의 소스를 다운받아 공유 라이브러리를 빌드한후 사용가능합니다.

사용방법

Mysql이 사용자의 PC에 설치되어 있고, 현재 동작중인 가정하에 진행합니다. 우선적으로 자신의 IP를 알아야합니다.

Solaris나 Linux 사용자는 ifconfig로 알 수 있습니다. 다음 아래와 같이 mysql에 연결합니다.

정상적으로 연결이 됐다면, 현재 mysql에 생성되어있는 데이타베이스의 목록을 봅니다.

기본으로

mysql, test

위의 데이타베이스가 생성되어 있기 때문에, 위와 같은 화면을 볼수있습니다. 하지만 기존에 mysql을 사용하고 있으며, 다른 데이타베이스를 생성하여 사용중이면 더 많은 데이타베이스 리스트가 반환될 것 입니다.

test데이타베이스에 coolsite의 테이블을 생성해봅니다. 아래의 스키마(schema)를 coolsite.sql로 저장합니다.

USE test;

CREATE TABLE coollink (
no int(4) DEFAULT '1' NOT NULL AUTO_INCREMENT,
url varchar(200) NOT NULL,
title varchar(100) NOT NULL,
content text,
reg_date date,
PRIMARY KEY (no)
);

위 스키마는 추천싸이트 테이블 예제입니다. 다음 아래와 같이하면 test 데이타베이스에 coolsite 테이블이 생성됩니다.

정상적으로 생성이 되었다면 아래와 같이 테이블이 생성이 되어 있는지 확인해봅니다.

이상 본인이 데이타베이스에 대해 해박한 지식이 없는 관계로 여기서 마칠까 합니다. MySQL을 잘 다룰수 있는 분은 쉽게 응용할수 있으리라 생각합니다. 다음은 Fbsql에서 제공하고 있는 예제입니다.

# load the fbsql package and connect to a database
load fbsql.dll
sql connect 192.168.3.8 root ""
sql selectdb test

# retrieve a result set as a list of records, each list is a sub-list of all fields
set data [sql "SELECT BRANCH_ID, NAME FROM BRANCH ORDER BY NAME"]

# process a result set, one record at a time - method #1
foreach row [sql "SELECT BRANCH_ID, NAME FROM BRANCH ORDER BY NAME"] {
   set id [lindex $row 0]
   set name [lindex $row 1]
   puts "id = $id, name = $name"
}

# process a result set, one record at a time - method #1
sql startquery "SELECT BRANCH_ID, NAME FROM BRANCH ORDER BY NAME" -array branch
while {[sql fetchrow] != ""} {
   puts "id = $branch(BRANCH_ID), name = $branch(NAME)"
}
sql endquery

load fbsql.dll
sql connect 192.168.3.8 root ""
sql selectdb test

foreach row [sql "SELECT NUMBER, NAME FROM CUSTOMER ORDER BY NAME"] {
   set number [lindex $row 0]
   foreach row [sql "SELECT DATE, REF, TOTAL FROM TRAN WHERE \
                 CUSTOMER_NO = $customer(NUMBER) ORDER BY DATE, REF"
] {
      set tran(DATE) [lindex $row 0]
      set tran(REF) [lindex $row 1]
      set tran(TOTAL) [lindex $row 2]
      # process transaction record ...
   }
}

sql disconnect

load fbsql.dll
sql connect 192.168.3.8 root "" test

sql2 connect 192.168.3.8 root "" test

sql startquery "SELECT NUMBER, NAME FROM CUSTOMER ORDER BY NAME" -array customer

while {[sql fetchrow] != ""} {
   sql2 startquery "SELECT * FROM TRAN WHERE \
           CUSTOMER_NO = $customer(NUMBER) ORDER BY DATE, REF"
-array tran
   while {[sql2 fetchrow] != ""} {
      # tran() array contains one element for each field \
                   (note: in this example we retrieved all fields)
      # process transaction record ...
   }
   sql2 endquery
}

sql endquery

sql disconnect
sql2 disconnect

참고

한글과 같은 2바이트 언어권의 문자를 취급시는 소스의

#define UTF_ENCODING 0

부분을 1로 바꾸어 재 컴파일하면 UTF버전의 패키지가 생성이 됩니다.

첨부 파일파일 크기
121.jpg75.01 KB
122.jpg46.61 KB
123.jpg52.3 KB
124.jpg36.48 KB
125.jpg56.23 KB