设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 13360|回复: 2
打印 上一主题 下一主题

[ADO/DAO] 【新手入门】之十四:浅谈ADO之Command(下)

[复制链接]
跳转到指定楼层
1#
发表于 2014-11-12 10:33:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       了解选择查询后,再来看看操作查询。这里先贴出代码:
  1. Sub CreateTbl()
  2. Dim cmd As NewADODB.Command
  3. cmd.ActiveConnection= CurrentProject.Connection
  4. cmd.CommandText= "create table 工资表 (工号 longconstraint 工号 primarykey,工资条序号autoincrement(10000,1)," _
  5.                 & "发放日期 datetime, constraint 日期检查 check(发放日期<=date()),工资 currency default 5000)"
  6. cmd.Execute
  7. End Sub
复制代码
      这段创建表的SQL命名不复杂,主要是创建一个 “工资表”,各字段属性如下:
       工号:长整型,主键;
       工资条序号,自动编号,初始值为10000,每次递增1;
       发放日期:日期类型,有效性规则为发放日期必须不能大于当前日期。
       工资:货币性,默认值为5000(工资会不会很低啊?^_^)
       在设计模式下,我们看不出发放日期的“有效性规则”有什么变化。但是输入数据之后就知道,真的被约束了。当然,约束不仅仅限于此。以下是部分语法供参考和说明,由于时间关系,我并没有亲测,如大家发现有什么问题,欢迎回帖:
       1.        约束级联参考完整性原则:
CONSTRAINT nameFOREIGN KEY (column1[,column2[,……]) REFERRENCES foreign-table [(foreign-column1[,foreign-column2[,……])] [ON UPDATE {NO ACTION|CASCADE}][ONUPDATE {NO ACTION|CASCADE}]
说明:
       A、中括号内的为可选参数,小括号内的为必选参数。即至少要有一个主表外键,外联表则可以不需要对应的连接字段。
       B、如果选中NO CASCADE选项,相当于关系中的不级联,那么一对多的关系中,子表并不会随主表的更新而更新。同样地,子表删除了外键(即主表的主键)的所有记录,那么主表所对应主键也不会因此而被删除。
       2.        控制快速外键:
      语法跟上面的类似,不同的是,需要在“FOREIGN KEY”后面加上“NO INDEX”。
       3.        执行列字符串压缩
       Columnstring-data-type [(length)] WITH COMPRESSION
       事实上我并不太清楚这个代码是用来干吗的。
       接下来,我们试试删掉这个表怎么样?右击\删除?删不掉?我再删?……好了,别试了,用VBA来删吧:
       把上面的代码改成:
  1. cmd.CommandText = "Drop table 工资表"
复制代码
      再执行一遍试试看?是不是删掉了?
      当然,更简单点的办法是用Access的DeleteObject宏来删除(对应的VBA代码是DoCmd.DeleteObject acTable,"工资表")。
      既然Command能够做这些事情,Connection对象当然也没问题啦。大家可以试试用Connection对象来修改下上面的语法,算是课后作业吧。^_^

视图和存储过程。
       这不是SQL Server里的对象吗?Access里什么时候有这些对象了?Roych,你是不是搞错了?还是我看错了?
是的,你没看错,我也没搞错。Access里确实没有这些对象,但是ADO却可以创建它们。虽然在Access里看不见它们,——准确点说,应该是可以看见,只是它们都长成了查询的样子,以至于我们认不出来了。现在,我们就来见识一下吧:
‘       创建一个视图
  1. Sub crtView()
  2. Dim cmd As New ADODB.Command
  3. cmd.ActiveConnection= CurrentProject.Connection
  4. cmd.CommandText= "create view myView as select 企业代码,服务代码 frommytable"
  5. cmd.Execute
  6. End Sub
复制代码
      打开视图并显示记录条数
  1. Sub showview()
  2. Dim rst As New ADODB.Recordset
  3. rst.Open"myview", CurrentProject.Connection, adOpenStatic, adLockOptimistic
  4. MsgBoxrst.RecordCount
  5. End Sub
复制代码
      创建一个含参数的存储过程。
  1. Sub crtpro()
  2. Dim cmd As NewADODB.Command
  3. cmd.ActiveConnection= CurrentProject.Connection
  4. cmd.CommandText= "create procedure mypro(企业代码 text) as select 企业代码,服务代码 frommytable where 企业代码=@企业代码"
  5. cmd.Execute
  6. End Sub
复制代码
     执行存储过程,输入参数
  1. Sub showpro()
  2. Dim rst As New ADODB.Recordset
  3. Dim cmd As New ADODB.Command
  4. cmd.ActiveConnection= CurrentProject.Connection
  5. cmd.CommandText= "execute mypro '850225'"
  6. Set rst =cmd.Execute
  7. MsgBox rst(1)
  8. End Sub
复制代码
       盗梦提出,不能使用Recordcount属性(详见:http://www.office-cn.net/thread-119047-1-1.html)。测试后发现确实如此,但还是可以用MoveNext方式的。对于需要列出多项数据时,我们可以用Do……Loop来处理。
  1. Sub showpro()
  2. Dim rst As New ADODB.Recordset
  3. Dim cmd As New ADODB.Command
  4. cmd.ActiveConnection = CurrentProject.Connection
  5. cmd.CommandText = "execute mypro 1"
  6. Set rst = cmd.Execute
  7. Do Until rst.EOF
  8. Debug.Print rst(1)
  9.     rst.MoveNext
  10. Loop
  11. End Sub
复制代码
【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别

【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集

【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统

评分

参与人数 1经验 +12 收起 理由
tmtony + 12

查看全部评分

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
发表于 2014-11-12 10:53:15 | 只看该作者
赞一个,好贴。

点击这里给我发消息

3#
发表于 2016-5-30 23:17:10 | 只看该作者
感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-26 23:03 , Processed in 0.081874 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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