明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3892|回复: 11

[求助][版主请进]VLISP怎么读取ACCESS里的长二进制数据

  [复制链接]
发表于 2009-2-19 09:32 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-3-11 15:28:51 编辑

各位高手,VLISP怎么读取数据库ACCESS里的长二进制数据????
这个ACCESS文件是其它程序的数据库文件,存的是多个坐标值,我存了几个坐标值,用VLISP读出来是一些三位数的数字,
数据前后对比如下:
一、坐标值:0,0  0,100  100,100  100,0
VLISP读出的数据:
195 255 210 15 188 140 207 17 171 222 8 0 54 1 183 105 5 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 64 0 0 0 0 0 0 0 0
0 0 0 0 0 0 89 64 0 0 0 0 0 0 89 64 0 0 0 0 0 0 0 0
0 0 0 0 0 0 89 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 89 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
二、坐标值:12345.678,87654.321  11111.111,22222.222 99999.999,0.0   77777.777,88888.888  55555.555,66666.666    33333.333,44444.444
VLISP读出的数据: 195 255 210 15 188 140 207 17 171 222 8 0 54 1 183 105 7 0 0 0
88 57 180 200 214 28 200 64 96 229 208 34 101 102 245 64 0 0 0 0 0 0 0 0
238 124 63 53 142 179 197 64 238 124 63 53 142 179 213 64 0 0 0 0 0 0 0 0
141 108 231 251 255 105 248 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
80 141 151 110 28 253 242 64 238 124 63 53 142 179 245 64 0 0 0 0 0 0 0 0
41 92 143 194 113 32 235 64 178 157 239 167 170 70 240 64 0 0 0 0 0 0 0 0
178 157 239 167 170 70 224 64 238 124 63 53 142 179 229 64 0 0 0 0 0 0 0 0
178 157 239 167 170 70 224 64 238 124 63 53 142 179 229 64 0 0 0 0 0 0 0 0
第一排和最后一排好像不是坐标数据,数据是不是要解密才可以读出来,请高手指点!!!
源程序如下(数据库文件见附件):
  1. [code](defun c:dqmdb()
  2.   ;;;读取MDB数据库
  3.   (setvar "cmdecho" 0)
  4.   (setvar "osmode" 0)
  5.   (if (/= (findfile "e:\\数据库.mdb") nil)
  6.     (progn
  7.       (setq ado1(vlax-get-or-create-object "ADODB.Connection"))
  8.       (setq ado2(vlax-get-or-create-object "ADODB.Recordset"))
  9.       (setq ado12(vlax-get-or-create-object "ADODB.Recordset"))
  10.       (setq ados1 (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" "e:\\数据库.mdb;Persist Security Info=False"))
  11.       (setq ado3(vlax-put-property ado1 "ConnectionString" ados1))
  12.       (vlax-invoke-method ado1 "open" ados1 "" "" -1)
  13.       (vlax-invoke-method ado2 "open" (strcat "select * from " "属性") ado1 2 3 1)
  14.       (vlax-invoke-method ado2 "MoveFirst")
  15.       (setq at1(vlax-get-property (vlax-get-property ado2 "Fields") "item" 2))
  16.       (setq at2(vlax-get-property at1 "Value"))
  17.       (setq at3(vlax-variant-value at2))
  18.       (vlax-safearray-get-dim at3)
  19.       (vlax-safearray-get-l-bound at3 1)
  20.       (vlax-safearray-get-u-bound at3 1)
  21.       (vlax-safearray-get-element at3 0)
  22.       (vlax-safearray-type at3)
  23.       (setq at4(vlax-safearray->list at3))
  24.       (vlax-invoke-method ado2 "MoveFirst")
  25.       (vlax-invoke-method ado2 "close")
  26.       (vlax-invoke-method ado1 "close")
  27.       )))
[/code]at4数据为195 255 210 15 188 140 207 17 171 222 8 0 54 1 183 105 7 0 0 0 88 57 180 200 214 28 200 64 96 229 208 34 101 102 245 64 0 0 0 0 0 0 0 0 238 124 63 53 142 179 197 64 238 124 63 53 142 179 213 64 0 0 0 0 0 0 0 0 141 108 231 251 255 105 248 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 141 151 110 28 253 242 64 238 124 63 53 142 179 245 64 0 0 0 0 0 0 0 0 41 92 143 194 113 32 235 64 178 157 239 167 170 70 240 64 0 0 0 0 0 0 0 0 178 157 239 167 170 70 224 64 238 124 63 53 142 179 229 64 0 0 0 0 0 0 0 0 178 157 239 167 170 70 224 64 238 124 63 53 142 179 229 64 0 0 0 0 0 0 0 0)

本帖子中包含更多资源

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

x
发表于 2009-2-24 16:57 | 显示全部楼层

我想这个篇文章和下面的程序也许能满足你的要求。

http://acad.fleming-group.com/index.html

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2009-2-20 16:30 | 显示全部楼层
怎么就没有高手看一下呢!!
发表于 2009-2-21 11:21 | 显示全部楼层
楼主厉害,直接去解mdb文件格式。

建议先去搜索格式。
 楼主| 发表于 2009-2-24 14:39 | 显示全部楼层

      (setq ado1(vlax-get-or-create-object "ADODB.Connection"))
      (setq ado2(vlax-get-or-create-object "ADODB.Recordset"))
      (setq ado12(vlax-get-or-create-object "ADODB.Recordset"))
      (setq ados1 (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" "e:\\数据库.mdbersist Security Info=False"))
      (setq ado3(vlax-put-property ado1 "ConnectionString" ados1))
      (vlax-invoke-method ado1 "open" ados1 "" "" -1)
      (vlax-invoke-method ado2 "open" (strcat "select * from " "坐标") ado1 2 3 1)
      (vlax-invoke-method ado2 "MoveFirst")
      (setq at1(vlax-get-property (vlax-get-property ado2 "Fields") "item" 76))
      (setq at2(vlax-get-property at1 "Value"))
      (setq at3(vlax-variant-value at2))

就是at2里的数据

其它字段的数据都能读取,数据类型是字串、数字等,坐标字段的是长二进制数据,读出来就不是坐标了

难道不是这样读取数据的嘛!那该怎么样读取???

 楼主| 发表于 2009-2-25 11:42 | 显示全部楼层
先下来看看,谢了哦!!
 楼主| 发表于 2009-2-27 15:02 | 显示全部楼层

英语不好, 看不懂。

但是可能也不能解决问题,MDB文件里没有长二进制数据,我要的是怎么读取长二进制数据。

那位高手,帮忙看看!!

 楼主| 发表于 2009-3-2 16:46 | 显示全部楼层
......
发表于 2009-3-10 17:18 | 显示全部楼层
  1. ;;===========================
  2. ;;功能:获取数值
  3. ;;参数:LST  ----表
  4. ;;      I1   ----起始位置
  5. ;;      I2   ----终止位置
  6. ;;      INT  ----位长
  7. (defun TT-01 (LST I1 I2 INT / SUM I)
  8.     (setq SUM (nth I1 LST))
  9.     (setq I 1)
  10.     (while (progn
  11.            (setq I1 (1+ I1))
  12. &#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160; (<= I1 I2)
  13. &#160;&#160; &#160;&#160;&#160; )
  14. &#160;&#160; &#160;(setq SUM (+ SUM (lsh (nth I1 LST) (* I INT))))
  15. &#160;&#160;&#160; )
  16. &#160;&#160;&#160; SUM
  17. )
  18. ;;======
  19. ;;获取文本
  20. (vl-load-com)
  21. (defun TT-02 (LST I LEN / LST_NEW)
  22. &#160;&#160;&#160; (setq LST_NEW '())
  23. &#160;&#160;&#160; (repeat LEN
  24. &#160;&#160; &#160;(if (> (nth I LST) 0)
  25. &#160;&#160; &#160;&#160;&#160;&#160; (setq LST_NEW (cons&#160;&#160; &#160;(nth I LST)
  26. &#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;LST_NEW
  27. &#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160; )
  28. &#160;&#160; &#160;&#160;&#160;&#160; )
  29. &#160;&#160; &#160;)
  30. &#160;&#160; &#160;(setq I (1+ I))
  31. &#160;&#160;&#160; )
  32. &#160;&#160;&#160; (vl-list->string (reverse LST_NEW))
  33. )
  34. ;;======
 楼主| 发表于 2009-3-11 15:25 | 显示全部楼层
源程序如下(数据库文件见附件):
  1. (defun c:dqmdb()
  2.   ;;;读取MDB数据库
  3.   (setvar "cmdecho" 0)
  4.   (setvar "osmode" 0)
  5.   (if (/= (findfile "e:\\数据库.mdb") nil)
  6.     (progn
  7.       (setq ado1(vlax-get-or-create-object "ADODB.Connection"))
  8.       (setq ado2(vlax-get-or-create-object "ADODB.Recordset"))
  9.       (setq ado12(vlax-get-or-create-object "ADODB.Recordset"))
  10.       (setq ados1 (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" "e:\\数据库.mdb;Persist Security Info=False"))
  11.       (setq ado3(vlax-put-property ado1 "ConnectionString" ados1))
  12.       (vlax-invoke-method ado1 "open" ados1 "" "" -1)
  13.       (vlax-invoke-method ado2 "open" (strcat "select * from " "属性") ado1 2 3 1)
  14.       (vlax-invoke-method ado2 "MoveFirst")
  15.       (setq at1(vlax-get-property (vlax-get-property ado2 "Fields") "item" 2))
  16.       (setq at2(vlax-get-property at1 "Value"))
  17.       (setq at3(vlax-variant-value at2))
  18.       (vlax-safearray-get-dim at3)
  19.       (vlax-safearray-get-l-bound at3 1)
  20.       (vlax-safearray-get-u-bound at3 1)
  21.       (vlax-safearray-get-element at3 0)
  22.       (vlax-safearray-type at3)
  23.       (setq at4(vlax-safearray->list at3))
  24.       (vlax-invoke-method ado2 "MoveFirst")
  25.       (vlax-invoke-method ado2 "close")
  26.       (vlax-invoke-method ado1 "close")
  27.       )))

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-2 21:05 , Processed in 4.707245 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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