AutoIt上路08-列表控件使用示例 http://www.gaohaiyan.com/952.html
Microsoft Office Access是由微软发布的关系数据库管理系统,它已经通过组件的形式集成在Windows系统里,所以就算你没有安装完整版Office套件或Access程序,我们也可以通过AutoIt使用它。
原生API里并没有提供Access相关的函数,帮助文档中也没有集成相关UDF。本文涉及的资料基本都来自于AutoItX.com。为了让新手网友知其然知其所以然,我尽可能采用sql语句的形式实现功能。如果你想偷懒,可以使用文末提供的API文件,用记事本或SciTE打开,仔细看看头部说明就知道怎么用了。
本例在前文基础上继续开发,结合对ListView的操作实现数据库的增、删、改、查基本操作,没有用到表链接(尽管业务中有体现)、复杂查询,力求简单。
1.先来看看表的设计
元数据、用户、日志,是3个比较特殊的。
元数据表主要保存一些关键字,如公司产品的类型:低档、中档、高档,这3个词就属于元数据。在创建新的产品时选择类型,就只能选择这3个词中的一个。如果希望有新的类型,那么就需要权限很高的用户来操作这个表,插入新的词语(值)。
用户表主要存放可以访问数据表的人员名单,并保存其不同的权限。根据权限高度赋予增删改查等能力。
日志表设计为不可修改,只能查询。一切涉及到数据库的操作行为都会记录其中。
2.数据库基本操作
1)创建数据库
1 2 3 4 5 |
$oADO = ObjCreate("ADOX.Catalog") $oADO.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & mdb数据库文件路径 & "; Jet OLEDB:Database Password='" & 密码 & "'") $oADO.ActiveConnection.Close |
◆mdb文件路径是自定义的无中文及无空格目录
◆密码是可选的,不想要密码留空即可,它是访问mdb文件的密码,不同于mysql-root用户的登录密码
一般这两个都会创建为global全局的变量。
另外注意,创建数据库使用的是 ObjCreate("ADOX.Catalog") ,方法为$oADO.Create,关闭方式为 $oADO.ActiveConnection.Close 。
2)创建数据表
1 2 3 4 5 6 7 8 9 |
$oADO = ObjCreate("ADODB.Connection") $oADO.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='d:\demo.mdb'; Jet OLEDB:Database Password='123456'") $oADO.Execute("CREATE TABLE tb_demo") ; 创建表单 $oADO.Execute("ALTER TABLE tb_demo ADD id integer identity(1,1) primary key, l_name text, l_operate text") ; 创建列 $oADO.Execute("CREATE TABLE tb_demo2") $oADO.Execute("ALTER TABLE tb_demo2 ADD id integer identity(1,1) primary key, l2_name text, l2_operate text") $oADO.Close |
◆使用的操作器ObjCreate("ADODB.Connection")连接器
◆获得数据库文件$oADO.Open
◆通过方法$oADO.Execute执行sql语句
◆直接$oADO.Close关闭
这里我们连续创建了2个表,只要不Close,连接器是可以持续使用的。
id integer identity(1,1) primary key 即创建一个自动增长步进为1的整型数字主键列 id;
l_name text 即文本型列,text默认长度为50字符,最长256个字符,可以text(指定长度值);
关于access的数据类型和其它数据库基本一致,搜索之。
3)插入数据
本例就是最简单的单表插入。
1 2 3 4 5 |
$oADO = ObjCreate("ADODB.Connection") $oADO .Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $db_path & ";Jet Oledb:Database Password='" & $db_pswd & "'") $oADO .Execute("insert into tb_demo (column1, column2) values ('v1', 'v2')") |
增删改使用的都是ADODB.Connection,都是Execute语句。sql语句形式和其它数据库是相同的。
因为我们创建了多个表,所以insert语句指明插入到tb_demo ,如果mdb中只有一个表, 这里可以直接指定为mdb文件。
4)删除数据
1 2 3 4 5 |
$oADO = ObjCreate("ADODB.Connection") $oADO .Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $db_path & ";Jet Oledb:Database Password='" & $db_pswd & "'") $oADO.execute("DELETE FROM tb_demo IN '" & $db_path & "' WHERE id = 1") ; 这个1是动态的 |
都知道删除数据是有风险的。一般我们都会使用msgbox做个确认。
5)更新数据
只是sql语句不同
1 2 3 |
"update 表 SET 列名='新值', 列名='新值' WHERE 条件列id=1" |
按照我当前设计,这个id都会在LV中显示,所以我直接读取LV中对应列的值引入即可。
6)查询数据
在数据库的使用中最考验技术的就是查询,尤其是各种复杂查询。并且在使用中最多的也是查询。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
; 1.连接器 Local $oADO = ObjCreate("ADODB.Connection") $oADO.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $db_path & ";Jet Oledb:Database Password='123456'") ; 2.记录集 Local $oREC = ObjCreate("ADODB.Recordset") $oREC.ActiveConnection = $oADO ; 3.查询 $oREC.Open("SELECT * FROM tb_demo" ) ; order by id desc 排序 ; 4.遍历记录集 While Not $oREC.Eof And Not $oREC.Bof If @error = 1 Then ExitLoop ; 读完全部的行 退出 Else $oREC.Fields(0).value ; 列1 $oREC.Fields(1).value ; 列2 $oREC.Fields(2).value ; 列3 ; ... $oREC.Movenext ; 下一行 EndIf WEnd $oREC.Close $oADO.Close |
以上是常规查询流程。
7)查询表中的字段(列)数
1 2 3 4 5 6 7 8 9 10 |
Local $oADO = ObjCreate("ADODB.Connection") $oADO.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $db_path & "; Jet OLEDB:Database Password='" & $db_pswd & "'") Local $oREC = ObjCreate("ADODB.Recordset") $oREC.ActiveConnection = $oADO $oREC.Open("表名tb_demo", $oADO, 3, 3) Local $fieldsCount = $oREC.fields.count ; 获取表单的列数,总共有多少字段 ; $oREC.fields(0).name ; 列名。注意是小括号 ; $oREC.fields(1).value ; 列值 |
$oREC 在执行Open(sql查询语句) 后,可以直接调用$oREC.fields.count 。
3.ListView操作与数据库的同步
增删改采用相同的业务设计:
1.获取Tab中当前选中的标签,
2.根据标签匹配当前显示的列表,
3.根据列表匹配数据表。
4.删除操作,还要获取选中的项目(行);
5.双击单元格修改操作,还要获取项目中的子项目(列);
6.这3种操作还要记录在Log表中。
---------------- 业务逻辑越来越多,头疼 ------------------
本文用到的access数据库mdb文件查看软件EasyAccess和本文源码都放到github了,各位自行下载。注意我提供的这个EasyAccess似乎不能打开使用了密码创建的mdb文件,so,现在处于开发阶段,密码为空即可。
分析代码是很好地学习方式: https://github.com/731942771/AutoitWorkingRecorder/
网友提供的UDf,#include
[download id="980"]
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/961.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设