| 
UID3388积分3322精华贡献 威望 活跃度 D豆 在线时间 小时注册时间2002-3-28最后登录1970-1-1 
 | 
 
| 
本帖最后由 newer 于 2018-3-25 23:01 编辑
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册 
    
 提供了函数:
 
 
 DSQL_OPEN
 DSQL_CLOSE
 DSQL_CLOSEALL
 DSQL_QUERY
 DSQL_ASSOCQUERY
 DSQL_DML
 DSQL_SCALAR
 DSQL_SCALARSTR
 DSQL_CMPSTMT
 DSQL_STMTBIND
 DSQL_STMTFNL
 DSQL_VER
 DSQL_SQLITEVER
 DSQL_PRINTF
 DSQL_GETFORMAT
 DSQL_PRINTFX
 DSQL_GETFORMATX
 DSQL_LOADEXT
 DSQL_LASTERR
 DSQL_DUMPERR
 
 更多参见附件里面的帮助文档。
 
 LISP示例:
 
 
  (defun AcadPlatform (/ proc_arch str)
    (if (and (setq proc_arch (getenv "PROCESSOR_ARCHITECTURE"))
             (< 1 (strlen proc_arch))
             (eq "64" (substr proc_arch (1- (strlen proc_arch))))
        )
        (setq str "x64")
        (setq str "x32")
    )
    str
)
(defun LOADSQLITELSP (/ FN)
  (if (= (substr (getvar "acadver") 6) "Bricscad")
   (progn
    (and (not (= 'EXRXSUBR (type dsql_query)))
         (setq FN (findfile (strcat "SQLiteLspv"
                                    (substr (getvar "_vernum") 1 2)
                                    (AcadPlatform)
                                    ".ARX"
                            )
                  )
         )
         (arxload FN (strcat "\nError loading " FN))
    )
  )
  (progn
    (and (not (= 'EXRXSUBR (type dsql_query)))
         (setq FN (findfile (strcat "SQLiteLsp"
                                    (substr (getvar "acadver") 1 2)
                                    (AcadPlatform)
                                    ".ARX"
                            )
                  )
         )
         (arxload FN (strcat "\nError loading " FN))
    )
    (if (not (= 'EXRXSUBR (type dsql_query)))
        (progn (dcl_messagebox
                   "Can't Find SQLiteLspXX.ARX, Make sure its loaded"
                   "Cancel"
                   2
                   2
               )
               (exit)
         )
      )
    )
  )
)
 
  ;DSQL_OPEN
;DSQL_CLOSE
;DSQL_CLOSEALL
;DSQL_QUERY
;DSQL_ASSOCQUERY
;DSQL_DML
;DSQL_SCALAR
;DSQL_SCALAR
;DSQL_CMPSTMT
;DSQL_STMTBIND
;DSQL_STMTFNL
;DSQL_VER
;DSQL_SQLITEVER
;DSQL_PRINTF
;DSQL_GETFORMAT
;DSQL_PRINTFX
;DSQL_GETFORMATX
;DSQL_LOADEXT
;DSQL_LASTERR
;DSQL_DUMPERR
(DEFUN CHKERR (CMD)
  (IF (NOT CMD)
    (PROGN
      (PRINC (DSQL_LASTERR))
      NIL
    )
   T
  )
)
(DEFUN C:loadext ( / db)
  (SETQ DLL "libspatialite-4.dll")  
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (DSQL_OPEN DB)
  (PRINC (DSQL_LASTERR(DSQL_LOADEXT DB DLL)))
  (DSQL_CLOSE DB)
)
;(SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
(SETQ DB "C:\\Users\\Daniel\\Documents\\test.db")
;;; (CREATEDATABSE "C:\\Users\\Daniel\\Documents\\mysqlite.db")
;;; (CREATEDATABSE "C:\\Users\\Daniel\\Documents\\mysqlite.db")
(DEFUN CREATEDATABSE (PATH)
  (CHKERR (DSQL_OPEN PATH))
  (CHKERR (DSQL_CLOSE PATH))
)
(DEFUN C:EnableKeys ( / a db)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR (DSQL_OPEN DB))
  (DSQL_QUERY DB "PRAGMA foreign_keys = ON;")
  (SETQ A (DSQL_QUERY DB "PRAGMA foreign_keys;"))
  (CHKERR (DSQL_CLOSE DB))
  A
)
;;; CREATE A NEW TABLE
(DEFUN C:CREATETABLE ( / db)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR (DSQL_OPEN DB))
  (CHKERR (DSQL_DML DB "CREATE TABLE MyTable (No int, FirstName char(64), LastName char(64), age int);"))
  (CHKERR (DSQL_CLOSE DB))
)
;;; INSERT DATA
(DEFUN C:ADDSTUFF (/ DB)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR (DSQL_OPEN DB))
  (CHKERR (DSQL_DML DB "INSERT INTO MyTable VALUES (1, 'Donald', 'Luck ' , 99);"))
  (CHKERR (DSQL_DML DB "INSERT INTO MyTable VALUES (2, 'Mickey', 'Mouse' , 101);"))
  (CHKERR (DSQL_DML DB "INSERT INTO MyTable VALUES (3, 'Minni' , 'Mouse' , 29);"))
  (CHKERR (DSQL_CLOSE DB))
)
;;; get data, note all queries are returned in the format
;;; ((col1 name col2 name col3 name)(data1 data2 data3)....)
;;; exeptions are return as
;;; (nil . error message)
(DEFUN C:GETME ( / db)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR (DSQL_OPEN DB))
  (SETQ A (DSQL_QUERY DB "SELECT * FROM MyTable;"))
  (CHKERR (DSQL_CLOSE DB))
  A
)
(DEFUN C:GETME2 ( / a db)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR (DSQL_OPEN DB))
  (setq a(DSQL_ASSOCQUERY DB "SELECT * FROM MyTable WHERE age=%d;" 101))
  (CHKERR (DSQL_CLOSE DB))
  A
)
(DEFUN C:testME ( / a db)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR (DSQL_OPEN DB))
  (SETQ A (DSQL_QUERY DB "select AVG(age) from MyTable;"))
  (CHKERR (DSQL_CLOSE DB))
  A
)
(DEFUN C:GETMEA ( / a db)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR (DSQL_OPEN DB))
  (SETQ A (DSQL_ASSOCQUERY DB "SELECT * FROM MyTable;"))
  (CHKERR (DSQL_CLOSE DB))
  A
)
;;; update a record,
(DEFUN C:CHANGEME ( / db)
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR(DSQL_OPEN DB))
  (CHKERR(DSQL_DML DB "UPDATE MyTable SET LastName='Duck' WHERE No=1;"))
  (CHKERR(DSQL_CLOSE DB))
)
;;; run getme to see the changes
;;; A compiled statement example
(DEFUN C:COMPILESTMT ( / db i)
  (SETQ I 0)  
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  
  ; CREATE A NEW DB
  (CHKERR(DSQL_OPEN DB))  
  
  ; MAKE A NEW TABLE
  (CHKERR(DSQL_DML DB "create table Test2(No int, Num1 int, Num2 float, Name char(64));")) 
  
  ; START A TRANSACTION
  (CHKERR(DSQL_DML DB "begin transaction;"))
  
  ; this is our compiled statement, we will bind data to ?
  (CHKERR(DSQL_CMPSTMT DB "insert into Test2 values (?, ?, ?, ?);"))
  
  ; ADD OUR VALUES
  (REPEAT 100
    (CHKERR(DSQL_STMTBIND (SETQ I (1+ I)) 87 12.012 "HelloWorld"))
  )  
  
  ; COMMIT THE TRANSACTION
  (CHKERR(DSQL_DML DB "commit transaction;"))
  
  ; We must call this to clear the compiled statement 
  ; and finalize the transaction
  (CHKERR(DSQL_STMTFNL))
  
  ; CLOSE THE DB
  (CHKERR(DSQL_CLOSE DB))
)
;;; check our data
;Progecad 2.000, 
;;; lets run a performance test, create a table and insert 10,000 records
(DEFUN C:BENCH1 ( / db end i start)
  (SETQ I 0)
  (SETVAR "cmdecho" 0)
  (SETQ START (GETVAR "TDUSRTIMER"))
  
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR(DSQL_OPEN DB))
  (CHKERR(DSQL_DML DB "create table Test1(No int, Name char(64));"))
  (CHKERR(DSQL_DML DB "begin transaction;"))
  (REPEAT 10000
     (CHKERR(DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" 
        (STRCAT "insert into Test1 values (" 
           (ITOA (SETQ I (1+ I))) ", 'Welcome To TheSwamp');")))
  )
  (CHKERR (DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" "commit transaction;"))
  (CHKERR (DSQL_CLOSE "C:\\Users\\Daniel\\Documents\\mysqlite.db"))
  
  (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  (PRINC "\n")
  (PRINC END)
  (PRINC)
)
;;; autocad = 1.515 , bricscad = 0.967969 seconds on my old paint
;1.00000
(DEFUN C:BENCH2 ( / db end i pi start)
  (SETQ I 0)
  (SETVAR "cmdecho" 0)
  (SETQ START (GETVAR "TDUSRTIMER"))
  
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR(DSQL_OPEN DB))
  (CHKERR(DSQL_DML DB "create table Test3(No int, Num1 int, Num2 int, Num3 float);"))
  (CHKERR(DSQL_CMPSTMT DB "insert into Test3 values (?, ?, ?, ?);"))
  (CHKERR(DSQL_DML DB "begin transaction;"))
  (REPEAT 10000
     (CHKERR(DSQL_STMTBIND (SETQ I (1+ I)) 87 12 3.13))
  )
  (CHKERR (DSQL_DML DB "commit transaction;"))
  (DSQL_STMTFNL)
  (CHKERR (DSQL_CLOSE DB))
  
  (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  (PRINC "\n")
  (PRINC END)
  (PRINC)
)
(DEFUN C:BENCH3 ( / db end i pi start)
  (SETQ I 0)
  (SETVAR "cmdecho" 0)
  (SETQ START (GETVAR "TDUSRTIMER"))
  
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR(DSQL_OPEN DB))
  
  (REPEAT 100
    (setq q(DSQL_QUERY "C:\\Users\\Daniel\\Documents\\mysqlite.db" "SELECT * FROM Test3;"))
  )
  (CHKERR (DSQL_CLOSE DB))
  
  (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  (PRINC "\n")
  (PRINC END)
  (PRINC)
)
;;; autocad = 1.703 seconds on my old paint
(DEFUN C:BENCH4 ( / db end i start)
  (SETQ I 0)
  (SETVAR "cmdecho" 0)
  (SETQ START (GETVAR "TDUSRTIMER"))
  
  (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  (CHKERR(DSQL_OPEN DB))
  (CHKERR(DSQL_DML DB "create table Test4(No int, Num float ,Name char(64));"))
  (CHKERR(DSQL_DML DB "begin transaction;"))
  (REPEAT 10000
     (CHKERR(DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" "insert into Test4 values (%d, %.15g, '%s');" (SETQ I (1+ I))  3.14159 "Welcome to the Swamp"))
  )
  (CHKERR (DSQL_DML DB "commit transaction;"))
  (CHKERR (DSQL_CLOSE DB))
  
  (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  (PRINC "\n")
  (PRINC END)
  (PRINC)
)
;(DSQL_PRINTF "-%X-" 16777215)
;(DSQL_GETFORMAT (ENTGET(CAR(ENTSEL))))
;(DSQL_PRINTF "(%ld)(%s)(%ld)(%s)(%s)(%d)(%s)(%s)(%s)(%.15g,%.15g,%.15g)(%.15g,%.15g,%.15g)(%.15g,%.15g,%.15g)" (ENTGET(CAR(ENTSEL))))
;(DSQL_GETFORMATX (ENTGET(CAR(ENTSEL))))
;(DSQL_PRINTFX (strcat "(%d,%ld)(%d,%s)(%d,%ld)(%d,%s)(%d,%s)(%d,%d)(%d,%s)(%d,%s)(%d,%s)(%d,%.15g,%.15"
;                      "g,%.15g)(%d,%.15g,%.15g,%.15g)(%d,%.15g,%.15g,%.15g)") (ENTGET(CAR(ENTSEL))))
;(DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" "insert into Test4 values (%d, %.15g, '%s');" 9  3.14159 "Welcome to the Swamp")
;(DSQL_PRINTF "insert into Test4 values (%d, %.15g, '%s');" 1  3.14159 "Welcome to the Swamp")
;(DSQL_GETFORMAT (ENTGET(CAR(ENTSEL))))
;(DSQL_PRINTFX "insert into Test4 values (%d, %.15g, '%s');" 1  3.14159 "Welcome to the Swamp")
;(DSQL_GETFORMATX (ENTGET(CAR(ENTSEL))))
;(DSQL_PRINTF "%s %s" T nil)
;(DSQL_PRINTF "insert into Test4 values (%d, %.15g, '%s');" 8  3.14159 "Welcome to the Swamp"))
;(DSQL_OPEN  "C:\\Users\\Daniel\\Documents\\mysqlite.db")
;(CHKERR(DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" "create table 5(No int, Num1 int, Num2 int, Num3 float);"))
;(DSQL_CLOSE "C:\\Users\\Daniel\\Documents\\mysqlite.db")
;//Inconsistency detected by ld.so: dl-close.c: 743: _dl_close: Assertion `map->l_init_called' failed!
;//http://people.mozilla.com/~chofmann/l10n/tree/mozilla/db/sqlite3/sqlite-fix-non-unicode-win.patch
 
 | 
 |