ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: hyefeifei

[原创] 再讲ADO

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-5 11:22 | 显示全部楼层
本帖已被收录到知识树中,索引项:ADO技术
实战很精彩,期待下一讲

TA的精华主题

TA的得分主题

发表于 2016-4-5 14:30 | 显示全部楼层
hyefeifei 发表于 2016-4-4 19:44
  话说上一讲说到,要正确插入数据,必须先用Parameters Pefresh方法向数据库取元数据,
然后才可以正确 ...

讲的太棒了,让我对VBA和数据库的了解更进一步,我目前写的VBA都是通过以表为对象的操作完成的,如果用 ADO的方式效率应该就能达到质的提升,同时又能够多用户操作了。赞!
ps:adVarWChar nvarchar 对应这个是不是多打了个W,  adVarWChar

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-5 18:54 | 显示全部楼层
sf131906 发表于 2016-4-5 14:30
讲的太棒了,让我对VBA和数据库的了解更进一步,我目前写的VBA都是通过以表为对象的操作完成的,如果用 A ...

贴一下全的:
  1. adBigInt As Long = 20     '一个8字节的有符号的整数
  2. adBinary As Long = 128     '一个二进制值
  3. adBoolean As Long = 11     '一个布尔值
  4. adBSTR As Long = 8     '一个null终止的字符串
  5. adChapter As Long = 136     '章节类型,表明一个子记录集
  6. adChar As Long = 129     '字符串值
  7. adCurrency As Long = 6     '货币值,8字节有符号整数,范围到10000,小数点后4位
  8. adDate As Long = 7     '日期值,一个双精度数,其整数表示自1899年12月30日起的天数,其小数部分是当日的分数
  9. adDBDate As Long = 133     '日期值(yyyymmdd)
  10. adDBFileTime As Long = 137     '数据库文件的时间
  11. adDBTime As Long = 134     '时间值(hhmmss)
  12. adDBTimeStamp As Long = 135     '日期时间标志(yyyymmddhhmmss加12位小数)
  13. adDecimal As Long = 14     '表示固定精度和范围的精确数值
  14. adDouble As Long = 5     '一个双精度浮点值
  15. adEmpty As Long = 0     '没有值被指定
  16. adError As Long = 10     '32位错误代码
  17. adFileTime As Long = 64     'DOS/Win32下的文件时间,数值为自1601年1月1日起100纳秒数
  18. adGUID As Long = 72     '全局唯一的标识符
  19. adIDispatch As Long = 9     '一个指向OLE对象上IDispatch接口的指针
  20. adInteger As Long = 3     '4字节有符号整数
  21. adIUnknown As Long = 13     '一个指向OLE对象上的IUnknown接口的指针
  22. adLongVarBinary As Long = 205     '二进制长值
  23. adLongVarChar As Long = 201     '长字符串值
  24. adLongVarWChar As Long = 203     '以null结尾的字符串值
  25. adNumeric As Long = 131     '有固定精度和范围的精确数值
  26. adPropVariant As Long = 138     '一个Variant(与一个自动化Variant不等价)
  27. adSingle As Long = 4     '单精度浮点值
  28. adSmallInt As Long = 2     '2字节有符号整数
  29. adTinyInt As Long = 16     '1字节有符号整数
  30. adUnsignedBigInt As Long = 21     '8字节无符号整数
  31. adUnsignedInt As Long = 19     '4字节无符号整数
  32. adUnsignedSmallInt As Long = 18     '2字节无符号整数
  33. adUnsignedTinyInt As Long = 17     '1字节无符号整数
  34. adUserDefined As Long = 132     '用户自定义变量
  35. adVarBinary As Long = 204     '二进制值
  36. adVarChar As Long = 200     '字符串值
  37. adVariant As Long = 12     '自动化Variant
  38. adVarNumeric As Long = 139     '表示一个可变宽度的精确数,有符号的范围值
  39. adVarWChar As Long = 202     '以null结尾的Unicode字符串
  40. adWChar As Long = 130     '以null结尾的Unicode字符串
复制代码

TA的精华主题

TA的得分主题

发表于 2016-4-6 08:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-6 08:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-6 09:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
支持楼主,一直苦于找不到用VBA向数据库传数据的有效方法,楼主的帖子可谓久旱逢甘霖

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-6 14:16 | 显示全部楼层
本帖最后由 hyefeifei 于 2016-5-16 19:35 编辑

  原本想讲一下学习sql环境搭建,发现虽然不难,但要讲的话,却是很麻烦,各位可安装vmware workstation 12 pro版,建虚拟机,装windows server 2008 r2,在其中安装sql 2008r2,这些操作的教程,百度到处都是,有空的话,也许会做一个视频给大家。

  接着讲用临时表方式向数据库插入记录,且看程序截图:
                1.jpg
  因为后面还要讲到临时表,所以为避免枝蔓,在这里只对标示的8个参数讲解:

  1、 因为现在是要向数据库插入记录,所以不需要从数据库返回记录,加Where 1=2 只从数据库返回字段信息。

  2、 Recordset的Cursorlocation的属性可取以下2个值
         a)        Aduseserver        2
         b)        Aduseclient         3
       当取2时,由数据库管理查询结果
       当取3时,在本地内存中形成临时表
       因为2是默认值,所以当此属性出现时,必定是取aduseclient值

  3、这个参数除了下面两个值,其他基本不用
         a)        adOpenForwardOnly       0     '默认,打开一个只许前向类型的光标
         b)        adOpenStatic                3     '打开一个静态类型的光标
  当我们只从数据库读取数据时,可以取仅向前(adopenforwardonly),这样速度最快。
  一般来说,都是取3,也就是形成静态临时表,当cursorlocation值为aduseclient时,无论此参数取何值,都是静态临时表。

  4、这处的参数,如果取adlockbatchoptimistic,那么,每次addnew时,都会把插入的记录存入缓冲区,直到执行 8 updatebatch时,才批量向数据库插入记录。
  当取adLockOptimistic时,程序可以改为下图:
               2.jpg
  每次执行到update时,即向数据库插入当前记录。

  如果省略了update,那么,每次执行到addnew时,会把上一条记录插入数据库,到最后,会少插入一条记录,所以不能省。

  5、这里的参数,建议只取adcmdtext,这意思是说,strSQL变量里的字符串,永远要写标准的sql语句。
  举个例子:

stSQL=”Fltab”   
rst.Open strSQL, Conn, adOpenStatic, adLockOptimistic, adCmdTable

  注意,当用fltab表名,取代了select * from fltab时,相应的,adcmdtext参数,要改为adcmdtable,告诉ado,strsql里存的是表名,此时,ado会自动把 select * from fltab传给数据库,得到同样结果。这里不建议这样做,永远使用adcmdtext是一个比较好的选择。

  6、addnew 这个方法向数据库添加数据,除了如程序所未的方式外,你也可以这样使用addnew方法:
  rst.addnew array(‘ZY编号’,’序号’,’部件’,’零件’,’工序’),array(arr(i,1),arr(i,2),arr(i,3),arr(i,4),arr(i,5))
  即addnew后面跟两个数组,第一个数组放字段名,第二个数组放相应的字段值。

  7、以下引当前字段的值的方法,结果是一样的:

rst.Fields("ZY编号").Value
rst.Fields(0).Value
rst(0).Value
rst("ZY编号").Value
rst! ZY编号.Value
rst.Fields ("ZY编号")
rst.Fields (0)
rst (0)
rst ("ZY编号")
rst! ZY编号

  这里使用rst! ZY编号 这种方式

  8、updatebatch 这个在前面已经讲过了,当以乐观批更新锁的方式打开数据表时,每修改或插入一条记录,都放在缓冲区中,直到updatebatch方法执行时,才更新数据库。

  要讲的太多了,但是都讲,会冲淡主题,不讲,会有所缺漏,真是不好取舍,好在临时表这个话题,以后肯
定会再讲,先到这里吧。

  下一讲,准备讲一下数据库与文本文件,及excel与文本文件交互,主要讲一下文本文件的随机打开方式
  (Open 文件全路径 For Random As 文件号 Len = Len(udttype))


TA的精华主题

TA的得分主题

发表于 2016-4-6 15:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-7 10:53 | 显示全部楼层
hyefeifei 发表于 2016-4-6 14:16
原本想讲一下学习sql环境搭建,发现虽然不难,但要讲的话,却是很麻烦,各位可安装vmware workstation 12 p ...

感谢老师细心讲解

TA的精华主题

TA的得分主题

发表于 2016-4-8 10:33 | 显示全部楼层
hyefeifei 发表于 2016-4-6 14:16
原本想讲一下学习sql环境搭建,发现虽然不难,但要讲的话,却是很麻烦,各位可安装vmware workstation 12 p ...

学习!期待下一讲
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 16:55 , Processed in 0.033430 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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