找回密码
 加入
搜索
楼主: cfs43210

[AU3基础] [己解决]SQL2000操作存储过程!

 火.. [复制链接]
 楼主| 发表于 2014-7-17 21:11:28 | 显示全部楼层
回复 16# kk_lee69
谢谢你!有点不明白!

$RS.open ("SELECT * FROM  表一");
;$ListArray=$conn.Execute ("SELECT ClassID,ClassName FROM comFundStyle").GetRows
While (Not $RS.eof And Not $RS.bof);迴圈讀表
        MsgBox(0, "欄位一", $RS.Fields (0).value,5);顯示第一個欄位 資料

        $RS.movenext;跳出迴圈
WEnd;結束迴圈讀表
$RS.close;關閉數據分表
上面没建立預存程序查询

$conn.Execute("EXEC  PROGRAM1");建立預存程序.这个是怎么查询数据,如果有条件查询,语句要怎么写,谢谢!
发表于 2014-7-17 21:20:05 | 显示全部楼层
回复 17# cfs43210

我只是舉例子   我並沒有全部寫給你看
你自己也要學呀  別的不說 先別 說 AU3

你先隨便寫個 SQL 語法建立預存程序 給我看 可以嗎

寫好了 我就寫 AU3 的建立給你看
 楼主| 发表于 2014-7-17 21:44:24 | 显示全部楼层
回复 18# kk_lee69
Dim $sServer = '192.168.0.168', $sUsername = 'sa', $sPassword = '', $sDatabase = 'hz_Pers' ;四个变量分别是连接数据库用的地址、账号、密码及所使用数据库名

$Comm = ObjCreate("ADODB.Command") ;建一个command对象

With $Comm
        .ActiveConnection = "DRIVER={SQL Server};SERVER=" & $sServer & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";Database=" & $sDatabase & "" ;建立连结
        .CommandText = 'getPers' ;定义command 对象调用名称,即存储过程名称
        .CommandType = 4 ;设置command调用类型是存储过程
        .Prepared = True ;将SQL命令先行编译
EndWith


$Rs = $Comm.Execute ;存储过程取得的记录集赋给$Rs
MsgBox(0,0,$Rs.Fields (2).value)
$Rs.Close;关闭记录集对象
这个是我参考别人的,已建军立了存储过程getPers,$Rs.Fields (2).value可以读取,但是我要有条件查询,语句不知道怎么写
发表于 2014-7-17 22:08:48 | 显示全部楼层
回复 19# cfs43210

請參考一下我寫的教學~~~

http://www.autoitx.com/thread-30083-1-1.html


理論上我的用法 都不用到 UDF  而你剛剛上面的用法是人家的 有使用 UDF 的操作方法

我覺得哪種方法 有點難以理解~~~

看看我的文章 就可以 知道~~ 連接數據庫 不需要任何的UDF 就可以直接連接

置於 你的問題~~~ 我想 你應該先告訴我怎麼在SQL下面 建立 預存程序

我就能告訴你 建立預存程序 這段 AU3 怎麼寫
发表于 2014-7-17 22:14:47 | 显示全部楼层
回复 19# cfs43210

或者 你把你的需求說清楚點  順便把你要查詢的東西 寫出來

說的清楚 我就寫個範例給你

我覺得你應該不是要 操作預存程序
 楼主| 发表于 2014-7-17 22:29:19 | 显示全部楼层
本帖最后由 cfs43210 于 2014-7-17 22:30 编辑

回复 20# kk_lee69

我是没用UDF,是直接连接的,现在用你的法方建的

Dim $sServer = '192.168.0.168', $sUsername = 'sa', $sPassword = '', $sDatabase = 'hz_Pers';四个变量分别是连接数据库用的地址、账号、密码及所使用数据库名

$conn = ObjCreate("ADODB.Connection")
$RS = ObjCreate("ADODB.Recordset")

$conn.Open ("driver={SQL Server};server="&$sServer&";uid="&$sUsername&";pwd="&$sPassword&";database=" & $sDatabase & "")  ;主机名IP127.0.0.1,UID=用户,PWD=密码,database=数据库名  
$RS.ActiveConnection = $conn ; 设定RS 是 conn 的集合 重要的部份


$RS.open("SELECT * FROM  Pers");
While (Not $RS.eof And Not $RS.bof);迴圈讀表
        MsgBox(0, "欄位一", $RS.Fields(2).value, 5);顯示第一個欄位 資料

        $RS.movenext;跳出迴圈
WEnd;結束迴圈讀表
$RS.close;關閉數據分表

上面可以读取表 Pers
预存已建名为:getPers

$Rs.Open("Select * from Pers where PERSID='44130' and Name='张三2000000'")
MsgBox(0, 0, $Rs.Fields(2).value);这是条件查询的如果用预存名查询怎么写
发表于 2014-7-17 22:35:10 | 显示全部楼层
回复 22# cfs43210

预存已建名为:getPers

請問這個的內容是什麼  告訴我  因為 執行結果的返回 會關乎到 使用的語法
 楼主| 发表于 2014-7-17 22:39:54 | 显示全部楼层
本帖最后由 cfs43210 于 2014-7-17 22:41 编辑

回复 23# kk_lee69

CREATE PROCEDURE getPers
    as
    set nocount on
    begin
       select * from Pers
    end
    go
   
预存名getPers 在SQL查询分析器用上面语句,Pers是表,
 楼主| 发表于 2014-7-17 22:46:28 | 显示全部楼层
回复 23# kk_lee69

getPers是Pers表,有编码,姓名等...
发表于 2014-7-17 22:48:50 | 显示全部楼层
回复 24# cfs43210

你看看你自己寫的 其實你寫死了~~~這個預存程序 從頭到尾  執行後只會秀出

    select * from Pers

所以這個預存程序 是死的  這樣寫是不對的  我幫你改一下好了


CREATE PROCEDURE getPers (@變數1,@變數2)
    as
宣告  @變數1  變數類型
宣告  @變數2  變數類型

    set nocount on
    begin
       select * from Pers where PERSID=@變數一  and Name=@變數二
    end
    go

我直接用中文表示  句型語法因為 不常用 所以其實要查一下  晚點 我可以上個實際的語法

如果 你看的懂我的意思 就應該知道問題在哪了

當你 把 預存程序 變成 上面的樣子

用   $Rs.Open("EXEC getPers( '44130','张三2000000')")

這樣就可以 使用預存程序 查到你要的東西了
 楼主| 发表于 2014-7-17 22:48:58 | 显示全部楼层
回复 23# kk_lee69

是不是我建预存名错了
发表于 2014-7-17 22:51:41 | 显示全部楼层
回复 27# cfs43210

不是名稱的問題

預存程序 有沒有建立 在資料庫的管理介面裡面 可以看到 預存程序 存不存在
 楼主| 发表于 2014-7-17 22:55:44 | 显示全部楼层
回复 28# kk_lee69

在预存程序有我建的名存在,但你说的这个内容是什么我不明白
发表于 2014-7-17 22:56:32 | 显示全部楼层
回复 29# cfs43210

CREATE PROCEDURE getPers (@變數1,@變數2)
    as
宣告  @變數1  變數類型
宣告  @變數2  變數類型

    set nocount on
    begin
       select * from Pers where PERSID=@變數一  and Name=@變數二
    end
    go

這段不明白嗎??
发表于 2014-7-17 23:04:06 | 显示全部楼层
回复 29# cfs43210

既然叫做 預存程序  顧名思義 就是 是先把程式寫好在 SQL 中
等需要用的時候叫出來用

你原本的 getPers  排除建立程序需要的語法  你裡面的語法最終只有 select * from Pers

可是這樣的東西是死的 最終不能做任何的應用~~~~ 到目前為止 都只是SQL 的邏輯跟概念

因為你的預存程序 一執行下去  就只會 select * from Pers   沒有辦法從外部改變 預存程序的內部

所以你有兩條路  第一條  修改預存程序 把裡面的  select * from Pers  改成 Select * from Pers where PERSID='44130' and Name='张三2000000'

第二條路 就是 你把預存程序 變成活的 加兩個參數 進去  以便  你可以利用這兩個參數 可以隨時更換想查詢的東西

也就是 把 getPers  變成 getPers (參數1,參數2)   當你查詢的時候 直接帶入參數

這樣就可以查詢到 你要的東西  而不用修改 預存程序
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-9 19:49 , Processed in 0.114166 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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