안녕하세요.
날씨가 변덕스러운 하루인것 같습니다.
엊그제 같은데 벌써 8년이 흘렀네요. 8년은 iDwgSql을 정리를 못하고 손을 놓고 있던 시간입니다.
다시 iDwgSql을 수정해서 2015까지 테스트를 마쳤습니다.
참고적으로 iDwgSql을 AutoLISP 개발자가 사용할 수 있도록 리습함수로 제공하고 있습니다.
(일반 캐드사용자 분들은 잘 이해 하시지 못하실 수 있습니다.)
http://www.sqlite.org/
[주요기능]
1. 리습프로그램에서 쉽게 DB 기능을 사용하실 수 있습니다.
2. SQLite3의 커널함수를 AutoLISP함수로 Wrapping시켜서 다양한 형태의 DB작업이 가능합니다.
3. 처리속도가 빠르고 Sqlite3로 생성된 DB파일을 Access할 수 있습니다.
4. AutoCAD (ANSI, UNICODE)에서 UTF8 코드를 지원합니다.
5. DB 콜백함수를 리습함수로 처리할 수 있도록 지원합니다.
6. DB 사용자 함수를 리습함수로 작성할 수 있도록 개발중입니다.
[샘플코드]
;;; 2014-06 : iDwgSql
;;; sqlite3-open
;;; sqlite3-exec
;;; sqlite3-close
;;; $idwgsql-cfgpath : 프로그램이 생성한 변수로 idwgsql의 환경 DB파일의 경로임
;;; Database에 테이블을 생성함.
(defun c:sql_create()
;sql db파일을 오픈
(setq db (sqlite3-open (strcat $idwgsql-cfgpath "idwgsql.cfg")))
(setq sql
"CREATE TABLE `레이어목록` (
`Name` TEXT,
`Color` INTEGERT,
`OnOff` INTEGER,
`LineType` TEXT,
PRIMARY KEY(Name)
);"
)
;쿼리문을 실행
(sqlite3-exec db sql)
;DB파일을 닫음(닫지 않은 DB핸들은 DWG가 닫힐때 자동으로 닫아줌)
(sqlite3-close db)
(princ)
)
;;; 레이어목록 테이블을 삭제함
(defun c:sql_delete()
(setq db (sqlite3-open (strcat $idwgsql-cfgpath "idwgsql.cfg")))
(setq sql "DROP TABLE '레이어목록';")
(sqlite3-exec db sql)
(sqlite3-close db)
(princ)
)
(princ)
;;; 2014-12-06 : iDwgSql
;;; 레이어목록 테이블에 값을 인서트 시킴
(defun c:sql_insert()
(setq db (sqlite3-open (strcat $idwgsql-cfgpath "idwgsql.cfg")))
(setq sql "INSERT INTO 레이어목록(Name, OnOff, Color, LineType) values (?,?,?,?);")
;SQLite Statement문을 생성
(setq stmt (sqlite3-prepare db sql))
;SQLite Statement문의 변수를 바인딩하여 값을 입력함
(sqlite3-bind-text stmt 1 "WALL" )
(sqlite3-bind-int stmt 2 1)
(sqlite3-bind-int stmt 3 7)
(sqlite3-bind-text stmt 4 "continuous")
;SQLite Statement문을 실행함(DB에 값 생성)
(sqlite3-step stmt)
(princ "\nRow id was ")(princ (sqlite3-last-insert-rowid db))
;SQLite Statement문을 종료시킴(종료되지 않은 STMT는 DWG파일이 닫힐때 자동 종료)
(sqlite3-finalize stmt)
(sqlite3-close db)
(princ)
)
;;; 2014-12-06 : iDwgSql
;;; sqlite3-open, sqlite3-close
;;; sqlite3-prepare
;;; sqlite3-bind-int, sqlite3-bind-text
;;; sqlite3-finalize
;;; 레이어목록 테이블의 특정 값을 변경함
(defun c:sql_update()
(setq db (sqlite3-open (strcat $idwgsql-cfgpath "idwgsql.cfg")))
(setq sql "UPDATE 레이어목록 SET 색상 = ? WHERE 레이어명 = ?")
(setq stmt (sqlite3-prepare db sql))
(sqlite3-bind-int stmt 1 14)
(sqlite3-bind-text stmt 2 "WALL")
(sqlite3-step stmt)
(sqlite3-finalize stmt)
(sqlite3-close db)
(princ)
)
;;; 2014-12-06 : iDwgSql
;;; sqlite3-exec db sql
;;; argc : int , argv : list, colname : list
;;; argc 필드의 개수, argv 필드값, colname : 필드명
;;; 테이블의 row개수 만큼 반복 호출됨
(defun print-callback(argc argv colname)
(setq cc 0)
(while (if (< cc argc)
(progn
(princ (nth cc colname)) (princ ",") (princ (type (nth cc argv)))
(princ " = ")
(princ (nth cc argv))
(princ "\n")
(setq cc (+ cc 1))
)
))
(princ)
)
;;; SQL쿼리문을 실행하고 콜백리습함수를 연결해서 처리함
(defun c:sql_exec()
(setq db (sqlite3-open (strcat $idwgsql-cfgpath "idwgsql.cfg")))
(setq sql "select * from 레이어목록;")
(sqlite3-exec db sql "print-callback")
(sqlite3-close db)
(princ)
)
[프로그램 다운로드]
- iDwgSql2000.arx : AutoCAD 2000/2000i/2002
- iDwgSql2004.arx : AutoCAD 2004/2005/2006
- iDwgSql2007.arx : AutoCAD(32) 2007/2008/2009
- iDwgSql2007x.arx: AutoCAD(64) 2007/2008/2009
- iDwgSql2010.arx : AutoCAD(32) 2010/2011/2012
- iDwgSql2010x.arx : AutoCAD(64) 2010/2011/2012
- iDwgSql2013.arx : AutoCAD(32) 2013/2014
- iDwgSql2013x.arx : AutoCAD(64) 2013/2014
- iDwgSql2015.arx : AutoCAD(32) 2015
- iDwgSql2015x.arx : AutoCAD(64) 2015
- idwgsql.cfg (공통, 동일한 폴더에 위치시킴)
- sqlite3-create.lsp
[지원하는 리습함수]
sqlite3-open
sqlite3-close
sqlite3-exec
sqlite3-prepare
sqlite3-finalize
sqlite3-reset
sqlite3-column-count
sqlite3-column-name
sqlite3-column-type
sqlite3-column-int
sqlite3-column-text
sqlite3-step
sqlite3-errmsg
sqlite3-aggregate-context
sqlite3-aggregate-count
sqlite3-bind-blob
sqlite3-bind-double
sqlite3-bind-int
sqlite3-bind-int64
sqlite3-bind-null
sqlite3-bind-parameter_count
sqlite3-bind-parameter_index
sqlite3-bind-parameter_name
sqlite3-bind-text
sqlite3-bind-text16
sqlite3-busy-handler
sqlite3-busy-timeout
sqlite3-changes
sqlite3-clear-bindings
sqlite3-collation-needed
sqlite3-collation-needed16
sqlite3-column-blob
sqlite3-column-bytes
sqlite3-column-bytes16
sqlite3-column-database_name
sqlite3-column-database_name16
sqlite3-column-decltype
sqlite3-column-decltype16
sqlite3-column-double
sqlite3-column-int64
sqlite3-column-name16
sqlite3-column-origin_name
sqlite3-column-origin_name16
sqlite3-column-table_name
sqlite3-column-table_name16
sqlite3-column-text16
sqlite3-commit-hook
sqlite3-complete
sqlite3-complete16
sqlite3-create-collation
sqlite3-create-collation16
sqlite3-create-function
sqlite3-create-function16
sqlite3-data-count
sqlite3-db-handle
sqlite3-enable-shared-cache
sqlite3-errcode
sqlite3-errmsg16
sqlite3-expired
sqlite3-extended-result-codes
sqlite3-free
sqlite3-free-table
sqlite3-get-autocommit
sqlite3-get-table
sqlite3-global-recover
sqlite3-interrupt
sqlite3-last-insert-rowid
sqlite3-libversion
sqlite3-malloc
sqlite3-mprintf
sqlite3-open16
sqlite3-prepare16
sqlite3-prepare16-v2
sqlite3-prepare-v2
sqlite3-progress-handler
sqlite3-realloc
sqlite3-release-memory
sqlite3-result-blob
sqlite3-result-double
sqlite3-result-error
sqlite3-result-error16
sqlite3-result-int
sqlite3-result-int64
sqlite3-result-null
sqlite3-result-text
sqlite3-result-text16
sqlite3-result-text16be
sqlite3-result-text16le
sqlite3-result-value
sqlite3-rollback-hook
sqlite3-set-authorizer
sqlite3-sleep
sqlite3-soft-heap-limit
sqlite3-table-column-metadata
sqlite3-thread-cleanup
sqlite3-total-changes
sqlite3-trace
sqlite3-transfer-bindings
sqlite3-update-hook
sqlite3-user-data
sqlite3-value-blob
sqlite3-value-bytes
sqlite3-value-bytes16
sqlite3-value-double
sqlite3-value-int
sqlite3-value-int64
sqlite3-value-text
sqlite3-value-text16
sqlite3-value-text16be
sqlite3-value-text16le
sqlite3-value-type
sqlite3-vmprintf
덧글
리습 프로그램에서 사용할수있는 db프로그램입니다
다음에는 예제 프로그램을 만들고 동영상 올리겠습니다
아주 예전부터 ARX119님의 iDWGTab프로그램을 감사히 사용하고 있는 유저입니다. 정말 너무나도 감사하게 생각합니다.
전 GIS분야에서 일을 하고 있고 Lisp을 사용한지는 한 10여년정도 됩니다.
제가 요즘 고민하고 있는 부분이 AutoCAD Map3D와 DB를 연동하여 대용량 데잉터에서 쿼리를 빠르게 수행하는 것에 대해 고민하고 있습니다. 이미 AutoCAD Map3D에서 Database연동부분이 있기는 하지만 잘 사용하지 않는 부분이라 대체 방안 또는 기존 DB연동에 대해 면밀한 검토를 하고자 하고 있는 와중에 Arx119님의 이글을 발견하게 되었습니다. 그래서 더욱 반가운것 같네요...
앞으로 두어달은 많이 바쁠것 같아 그 이후에 바로 SQLlite를 면밀히 공부하고 만들어주신 Lisp 함수들을 이용해 데이터 관리에 대해 고민을 해봐야 겠습니다. 좋은 기능 만들어 주셔서 감사하단 말씀 전하고 싶네요...그리고 AutoCAD 2016버젼용도 추가해 주시면 감사하겠네요...
연말에는 Arx119님의 큰 도움으로 2016버젼에서 데이터 관리에 좋은 성과를 냈다는 말씀을 드리고 싶네요...부디 좋은 프로그램으로 좋은 평가 받으시길 바랍니다.
Map3D에선 쓰임새가 많았겠네요.. 한 주 잘 보내시구요.. 그럼...