UniSQL/X 실습과제 (1) ■ 실습 기간: 2004. 5. 17 ~ 2003. 5. 22 ■ 제출 마감: 2004. 5. 23 새벽 1시 ■ 제출물: 기재된 웹 사이트에 명시된 ‘공지’를 읽고 공지에 맞추어 과제물을 제출한다. 첨부 파일로 자신의 학번과 이름으로 이루어진 “학번(이름).zip” 형식의 압축 파일을 제출하여야 한다. 압축 파일은 아래 파일을 포함하여야 한다. 1. 프로그램 소스 파일 및 실행 프로그램 파일 압축 파일에는 반드시 2개의 프로그램 소스 파일 및 2개의 실행 프로그램 파일이 있어야 한다. 프로그램 소스 파일 및 실행 프로그램 파일의 이름은 실습 과제 설명서에 있는 이름을 사용하여야 한다. 2. 캡쳐 파일: cap_??.jpg 실습 중에 자신의 실습을 증명할만한 화면을 캡쳐한다. 화면 캡쳐시 디스플레이 설정 상태는 1024*768 해상도에 256 컬러야만 한다. 파일 저장 형식은 “jpg” 형식을 사용하고, 캡쳐 파일 이름은 “cap_??.jpg"로 한다. 물음표에 해당하는 부분은 “01”부터 시작하는 일련 번호를 적는다. 화면 캡쳐는 반드시 윈도우 화면 전체를 대상으로 캡쳐하고 오른쪽 하단에 현재 시간이 포함되어야 한다. 즉 현재 활성화된 윈도우만 캡쳐해서는 안된다. “cap_01.jpg”부터 “cap_03.jpg”까지는 UniSQL 설치 관련된 화면을 캡쳐하고, “cap_04(1).jpg”와 “cap_04(2).jpg” 는 Demo DB 설치와 실행 관련된 화면을 캡쳐한다. “cap_05.jpg”부터 “cap_07.jpg”까지는 CLI 프로그래밍 수행 과정(환경 변수 관련 화면, 컴파일 화면, 실행 화면)을 캡쳐하고, “cap_08.jpg”부터 “cap_10.jpg”까지는 embedded SQL 프로그래밍 수행 과정(esqlx 전처리 화면, 컴파일 화면, 실행 화면)을 캡쳐한다. ■ 제출할 곳 - 주간반(월/수) : http://www.ghwa.net/zeroboard/zboard.php?id=04dbday1 - 주간반(화/금) : http://www.ghwa.net/zeroboard/zboard.php?id=04dbday2 - 야간반 : http://www.ghwa.net/zeroboard/zboard.php?id=04dbnight
1. NT용 UniSQL 설치하기 1.1 http://dev.unisql.com 페이지에서 Downloads 메뉴를 선택한다. 1.2 회원가입 혹은 로그인 한다.
② ① ③ 1.3 최신버전 > INTEL X86 Windows NT4.0 or 2000 > UniSQL5.2P7_INTEL-x86-W2K(UniCAS4.6.2-TCL8.0).zip 을 다운 받는다. ① ② ③ 1.4 Key Request 메뉴에서 OS 와 Key를 받을 e-Mail 주소를 입력한 후 Key 를 전송 받는다.
1.5 UniSQL을 설치하고 모든 과정은 Default 설정으로 한다. ① ② ③
④ ⑤
⑥ ⑦ ⑧ Reboot 선택 전송 받은 key 입력
2. DEMO DB 설치와 실행 1.6 System 을 재부팅 후 UniSQL 이 설치된 것을 확인한다. 2.1 ‘C:\UniSQL\UniSQL\DEMO\makedemo.bat’ 을 실행한다. 2.2 시작메뉴 > 프로그램 > UniSQL > UniSQL Manager 를 실행하면 화면 우측 하단에 UniSQL Manager 아이콘이 나타난다. 2.3 나타난 아이콘에 오른쪽 클릭 후 UniSQL > Start 하면 선택 할 수 있는 DB 의 목록이 나타나고(그림 참조), DB 선택 후 OK 버튼을 누르면 아이콘이 파란색으로 변하며 동작하고 있음을 알 수 있다.
① ② ③ 3. 기본적인 UniSQL CLI programming ※ 이하 모든 과정은 Visual C++ 6.0 이 설치되어 있다고 가정한다. 단 여러 User 가 사용하는 Computer의 경우, Visual C++ 6.0 설치자와 사용자가 다를 수 있으므로 아래 시스템 환경변수(Windows 98인 경우 autobat.exe)를 확인 하고, 관련 내용이 없는 경우 추가해 준다. path = C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\VC98\bin include = C:\Program Files\Microsoft Visual Studio\VC98\atl\include;C:\Program Files\Microsoft Visual Studio\VC98\mfc\include;C:\Program Files\Microsoft Visual Studio\VC98\include lib = C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib;C:\Program Files\Microsoft Visual Studio\VC98\lib MSDevDir = C:\Program Files\Microsoft Visual Studio\Common\MSDev98 ※ 시스템 환경변수 추가하는 법 제어판 시스템 고급 탭 환경변수 ① ② ③
(아래 예제는 UniSQL 에 접속하는 프로그램이다. 파일명은 conntest.c)) #include <stdio.h> #include "dbi.h" /* our test function below */ extern void do_test(); void main(int argc, char *argv[]) { /* connect to the database */ printf("Attempting connection to data source demodb\n"); if (db_restart(argv[0], 0, “demodb”)) { printf("Couldn't establish connection to the data source:\n"); printf(">> %s\n", db_error_string(3)); } else { printf("Connection successful\n"); db_shutdown(); printf("Connection closed\n");
3.2 아래와 같은 내용의 TEXT 파일을 작성하고, ‘conntest.mak’ 란 이름으로 저장한다. # # $Revision: 3.1 $ # Makefile for NT example. # Change PROJ to the name of the executable you want to produce. PROJ = conntest OFILES = $(PROJ).obj INCLUDES = /I$(UNISQLX)\include \ /I"C:\Program Files\Microsoft Visual Studio\VC98\Include" SYMBOLS = /D_X86_ /DNT /DPC /DMSVC /DXONE /DPRODUCTION /D_OLEAUTO_H_ DFLAGS = -debug:full -debugtype:cv CFLAGS = /nologo /c -DWIN32 -D_WIN32 /MD -Z7 -Od $(SYMBOLS) $(INCLUDES) LFLAGS = /NODEFAULTLIB /INCREMENTAL:NO /PDB:NONE /RELEASE \ /NOLOGO -align:0x1000 -subsystem:console,3.50 \ -entry:mainCRTStartup LIBS = "C:\Program Files\Microsoft Visual Studio\VC98\Lib\msvcrt.lib" \ "C:\Program Files\Microsoft Visual Studio\VC98\Lib\kernel32.lib" \ $(UNISQLX)/lib/ordbcl32.lib $(PROJ).exe: $(OFILES) link $(LFLAGS) /map $(OFILES) $(LIBS) >$*.lko .C.OBJ: $(CC) $(CFLAGS) /c $*.C (이후 다른 프로그램 작성시 9번째 라인의 ‘PROJ = conntest‘ 의 ‘conntest’ 대신에 프로그램명을 넣어주면 된다. 예: dbtest.c 의 경우 ‘PROJ = dbtest’) TIP 컴파일 중 에러 시 link 에러가 발생하면, library 가 설정되지 않은 경우가 많다. ***.err (위의 예에서는 conntest.err) 파일)을 Editor 로 열어보면 필요한 lib 파일의 이름이 나와있다. 그 lib 파일을 make 파일의 LIBS 부분에 추가해 주면 된다.
3.3 DOS 창에서 nmake –f conntest.mak 명령을 실행한다. 3.4 실행 프로그램을 수행한다.
4. 기본적인 UniSQL Embedded SQL programming. 4.1 *.C 프로그램을 작성한다. (아래 예제는 UniSQL의 hotel class에서 호텔 명과 가격 정보를 가져와서, ‘H’ 로 시작하는 호텔의 가격 평균을 보여주는 프로그램이다. 파일명은 ‘staticesql’) #include <stdio.h> extern int satisfaction_guaranteed(char *name); main (int argc, char **argv) { float total_cost = 0.0; int n_cost = 0; EXEC SQLX WHENEVER SQLERROR STOP; uci_startup(argv[0]); EXEC SQLX DECLARE c CURSOR FOR SELECT name, cost FROM ALL hotel; EXEC SQLX CONNECT 'demodb'; EXEC SQLX OPEN c FOR READ ONLY; for(;;){ EXEC SQLX BEGIN DECLARE SECTION; char name[100]; float cost; EXEC SQLX END DECLARE SECTION; EXEC SQLX WHENEVER NOT FOUND GOTO not_found; EXEC SQLX FETCH c INTO :name, :cost; if (satisfaction_guaranteed(name)){ total_cost += cost; n_cost += 1; } not_found: EXEC SQLX CLOSE c; EXEC SQLX DISCONNECT; if(n_cost) printf("Average Cost = %f\n", total_cost/n_cost); else printf("I Can't get no... satisfaction...\n"); exit(0); int satisfaction_guaranteed(char *name) { return (name[0] == 'H');
4.2 DOS 창에서 ‘esqlx staticesql’ 명령어를 실행한다. 4.3 아래와 같은 내용의 TEXT 파일을 작성하고, ‘staticesql.mak’ 란 이름으로 저장한다. # # $Revision: 3.1 $ # Makefile for NT example. # Change PROJ to the name of the executable you want to produce. PROJ = staticesql OFILES = $(PROJ).obj INCLUDES = /I$(UNISQLX)\include \ /I"C:\Program Files\Microsoft Visual Studio\VC98\Include" SYMBOLS = /D_X86_ /DNT /DPC /DMSVC /DXONE /DPRODUCTION /D_OLEAUTO_H_ DFLAGS = -debug:full -debugtype:cv CFLAGS = /nologo /c -DWIN32 -D_WIN32 /MD -Z7 -Od $(SYMBOLS) $(INCLUDES) LFLAGS = /NODEFAULTLIB /INCREMENTAL:NO /PDB:NONE /RELEASE \ /NOLOGO -align:0x1000 -subsystem:console,3.50 \ -entry:mainCRTStartup LIBS = "C:\Program Files\Microsoft Visual Studio\VC98\Lib\msvcrt.lib" \ "C:\Program Files\Microsoft Visual Studio\VC98\Lib\kernel32.lib" \ $(UNISQLX)/lib/ordbcl32.lib $(UNISQLX)/lib/orescl32.lib $(PROJ).exe: $(OFILES) link $(LFLAGS) /map $(OFILES) $(LIBS) >$*.lko .C.OBJ: $(CC) $(CFLAGS) /c $*.C
4.4 DOS 창에서 nmake –f staticesql.mak 명령을 실행한다. 4.5 실행 프로그램을 수행한다.