iDwgTools Programs (for AutoCAD)

arx119.egloos.com

포토로그 방명록



iDwgSql 개발 소식 (bata ver.) iDwgSql 프로그램

안녕하세요.

날씨가 변덕스러운 하루인것 같습니다.
엊그제 같은데 벌써 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-update.lsp

- sqlite3-insert.lsp

- sqlite3-exec.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


덧글

  • 쇠쟁이 2015/03/18 11:01 # 삭제 답글

    아 이건 뭔가요?^^ 설명이 동영상으로 있으면 이해가 쉬울듯 한데? 프로그램만드는 건가요?
  • arx119 2015/03/18 21:05 #

    안녕하세요.
    리습 프로그램에서 사용할수있는 db프로그램입니다
    다음에는 예제 프로그램을 만들고 동영상 올리겠습니다
  • KraZ 2015/04/19 13:24 # 삭제 답글

    안녕하세요..
    아주 예전부터 ARX119님의 iDWGTab프로그램을 감사히 사용하고 있는 유저입니다. 정말 너무나도 감사하게 생각합니다.
    전 GIS분야에서 일을 하고 있고 Lisp을 사용한지는 한 10여년정도 됩니다.
    제가 요즘 고민하고 있는 부분이 AutoCAD Map3D와 DB를 연동하여 대용량 데잉터에서 쿼리를 빠르게 수행하는 것에 대해 고민하고 있습니다. 이미 AutoCAD Map3D에서 Database연동부분이 있기는 하지만 잘 사용하지 않는 부분이라 대체 방안 또는 기존 DB연동에 대해 면밀한 검토를 하고자 하고 있는 와중에 Arx119님의 이글을 발견하게 되었습니다. 그래서 더욱 반가운것 같네요...
    앞으로 두어달은 많이 바쁠것 같아 그 이후에 바로 SQLlite를 면밀히 공부하고 만들어주신 Lisp 함수들을 이용해 데이터 관리에 대해 고민을 해봐야 겠습니다. 좋은 기능 만들어 주셔서 감사하단 말씀 전하고 싶네요...그리고 AutoCAD 2016버젼용도 추가해 주시면 감사하겠네요...
    연말에는 Arx119님의 큰 도움으로 2016버젼에서 데이터 관리에 좋은 성과를 냈다는 말씀을 드리고 싶네요...부디 좋은 프로그램으로 좋은 평가 받으시길 바랍니다.
댓글 입력 영역



구글번역

통계 위젯 (화이트)

78163
818
497828

국가접속Flag

free counters

iDwgTools 후원하기