设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1116|回复: 24

[求助] MYSQL数据库

[复制链接]

已领礼包: 60个

财富等级: 招财进宝

发表于 2018-12-27 00:26:51 | 显示全部楼层 |阅读模式

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

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

x
(setq myRs (vlax-create-object "ADODB.Recordset"))
(Setq ConnectionObject(vlax-create-object "ADODB.Connection"))
(setq strCon (strcat "DRIVER={MySQL ODBC 8.0 Unicode Driver};UID=root;Password=123456;DATABASE=user_management;SERVER=192.168.1.101"))
        (setq userID "root" userPassword "123456")
(setq str11 (strcase (getstring "\n请输入:")))
(setq TempObject(vl-catch-all-apply'vlax-invoke-method(list ConnectionObject "Open" strCon userID  userPassword ADOConstant-adConnectUnspecified)))
(vl-catch-all-apply'vlax-invoke-method(list  myRs "Open" (strcat "select * from nema WHERE nb='" str11 "'" ) TempObject 1 1 -1))
(if (= (vlax-get-property myRs "RecordCount") 0)
      (progn
                                (ALERT (strcat "未找到:" str11 "记录!"))
                                (EXIT)
                        )
                        (progn
                                (setq Result (ADOLISP_DoSQL ConnectionObject SQLStatement))
                        )
                )

我想实现,查找nb字段,如果输入的没有提示然后退出,有的话就继续执行。
上面代码有问题,请大老帮忙看看吗

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

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-12-27 00:37:57 | 显示全部楼层
貌似用VLISP链接ODBC,只能在32位CAD下用

点评

WIN10 64都可以连接成功。win7 64也可以  详情 回复 发表于 2018-12-27 12:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 60个

财富等级: 招财进宝

 楼主| 发表于 2018-12-27 12:22:25 | 显示全部楼层
Lisphk 发表于 2018-12-27 00:37
貌似用VLISP链接ODBC,只能在32位CAD下用

WIN10 64都可以连接成功。win7 64也可以

点评

说的不是系统的位数,是ACAD的位数 32位版的ACAD ACAD 2005,ACAD2006,.....ACAD2010 32位版....ACAD2019 32位版  详情 回复 发表于 2018-12-27 13:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-12-27 13:02:35 | 显示全部楼层
abc498091367 发表于 2018-12-27 12:22
WIN10 64都可以连接成功。win7 64也可以

说的不是系统的位数,是ACAD的位数
32位版的ACAD

ACAD 2005,ACAD2006,.....ACAD2010 32位版....ACAD2019 32位版

点评

大师哪儿能否lisp创建一个空库?  详情 回复 发表于 2018-12-28 17:18
哦, 现在上面的代码,可以连接,也可以读取。 我不知道怎么判断查找的字段是否存在。这个跟32位版的CAD有关系吗?  详情 回复 发表于 2018-12-27 14:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 60个

财富等级: 招财进宝

 楼主| 发表于 2018-12-27 14:16:27 | 显示全部楼层
Lisphk 发表于 2018-12-27 13:02
说的不是系统的位数,是ACAD的位数
32位版的ACAD

哦, 现在上面的代码,可以连接,也可以读取。
我不知道怎么判断查找的字段是否存在。这个跟32位版的CAD有关系吗?

点评

判断记录nb是否存在,你直接查询nb "select nb from nema"  详情 回复 发表于 2018-12-27 14:58
"select * from nema WHERE nb='" str11 "'" 这个是数据库查询语句,你要查啥改这里 后面加 like 判断字符串是否包含 select * from nema while nb like '%abc' 表示查找结尾是不是abc select * fro  详情 回复 发表于 2018-12-27 14:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-12-27 14:56:00 | 显示全部楼层
abc498091367 发表于 2018-12-27 14:16
哦, 现在上面的代码,可以连接,也可以读取。
我不知道怎么判断查找的字段是否存在。这个跟32位版的CAD ...

"select * from nema WHERE nb='" str11 "'"

这个是数据库查询语句,你要查啥改这里

后面加 like 判断字符串是否包含

select * from nema while nb like '%abc'

表示查找结尾是不是abc

select * from nema while nb like '%abc%'

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-12-27 14:58:18 | 显示全部楼层
abc498091367 发表于 2018-12-27 14:16
哦, 现在上面的代码,可以连接,也可以读取。
我不知道怎么判断查找的字段是否存在。这个跟32位版的CAD ...

判断记录nb是否存在,你直接查询nb

"select nb from nema"

点评

表名nb,有内容abc,但是查找后返回nil  详情 回复 发表于 2018-12-27 18:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 60个

财富等级: 招财进宝

 楼主| 发表于 2018-12-27 18:01:55 | 显示全部楼层
marting 发表于 2018-12-27 14:58
判断记录nb是否存在,你直接查询nb

"select nb from nema"

  1. (progn
  2.         (setq SQLStatement (strcat "select * from nema while nb like '%abc%'"))
  3.         (setq Result (ADOLISP_DoSQL ConnectionObject SQLStatement))
  4. )

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

使用道具 举报

已领礼包: 60个

财富等级: 招财进宝

 楼主| 发表于 2018-12-27 18:04:22 | 显示全部楼层
错了,是字段nb下有abc内容,但是查找后返回nil
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 60个

财富等级: 招财进宝

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

使用道具 举报

发表于 2018-12-27 23:37:18 | 显示全部楼层
;主函数"ADOLISP_Library.lsp"在这儿http://bbs.xdcad.net/forum.php?m ... =%CA%FD%BE%DD%BF%E2
下面是实用化子函数,最后是操作示例
  1. (if (not ADOLISP_ConnectToDB)
  2.   (load "ADOLISP_Library.lsp")
  3. )
  4. ;-----------------------------------
  5. 获取一个全路径数据库文件
  6. (defun getdb ( / desk)
  7. (setq desk
  8.             (vlax-invoke-method (vlax-get-property
  9.                     (vlax-create-object "wscript.shell")
  10.                      'SpecialFolders) 'Item  "desktop"));获取桌面路径
  11.     (getfiled "选择mdb文件" (strcat desk "\") "mdb" 8)
  12. );全路径文件名 or nil
  13. ;--------------------------------------------            
  14. ;打开数据库
  15. ;(DSQL_OPEN (getdb) "密码")
  16. (defun DSQL_OPEN (ff kg / ConnectString)
  17.         (if ff
  18.                 (progn
  19.                         (setq ConnectString
  20.                                 (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
  21.                                         ff ";Persist Security Info=False")
  22.                         )
  23.                         (ADOLISP_ConnectToDB ConnectString "admin" kg);密码权限
  24.                 )
  25.         )
  26. );对象 or nil,每一次打开要与一次关闭对应
  27. ;----------------------------------
  28. ;关闭数据库
  29. (defun  DSQL_close (db / )
  30.         (ADOLISP_DisconnectFromDB db)
  31.         (setq db nil)
  32. )
  33. ;------------------------------
  34. ;输出表记录集
  35. ;(SETQ db (DSQL_OPEN(getdb)""))
  36. ;(DSQL_SELECTall db "表名")
  37. (defun DSQL_SELECTall (db table /  )      
  38.     (ADOLISP_DoSQL db
  39.             (strcat "SELECT * FROM  " table ";")
  40.         )
  41. );含表头lst or nil,可判表是否存在

  42. ;---------------------------
  43. ;插入一行记录
  44. ;strlst:"(值1 值2 值3.。。。。)"值类型要与字段定义匹配
  45. ;(DSQL_Insertrow db "表名" "(1,'2e','3p','33')")
  46. ;注意,表里面字符用单引号(一般不支持双引号)
  47. (defun  DSQL_Insertrow (db table vlst /  )
  48.     (ADOLISP_DoSQL db
  49.             (strcat "INSERT INTO " table  " VALUES "  vlst ";")
  50.          )
  51. );t or nil
  52. ;-------------------------------
  53. ;删除所有行
  54. (defun DSQL_DELETErow (db table  / )     
  55.       (ADOLISP_DoSQL db
  56.               (strcat "DELETE FROM  " table ";")
  57.            )
  58. );仅余表头
  59. ;(ADOLISP_DoSQL db (strcat "DROP TABLE " 表名));删除表,表名也没聊
  60. ;(ADOLISP_DoSQL db (strcat "TRUNCATE TABLE " 表名));删除表格数据,数据为null?
  61. ;-----------------------------
  62. ; 创建一个表
  63. ;strlst:"(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)"
  64. ;"(Id_P int,Name varchar(255),mianji numeric(8,2))"
  65. (defun DSQL_TABLE (db table strlst / )
  66.         (if db      
  67.       (ADOLISP_DoSQL db
  68.               (strcat "CREATE TABLE  " table "  " strlst ";")
  69.            )
  70.    )
  71. ); t or nil
  72. ;创建索引 (ADOLISP_DoSQL db "CREATE INDEX index_name ON table_name (column_name)")
  73. ;------------------------------
  74. ;改某列数据类型
  75. ;其实仅该长度(精度)也可以
  76. ;arcgis创建的表,int,smallint分别为长、短整型,real为浮点数,FLOAT,DOUBLE,numeric均双精度
  77. ;(SETQ db (DSQL_OPEN(getdb)""))
  78. ;(DSQL_datatype db "aa" "mianji varchar(20)")
  79. ;(DSQL_close db)
  80. (defun DSQL_datatype (db table strs / )
  81.         (if db      
  82.       (ADOLISP_DoSQL db
  83.               (strcat "ALTER TABLE  " table " ALTER COLUMN " strs ";")
  84.            );"ALTER COLUMN column_name datatype"
  85.    )
  86. ); t or nil
  87. ;其他,
  88. ;(ADOLISP_DoSQL db "alter table FFM3 add column LLMJ varchar(20);")加一列,测试成功
  89. ;(ADOLISP_DoSQL db "alter table FFM3 drop column LLMJ;")删一列,测试成功
  90. ;"CREATE UNIQUE INDEX index_nameON table_name (column_name)"在表上创建一个唯一的索引
  91. ;"DROP INDEX index_name ON table_name"删除表格中的索引
  92. ;------------------------------------
  93. ;附2个工具函数
  94. ;全字符表转为SQL格式用字符串, 插入记录用
  95. ; (lst2SQL1 '("1" "2" "3" "4"))
  96. ;==> "('1','2','3','4')"
  97. (defun lst2SQL1 (lst)
  98.         (strcat "('"
  99.     (vl-string-right-trim
  100.         "','" (apply 'strcat (mapcar '(lambda (x)(strcat x "','")) lst))
  101.     )"')")
  102. )
  103. ;字符串表转字符型SQL字段表,创建表用
  104. ; (lst2SQL2 '("姓名" "籍贯" "工作地"))
  105. (apply 'strcat (mapcar '(lambda (x)(strcat x " varchar(20),")) lst))
  106. (defun lst2SQL2 (lst)
  107.         (strcat "("
  108.     (vl-string-right-trim
  109.         "," (apply 'strcat (mapcar '(lambda (x)(strcat x " varchar(50),")) lst))
  110.     )")")
  111. );写函数费事,这样创建后可以通过修改字段列数据类型达到自己要求

  112. ;-------------------------------------------
  113. ;;; 实用化示例
  114. (DEFUN C:ttt ( / db)
  115.   (if(SETQ db (DSQL_OPEN(getdb)""));指定mdb并打开
  116.           (progn
  117.                   ;(car(ADOLISP_GetTablesAndViews db));表名集
  118.                   (ADOLISP_GetColumns db "aa");表aa的字段信息:类型,长度,读写限制,精度,次序?                  
  119.                   ;(DSQL_Insertrow db "aa" "(2,'2f','cdg5')");表插入一行
  120.                   ;(DSQL_SELECTall db "FFM3");获取表全部记录
  121.                   ;(car(DSQL_SELECTall db "FFM3"));获取表字段
  122.                   ;(DSQL_DELETErow db "aa");表删除全部记录,仅余表头
  123.                   ;(DSQL_TABLE db "花名册" "(姓名 varchar(20),籍贯 varchar(20),年龄 int,工资 numeric(8,2))");创建表,arcgis创建的表,int,smallint分别为长、短整型,real为浮点数,FLOAT,DOUBLE,numeric均双精度
  124.                   ;(ADOLISP_DoSQL db (strcat "DROP TABLE " "ff"));删除表,表名也没聊
  125.                   ;(ADOLISP_DoSQL db (strcat "TRUNCATE TABLE " "ee"));删除表格数据,数据为null?
  126.                   (DSQL_close db);关闭mdb
  127.          )
  128.   )
  129. )

点评

这个全面了,多谢  详情 回复 发表于 2018-12-28 08:05
11楼注释掉(apply 'strcat (mapcar '(lambda (x)(strcat x " varchar(20),")) lst))  详情 回复 发表于 2018-12-27 23:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-12-27 23:49:55 | 显示全部楼层
本帖最后由 wzg356 于 2018-12-28 14:10 编辑
wzg356 发表于 2018-12-27 23:37
;主函数"ADOLISP_Library.lsp"在这儿http://bbs.xdcad.net/forum.php?m ... =%CA%FD%BE%DD%BF%E2
下面是实 ...

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

使用道具 举报

已领礼包: 60个

财富等级: 招财进宝

 楼主| 发表于 2018-12-28 08:05:02 | 显示全部楼层
wzg356 发表于 2018-12-27 23:37
;主函数"ADOLISP_Library.lsp"在这儿http://bbs.xdcad.net/forum.php?m ... =%CA%FD%BE%DD%BF%E2
下面是实 ...

这个全面了,多谢

点评

你哪儿能否lisp创建一个空库?  详情 回复 发表于 2018-12-28 17:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-12-28 17:16:17 | 显示全部楼层

你哪儿能否lisp创建一个空库?

点评

用ADOX创建数据库 (setq obj (vlax-create-object "ADOX.Catalog")) (vl-catch-all-apply 'vlax-invoke-method (list obj "create" "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\ew.mdb"))  详情 回复 发表于 2018-12-29 00:10
SQL查询语句: 创建个名字test的库 "create database test"  详情 回复 发表于 2018-12-28 23:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-12-28 17:18:55 | 显示全部楼层
Lisphk 发表于 2018-12-27 13:02
说的不是系统的位数,是ACAD的位数
32位版的ACAD

大师哪儿能否lisp创建一个空库?

点评

我都是设置好的,实现读写改删  详情 回复 发表于 2018-12-28 22:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2020-8-13 14:16 , Processed in 0.216904 second(s), 92 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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