了解选择查询后,再来看看操作查询。这里先贴出代码: - Sub CreateTbl()
- Dim cmd As NewADODB.Command
- cmd.ActiveConnection= CurrentProject.Connection
- cmd.CommandText= "create table 工资表 (工号 longconstraint 工号 primarykey,工资条序号autoincrement(10000,1)," _
- & "发放日期 datetime, constraint 日期检查 check(发放日期<=date()),工资 currency default 5000)"
- cmd.Execute
- 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来删吧: 把上面的代码改成: - cmd.CommandText = "Drop table 工资表"
复制代码 再执行一遍试试看?是不是删掉了? 当然,更简单点的办法是用Access的DeleteObject宏来删除(对应的VBA代码是DoCmd.DeleteObject acTable,"工资表")。 既然Command能够做这些事情,Connection对象当然也没问题啦。大家可以试试用Connection对象来修改下上面的语法,算是课后作业吧。^_^
视图和存储过程。 这不是SQL Server里的对象吗?Access里什么时候有这些对象了?Roych,你是不是搞错了?还是我看错了? 是的,你没看错,我也没搞错。Access里确实没有这些对象,但是ADO却可以创建它们。虽然在Access里看不见它们,——准确点说,应该是可以看见,只是它们都长成了查询的样子,以至于我们认不出来了。现在,我们就来见识一下吧: ‘ 创建一个视图 - Sub crtView()
- Dim cmd As New ADODB.Command
- cmd.ActiveConnection= CurrentProject.Connection
- cmd.CommandText= "create view myView as select 企业代码,服务代码 frommytable"
- cmd.Execute
- End Sub
复制代码 打开视图并显示记录条数 - Sub showview()
- Dim rst As New ADODB.Recordset
- rst.Open"myview", CurrentProject.Connection, adOpenStatic, adLockOptimistic
- MsgBoxrst.RecordCount
- End Sub
复制代码 创建一个含参数的存储过程。 - Sub crtpro()
- Dim cmd As NewADODB.Command
- cmd.ActiveConnection= CurrentProject.Connection
- cmd.CommandText= "create procedure mypro(企业代码 text) as select 企业代码,服务代码 frommytable where 企业代码=@企业代码"
- cmd.Execute
- End Sub
复制代码 执行存储过程,输入参数 - Sub showpro()
- Dim rst As New ADODB.Recordset
- Dim cmd As New ADODB.Command
- cmd.ActiveConnection= CurrentProject.Connection
- cmd.CommandText= "execute mypro '850225'"
- Set rst =cmd.Execute
- MsgBox rst(1)
- End Sub
复制代码 盗梦提出,不能使用Recordcount属性(详见:http://www.office-cn.net/thread-119047-1-1.html)。测试后发现确实如此,但还是可以用MoveNext方式的。对于需要列出多项数据时,我们可以用Do……Loop来处理。- Sub showpro()
- Dim rst As New ADODB.Recordset
- Dim cmd As New ADODB.Command
- cmd.ActiveConnection = CurrentProject.Connection
- cmd.CommandText = "execute mypro 1"
- Set rst = cmd.Execute
- Do Until rst.EOF
- Debug.Print rst(1)
- rst.MoveNext
- Loop
- 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风格导航界面
【新手进阶】之十四:仓库管理系统 |