找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 646|回复: 3

[发布] AutoLISP连接MySQL数据库开发接口API (2008-2018)

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-3-25 22:54:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 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示例:

  1. (defun AcadPlatform (/ proc_arch str)
  2.     (if (and (setq proc_arch (getenv "PROCESSOR_ARCHITECTURE"))
  3.              (< 1 (strlen proc_arch))
  4.              (eq "64" (substr proc_arch (1- (strlen proc_arch))))
  5.         )
  6.         (setq str "x64")
  7.         (setq str "x32")
  8.     )
  9.     str
  10. )

  11. (defun LOADSQLITELSP (/ FN)
  12.   (if (= (substr (getvar "acadver") 6) "Bricscad")
  13.    (progn
  14.     (and (not (= 'EXRXSUBR (type dsql_query)))
  15.          (setq FN (findfile (strcat "SQLiteLspv"
  16.                                     (substr (getvar "_vernum") 1 2)
  17.                                     (AcadPlatform)
  18.                                     ".ARX"
  19.                             )
  20.                   )
  21.          )
  22.          (arxload FN (strcat "\nError loading " FN))
  23.     )
  24.   )
  25.   (progn
  26.     (and (not (= 'EXRXSUBR (type dsql_query)))
  27.          (setq FN (findfile (strcat "SQLiteLsp"
  28.                                     (substr (getvar "acadver") 1 2)
  29.                                     (AcadPlatform)
  30.                                     ".ARX"
  31.                             )
  32.                   )
  33.          )
  34.          (arxload FN (strcat "\nError loading " FN))
  35.     )
  36.     (if (not (= 'EXRXSUBR (type dsql_query)))
  37.         (progn (dcl_messagebox
  38.                    "Can't Find SQLiteLspXX.ARX, Make sure its loaded"
  39.                    "Cancel"
  40.                    2
  41.                    2
  42.                )
  43.                (exit)
  44.          )
  45.       )
  46.     )
  47.   )
  48. )


  1. ;DSQL_OPEN
  2. ;DSQL_CLOSE
  3. ;DSQL_CLOSEALL
  4. ;DSQL_QUERY
  5. ;DSQL_ASSOCQUERY
  6. ;DSQL_DML
  7. ;DSQL_SCALAR
  8. ;DSQL_SCALAR
  9. ;DSQL_CMPSTMT
  10. ;DSQL_STMTBIND
  11. ;DSQL_STMTFNL
  12. ;DSQL_VER
  13. ;DSQL_SQLITEVER
  14. ;DSQL_PRINTF
  15. ;DSQL_GETFORMAT
  16. ;DSQL_PRINTFX
  17. ;DSQL_GETFORMATX
  18. ;DSQL_LOADEXT
  19. ;DSQL_LASTERR
  20. ;DSQL_DUMPERR



  21. (DEFUN CHKERR (CMD)
  22.   (IF (NOT CMD)
  23.     (PROGN
  24.       (PRINC (DSQL_LASTERR))
  25.       NIL
  26.     )
  27.    T
  28.   )
  29. )



  30. (DEFUN C:loadext ( / db)
  31.   (SETQ DLL "libspatialite-4.dll")  
  32.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  33.   (DSQL_OPEN DB)
  34.   (PRINC (DSQL_LASTERR(DSQL_LOADEXT DB DLL)))
  35.   (DSQL_CLOSE DB)
  36. )

  37. ;(SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  38. (SETQ DB "C:\\Users\\Daniel\\Documents\\test.db")

  39. ;;; (CREATEDATABSE "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  40. ;;; (CREATEDATABSE "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  41. (DEFUN CREATEDATABSE (PATH)
  42.   (CHKERR (DSQL_OPEN PATH))
  43.   (CHKERR (DSQL_CLOSE PATH))
  44. )

  45. (DEFUN C:EnableKeys ( / a db)
  46.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  47.   (CHKERR (DSQL_OPEN DB))
  48.   (DSQL_QUERY DB "PRAGMA foreign_keys = ON;")
  49.   (SETQ A (DSQL_QUERY DB "PRAGMA foreign_keys;"))
  50.   (CHKERR (DSQL_CLOSE DB))
  51.   A
  52. )

  53. ;;; CREATE A NEW TABLE
  54. (DEFUN C:CREATETABLE ( / db)
  55.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  56.   (CHKERR (DSQL_OPEN DB))
  57.   (CHKERR (DSQL_DML DB "CREATE TABLE MyTable (No int, FirstName char(64), LastName char(64), age int);"))
  58.   (CHKERR (DSQL_CLOSE DB))
  59. )

  60. ;;; INSERT DATA
  61. (DEFUN C:ADDSTUFF (/ DB)
  62.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  63.   (CHKERR (DSQL_OPEN DB))
  64.   (CHKERR (DSQL_DML DB "INSERT INTO MyTable VALUES (1, 'Donald', 'Luck ' , 99);"))
  65.   (CHKERR (DSQL_DML DB "INSERT INTO MyTable VALUES (2, 'Mickey', 'Mouse' , 101);"))
  66.   (CHKERR (DSQL_DML DB "INSERT INTO MyTable VALUES (3, 'Minni' , 'Mouse' , 29);"))
  67.   (CHKERR (DSQL_CLOSE DB))
  68. )


  69. ;;; get data, note all queries are returned in the format
  70. ;;; ((col1 name col2 name col3 name)(data1 data2 data3)....)
  71. ;;; exeptions are return as
  72. ;;; (nil . error message)
  73. (DEFUN C:GETME ( / db)
  74.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  75.   (CHKERR (DSQL_OPEN DB))
  76.   (SETQ A (DSQL_QUERY DB "SELECT * FROM MyTable;"))
  77.   (CHKERR (DSQL_CLOSE DB))
  78.   A
  79. )

  80. (DEFUN C:GETME2 ( / a db)
  81.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  82.   (CHKERR (DSQL_OPEN DB))
  83.   (setq a(DSQL_ASSOCQUERY DB "SELECT * FROM MyTable WHERE age=%d;" 101))
  84.   (CHKERR (DSQL_CLOSE DB))
  85.   A
  86. )

  87. (DEFUN C:testME ( / a db)
  88.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  89.   (CHKERR (DSQL_OPEN DB))
  90.   (SETQ A (DSQL_QUERY DB "select AVG(age) from MyTable;"))
  91.   (CHKERR (DSQL_CLOSE DB))
  92.   A
  93. )


  94. (DEFUN C:GETMEA ( / a db)
  95.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  96.   (CHKERR (DSQL_OPEN DB))
  97.   (SETQ A (DSQL_ASSOCQUERY DB "SELECT * FROM MyTable;"))
  98.   (CHKERR (DSQL_CLOSE DB))
  99.   A
  100. )

  101. ;;; update a record,
  102. (DEFUN C:CHANGEME ( / db)
  103.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  104.   (CHKERR(DSQL_OPEN DB))
  105.   (CHKERR(DSQL_DML DB "UPDATE MyTable SET LastName='Duck' WHERE No=1;"))
  106.   (CHKERR(DSQL_CLOSE DB))
  107. )
  108. ;;; run getme to see the changes

  109. ;;; A compiled statement example
  110. (DEFUN C:COMPILESTMT ( / db i)
  111.   (SETQ I 0)  
  112.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  113.   
  114.   ; CREATE A NEW DB
  115.   (CHKERR(DSQL_OPEN DB))  
  116.   
  117.   ; MAKE A NEW TABLE
  118.   (CHKERR(DSQL_DML DB "create table Test2(No int, Num1 int, Num2 float, Name char(64));"))
  119.   
  120.   ; START A TRANSACTION
  121.   (CHKERR(DSQL_DML DB "begin transaction;"))
  122.   
  123.   ; this is our compiled statement, we will bind data to ?
  124.   (CHKERR(DSQL_CMPSTMT DB "insert into Test2 values (?, ?, ?, ?);"))
  125.   
  126.   ; ADD OUR VALUES
  127.   (REPEAT 100
  128.     (CHKERR(DSQL_STMTBIND (SETQ I (1+ I)) 87 12.012 "HelloWorld"))
  129.   )  
  130.   
  131.   ; COMMIT THE TRANSACTION
  132.   (CHKERR(DSQL_DML DB "commit transaction;"))
  133.   
  134.   ; We must call this to clear the compiled statement
  135.   ; and finalize the transaction
  136.   (CHKERR(DSQL_STMTFNL))
  137.   
  138.   ; CLOSE THE DB
  139.   (CHKERR(DSQL_CLOSE DB))
  140. )

  141. ;;; check our data



  142. ;Progecad 2.000,

  143. ;;; lets run a performance test, create a table and insert 10,000 records
  144. (DEFUN C:BENCH1 ( / db end i start)
  145.   (SETQ I 0)
  146.   (SETVAR "cmdecho" 0)
  147.   (SETQ START (GETVAR "TDUSRTIMER"))
  148.   
  149.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  150.   (CHKERR(DSQL_OPEN DB))
  151.   (CHKERR(DSQL_DML DB "create table Test1(No int, Name char(64));"))
  152.   (CHKERR(DSQL_DML DB "begin transaction;"))
  153.   (REPEAT 10000
  154.      (CHKERR(DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db"
  155.         (STRCAT "insert into Test1 values ("
  156.            (ITOA (SETQ I (1+ I))) ", 'Welcome To TheSwamp');")))
  157.   )
  158.   (CHKERR (DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" "commit transaction;"))
  159.   (CHKERR (DSQL_CLOSE "C:\\Users\\Daniel\\Documents\\mysqlite.db"))
  160.   
  161.   (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  162.   (PRINC "\n")
  163.   (PRINC END)
  164.   (PRINC)
  165. )
  166. ;;; autocad = 1.515 , bricscad = 0.967969 seconds on my old paint

  167. ;1.00000
  168. (DEFUN C:BENCH2 ( / db end i pi start)
  169.   (SETQ I 0)
  170.   (SETVAR "cmdecho" 0)
  171.   (SETQ START (GETVAR "TDUSRTIMER"))
  172.   
  173.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  174.   (CHKERR(DSQL_OPEN DB))
  175.   (CHKERR(DSQL_DML DB "create table Test3(No int, Num1 int, Num2 int, Num3 float);"))
  176.   (CHKERR(DSQL_CMPSTMT DB "insert into Test3 values (?, ?, ?, ?);"))
  177.   (CHKERR(DSQL_DML DB "begin transaction;"))
  178.   (REPEAT 10000
  179.      (CHKERR(DSQL_STMTBIND (SETQ I (1+ I)) 87 12 3.13))
  180.   )
  181.   (CHKERR (DSQL_DML DB "commit transaction;"))
  182.   (DSQL_STMTFNL)
  183.   (CHKERR (DSQL_CLOSE DB))
  184.   
  185.   (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  186.   (PRINC "\n")
  187.   (PRINC END)
  188.   (PRINC)
  189. )


  190. (DEFUN C:BENCH3 ( / db end i pi start)
  191.   (SETQ I 0)
  192.   (SETVAR "cmdecho" 0)
  193.   (SETQ START (GETVAR "TDUSRTIMER"))
  194.   
  195.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  196.   (CHKERR(DSQL_OPEN DB))
  197.   
  198.   (REPEAT 100
  199.     (setq q(DSQL_QUERY "C:\\Users\\Daniel\\Documents\\mysqlite.db" "SELECT * FROM Test3;"))
  200.   )
  201.   (CHKERR (DSQL_CLOSE DB))
  202.   
  203.   (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  204.   (PRINC "\n")
  205.   (PRINC END)
  206.   (PRINC)
  207. )


  208. ;;; autocad = 1.703 seconds on my old paint
  209. (DEFUN C:BENCH4 ( / db end i start)
  210.   (SETQ I 0)
  211.   (SETVAR "cmdecho" 0)
  212.   (SETQ START (GETVAR "TDUSRTIMER"))
  213.   
  214.   (SETQ DB "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  215.   (CHKERR(DSQL_OPEN DB))
  216.   (CHKERR(DSQL_DML DB "create table Test4(No int, Num float ,Name char(64));"))
  217.   (CHKERR(DSQL_DML DB "begin transaction;"))
  218.   (REPEAT 10000
  219.      (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"))
  220.   )
  221.   (CHKERR (DSQL_DML DB "commit transaction;"))
  222.   (CHKERR (DSQL_CLOSE DB))
  223.   
  224.   (SETQ END (* 86400.0 (- (GETVAR "TDUSRTIMER") START)))
  225.   (PRINC "\n")
  226.   (PRINC END)
  227.   (PRINC)
  228. )


  229. ;(DSQL_PRINTF "-%X-" 16777215)
  230. ;(DSQL_GETFORMAT (ENTGET(CAR(ENTSEL))))
  231. ;(DSQL_PRINTF "(%ld)(%s)(%ld)(%s)(%s)(%d)(%s)(%s)(%s)(%.15g,%.15g,%.15g)(%.15g,%.15g,%.15g)(%.15g,%.15g,%.15g)" (ENTGET(CAR(ENTSEL))))
  232. ;(DSQL_GETFORMATX (ENTGET(CAR(ENTSEL))))
  233. ;(DSQL_PRINTFX (strcat "(%d,%ld)(%d,%s)(%d,%ld)(%d,%s)(%d,%s)(%d,%d)(%d,%s)(%d,%s)(%d,%s)(%d,%.15g,%.15"
  234. ;                      "g,%.15g)(%d,%.15g,%.15g,%.15g)(%d,%.15g,%.15g,%.15g)") (ENTGET(CAR(ENTSEL))))
  235. ;(DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" "insert into Test4 values (%d, %.15g, '%s');" 9  3.14159 "Welcome to the Swamp")
  236. ;(DSQL_PRINTF "insert into Test4 values (%d, %.15g, '%s');" 1  3.14159 "Welcome to the Swamp")
  237. ;(DSQL_GETFORMAT (ENTGET(CAR(ENTSEL))))
  238. ;(DSQL_PRINTFX "insert into Test4 values (%d, %.15g, '%s');" 1  3.14159 "Welcome to the Swamp")
  239. ;(DSQL_GETFORMATX (ENTGET(CAR(ENTSEL))))
  240. ;(DSQL_PRINTF "%s %s" T nil)
  241. ;(DSQL_PRINTF "insert into Test4 values (%d, %.15g, '%s');" 8  3.14159 "Welcome to the Swamp"))
  242. ;(DSQL_OPEN  "C:\\Users\\Daniel\\Documents\\mysqlite.db")
  243. ;(CHKERR(DSQL_DML "C:\\Users\\Daniel\\Documents\\mysqlite.db" "create table 5(No int, Num1 int, Num2 int, Num3 float);"))
  244. ;(DSQL_CLOSE "C:\\Users\\Daniel\\Documents\\mysqlite.db")

  245. ;//Inconsistency detected by ld.so: dl-close.c: 743: _dl_close: Assertion `map->l_init_called' failed!

  246. ;//http://people.mozilla.com/~chofmann/l10n/tree/mozilla/db/sqlite3/sqlite-fix-non-unicode-win.patch

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:SQLiteLsp.rar 
下载次数:43  文件大小:4.37 MB  售价:10D豆 [记录]
下载权限: 学生 以上  [免费赚D豆]


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6468个

财富等级: 富甲天下

发表于 2018-3-26 00:21:06 | 显示全部楼层
沙发。      
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-3-27 11:50:03 | 显示全部楼层
@marting,大侠你好,非常感谢你提供这个lisp操作数据库的API,在载入Arx中遇到如下问题:
1.“LOADSQLITELSP ”函数中dsql_query、dcl_messagebox几个函数在AutoLisp或者vlisp中没有定义?
2.“SQLiteLsp22x32.arx”、“SQLiteLsp22x64.arx”等等几个arx文件应该放在哪个文件夹才能载入,“LOADSQLITELSP ”函数中并没有路径。
不好意思啊,学习lisp不深入,问题浅显,还请大侠不吝赐教。感谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

发表于 2018-3-28 00:17:31 | 显示全部楼层
谢谢分享。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-19 19:34 , Processed in 0.382981 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表