明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3643|回复: 3

[求助]如何嵌入SQL

[复制链接]
发表于 2003-9-3 15:54:00 | 显示全部楼层 |阅读模式
那为高手告知如何在LISP中嵌入SQL语句。还是根本就不可能,只能在VB 与  C++
在C++中怎样嵌入。与C一样吗? EXEC SQL  吗?
发表于 2003-9-4 22:11:00 | 显示全部楼层
lisp我想应该不行的,因为他不支持activex,但Vlisp是可以的,下面是我以前写得一个程序,当时测试过了的,

;;;下面的这个函数是用来加载ado库的函数,已经测试成功
(vl-load-com)
(defun ado:initado (/ adopath)
  (if (null adom-append)
    (progn
      (setq
        adopath        (strcat        (getenv "systemdrive")
                        "\\Program Files\\Common Files\\System\\Ado\\"
                )
      )
      (if (findfile (strcat adopath "msado15.dll"))
        (vlax-import-type-library
          :tlb-filename
          (strcat adopath "msado15.dll")
          :methods-prefix
          "adom-"
          :properties-prefix
          "adop-"
          :constants-prefix
          "adoc-"
        )
        (alert "没有在指定的路径发现ado库文件")
      )
    )
  )
)


;;;下面这个函数是一个用来执行查询命令的函数,接受一个字符串(sql查询语)
;;;然后返回一个记录集,如果是修改查询的话,则返回T
(defun ado:execute_sql (sqltxt             tag          /
                        connect_obj  connect_str  recordset
                        affectlines  repeat_num          dispstr
                        thereturn
                       )
  (setq connect_obj (vlax-create-object "adodb.connection"))
  (setq connect_str "DSN=northwind_test;UID=saWD=800513")
  (adop-put-connectiontimeout connect_obj 40)
  (adom-open connect_obj          connect_str
             "sa"                  "noguess"
             adoc-adconnectunspecified
            )
  (if tag
    (progn
      (setq recordset (vlax-create-object "adodb.recordset"))
      (adom-open recordset            sqltxt
                 connect_obj            adoc-adOpenkeyset
                 adoc-adLockOptimistic
                 -1
                )
      (setq thereturn recordset)
    )
    (progn
      (adom-execute connect_obj sqltxt affectedlines adoc-adCmdUnknown)
      (setq thereturn T)
    )
  )
  (setq thereturn thereturn)
)

;;;下面的函数是主函数,其中引用了前面声明的函数
;;;函数的功能是将一个dwg文件中的所有具有 "HOUSE"
;;;扩展应用程序名的实体中的扩展数据入库道SQL数据库中,
;;;这个例子的表中就有两个字段"type"和"area".
(defun ado:input_database(/ ss ss_len xdata_list repeatnum j i area htype)
  (ado:initado)
  (setq ss (ssget "x" '((-3 ("HOUSE")))))
  (setq ss_len (sslength ss) i 0)
  (repeat ss_len
    (setq xdata_list (cdr(assoc '-3 (entget (ssname ss i) '("HOUSE")))))
    (setq repeatnum (length xdata_list) j 0)
    (repeat repeatnum
      (if (= (car (nth j xdata_list)) "HOUSE")
        (progn
         (setq area (cdr (assoc '1040 (cdr(nth j xdata_list)))))
         (setq htype (cdr (assoc '1000 (cdr(nth j xdata_list)))))
         )
        )
      (setq j (1+ j))
      )
    (ado:execute_sql (strcat "insert into house_info (type,area) values ('" htype "'," (rtos area 2 2) ")") nil)
    (setq i (1+ i))
    )
  (alert "房屋扩展数据入库成功")
  )

;;;这个函数是用来显示数据库中的相关房子的信息,当数据库信息保存道一定的量,
;;;可以用Vlisp程序来根据信息出DWG图形,其实,DWG文件就是一个数据库,稍微知道
;;;一点ARX的就可以知道,看看版主leeyeafu写的连载一吧,前面的部分可能会让
;;;你豁然开朗.
(defun ado:disp_database(/ recordset repeat_num dispstr )
  (setq recordset (ado:execute_sql "select * from house_info order by right(type,4)" T))
  (setq repeat_num (adop-get-recordcount recordset))
  (setq dispstr "")
  (repeat repeat_num
    (setq
      dispstr
       (strcat
         dispstr
         "\n"
         (vlax-variant-value(adop-get-value (adop-get-item (adop-get-fields recordset) "type"))) "\t"
         (rtos (vlax-variant-value(adop-get-value (adop-get-item (adop-get-fields recordset) "area"))) 2 2)
       )
    )
    (if        (/= (adop-get-eof recordset) t)
      (adom-movenext recordset)
    )
  )
  (alert dispstr)
)


相关说明:
程序中所建立的表house_info放在数据库northwind数据库中
请自己创建一个odbc连接,能顺利连接到northwind数据库就可以了,

评分

参与人数 1威望 +1 金钱 +2 贡献 +1 激情 +2 收起 理由
leeyeafu + 1 + 2 + 1 + 2 【好评】好程序

查看全部评分

 楼主| 发表于 2003-9-8 16:11:00 | 显示全部楼层
非常感谢您的指点
发表于 2007-12-4 08:52:00 | 显示全部楼层

(adom-open connect_obj  connect_str
  "sa"   "noguess"
  adoc-adconnectunspecified
  )

运行到这句时出现; 错误: Automation 错误。 操作已被取消。请问是什么问题?

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-22 20:22 , Processed in 0.159648 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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