找回密码
 加入
搜索
查看: 60989|回复: 137

[原创] 【原创】AU3 操作SQL 数据库…详细语法、参数…教学 课程(一) MSSQL入门

 火... [复制链接]
发表于 2012-2-1 00:36:58 | 显示全部楼层 |阅读模式
本帖最后由 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 语法为
SELECT * FROM Product


例如 打算读取 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; 关闭数据库连接

评分

参与人数 8金钱 +300 贡献 +31 收起 理由
ROUSTAR31 + 40
wua0550 + 30 简要明白
虫子樱桃 + 60 很不错
xms77 + 50 + 5 正好需要学习数据库
newuser + 20 一句话,感谢!两句话,还是感谢!

查看全部评分

发表于 2012-2-1 00:49:18 | 显示全部楼层
居然是简体,辛苦了~
发表于 2012-2-1 01:45:23 | 显示全部楼层
很详细,辛苦了
发表于 2012-2-1 02:24:23 | 显示全部楼层
Structured Query Language ---- 结构化查询语言,与其说是一个数据库,不如说成是一个操作关系型数据库的语言,既然是关系型数据库,如果能够很好的理解表间,表内,查询间,查询内的关系,其实并不难,但是难就难在关系上,一对多,多对一,一对一的表达上,至于语言,说起来就那么几句,sqlite的语句对应上不同种类的数据库引擎,大致差不多了

楼主,最好多介绍下关于联合查询方面的东西
发表于 2012-2-1 07:45:13 | 显示全部楼层
很不错的教程,楼主辛苦
发表于 2012-2-1 07:57:07 | 显示全部楼层
很实用,也很难得,谢谢了。。。
发表于 2012-2-1 08:29:38 | 显示全部楼层
,原来还可以操作数据库。牛百啊
 楼主| 发表于 2012-2-1 09:07:34 | 显示全部楼层
回复 4# netegg

好呀 下再來寫查詢的東西  很好玩的  呵呵
发表于 2012-2-1 10:52:37 | 显示全部楼层
收藏了啊!
发表于 2012-2-1 12:51:43 | 显示全部楼层
回复 1# kk_lee69
这是在授人以渔
发表于 2012-2-2 15:57:07 | 显示全部楼层
真是学习的好教材!
发表于 2012-2-2 17:14:39 | 显示全部楼层
这个教程很实用!
发表于 2012-2-3 01:09:12 | 显示全部楼层
sql虽然语句少,用好也不容易,辛苦了
发表于 2012-2-3 11:33:35 | 显示全部楼层
刚知道au可以直接操作数据库,学习了,很有用,谢谢!
发表于 2012-2-5 22:54:00 | 显示全部楼层
谢谢楼主分享
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-26 04:26 , Processed in 0.076301 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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