本帖最后由 kk_lee69 于 2016-4-24 22:58 编辑
【原创】AU3 操作SQL 数据库…详细语法、参数…教学 课程(一) MSSQL入门
一、 前言:
由于工作上的关系,AU3部份应用最多的在于数据库,最近看到网上很多人询问数据库的相关操作,因此把自己小小的心得 做个纪录,顺便给刚接触的朋友一些参考的数据……
.
另外由于数据库种类很多,所以如果时间允许,会慢慢增加数据初步先介绍关于MS SQL 的操作部分…….先声明 这边只能介绍数据库的基本操作…至于应用不在此介绍范围…..由于我使用的是繁体中文….用词上可能会跟各位的用语不太一样…..这点还请见谅…..PO 文数据会经过转换成简体字
以下纯属个人心得…..如果有错误的地方 还望指教……….
二、 数据库连接语法 参数
想要操作数据库当然得先要跟数据库主机联机噜……所以先介绍数据库的联机语法跟参数
数据库联机最精简的 语法 如下: 这段程序代表连接到数据库主机…每一行程序都必须要存在 除了宣告变量以外……
如果下面的程序…. 还无法让您联机数据库…..那肯定是您的 数据有错误…..
Dim $Server = "server01" ;SQL主机名称
Dim $ID = "sa" ; 登入数据库主机的账号 一般都会用sa
Dim $pw = "123" ;登入数据库主机的密码
DIM $Company="database01" ;数据库名称
$conn = ObjCreate("ADODB.Connection")
$RS = ObjCreate("ADODB.Recordset")
$conn.Open ("driver={SQL Server};server="&$Server&";uid="&$ID&";pwd="&$pw&";database="&$Company) ;主机名IP127.0.0.1,UID=用户,PWD=密码,database=数据库名
$RS.ActiveConnection = $conn ; 设定RS 是 conn 的集合 重要的部份
另外有网友询问过 跟数据库联机时….有时候需要设定程序名称…..可以用于数据库追踪用……例如:设定联机的程序名称为 ABC
其语法如下:
$conn.Open ("driver={SQL Server};server=127.0.0.1;uid=sa;pwd=123;database=MASTER;App=ABC123;")
还有朋友问到…..如果我的数据库主机所用的通讯PORT 非SQL 内定的PORT 该如何处理: 例如 通讯PORT 采用 1400
其语法如下:
$conn.Open ("driver={SQL Server};server=192.168.0.200,1400;uid=sa;pwd=123;database=MASTER;App=ABC123;")
三、 读取数据库上面的数据表
既然联机到数据库、肯定会需要读取数据表了.........
例如 打算读取 Product 这个数据表…..一般来说 SQL 语法为
例如 打算读取 Product 这个数据表….里面 产品编号为 A 开头的…..
SELECT * FROM Product Where ID like ‘A%’
说到这边 看倌 应该注意到了…..想要读取 数据库上面的数据表 就是请先把 SQL 的查询语法 准备好…….你的功力够强的话….通常 一段查询 就可以得到你要的结果……我通常会把四五个以上的子查询 包做一个 写在一段里面….
写好您的SQL查询语法之后……接下来准备将它套入 AU3 里面了
AU3 的数据库 读取语法 如下:
;标准的 读取数据 循环模式语法
;几乎 所有的查询都只要套用这个模式就可以了......
$RS.open (" 请注意 这里存放的是 刚刚打好的 SQL 语法 ...请注意 前后都有加上 双引号 ");
While (Not $RS.eof And Not $RS.bof);循环读表 有资料就跑回圈 没资料就会跳出
MsgBox(0, "字段一", $RS.Fields (0).value,5);显示第一个字段 资料 ,AU3返回的数据通常 都是不含 原本的 字段名称 要取的字段名称需要其它方法
MsgBox(0, "字段二", $RS.Fields (1).value);显示第二个字段 资料
If StringIsDigit($RS.Fields(1).value)=0 Then ;这边可以加上判断
EndIf
$RS.movenext;下一笔资料
WEnd;结束循环读表
$RS.close;关闭数据分表 当使用 RS 查询之后 整个纪录读取完毕后 必须要关闭 RS
例如 查询产品数据 的 SQL 语法为 SELECT * FROM Product
带入之后变成
;标准的 读取数据 循环模式语法
;几乎 所有的查询都只要套用这个模式就可以了......
$RS.open (" SELECT * FROM Product ");
While (Not $RS.eof And Not $RS.bof);循环读表 有资料就跑回圈 没资料就会跳出
MsgBox(0, "字段一", $RS.Fields (0).value,5);显示第一个字段 资料 ,AU3返回的数据通常 都是不含 原本的 字段名称 要取的字段名称需要其它方法
MsgBox(0, "字段二", $RS.Fields (1).value);显示第二个字段 资料
If StringIsDigit($RS.Fields(1).value)=0 Then ;这边可以加上判断
EndIf
$RS.movenext;下一笔资料
WEnd;结束循环读表
$RS.close;关闭数据分表 当使用 RS 查询之后 整个纪录读取完毕后 必须要关闭 RS
在来就是中间循环的应用了…….这里的应用就广了….有人想把数据导入到 ListView 就可以把 到入到listview 的语法写在中间 循环循环这段….
当然也可以加上IF …THEN …去做判断…..如果有需要 也可以在这段循环里面把从数据库读取到的数据 放入 数据组 里面
四 更新数据库……..
如果有需要更新数据库…….老规矩….请先写出 SQL 语法……
例如: UPDATE Product SET Price=20 Where ID=’A001’
然后再把 上面的SQL 语法 套入 AU3 里面……..
请注意 这边 就不是使用 RS 的语法了…..通常 RS的语法 使用于 有返回数据的时候……..
如果 你的SQL 语法 执行后 不会有数据返回…….通常使用下面的语法即可….
$conn.Execute("UPDATE Product SET Price=20 Where ID=’A001’ ")
另外 有看到网友询问…..如果我的 查询 有好几段 很复杂 …或者 有些东西我希望变成是 变量 譬如说 日期…..希望由系统带出来…..这样该怎么做呢….
请 记住以下的原则……….
1. 先把 SQL 语法 完整的写出来
2. 再把 SQL 语法 套入到 AU3的标准模式里面
3. 再把 要变成变量的 改掉 成为变量…….
举个例子………希望更新产品日期为 今天的 产品价格
SQL语法为 UPDATE Product SET Price=20 Where DATE=’20120101’
套入语法后变成……
$conn.Execute("UPDATE Product SET Price=20 Where DATE=’20120101’ ")
然后再把 日期的那个数值 变成 AU3的函数……
$conn.Execute("UPDATE Product SET Price=20 Where DATE=’ "&@YEAR&@MON&@MDAY&" ’ ")
这样一来,就不会有语法的问题了……..
最后…..数据库整个处理完毕后…..完整的程序 必须要把数据库的联机 给关闭掉
$conn.close; 关闭数据库连接
|