找回密码
 加入
搜索
查看: 9486|回复: 23

[系统综合] 【已解决】SQL 在使用 _SQL_Execute执行后没有得到有效的返回值?

  [复制链接]
发表于 2012-6-30 01:33:36 | 显示全部楼层 |阅读模式
本帖最后由 chenronting 于 2012-9-21 20:55 编辑

答案在 23#,感谢他。愿主与其同在。


今天在使用SQL的UDF的过程中发现,使用 _SQL_Execute 来更新数据库时,不会得到更新的数量?
这个返回值不是数组,也不是变量,那么 我是该怎么去识别他呢‘?里面是否包涵有我需要的更新数量?

请懂的朋友不涩赐教!在此感谢。

如下是我提取出来的代码~

Global $S_CON
_SQL_RegisterErrorHandler()
Global $_SQL_OBJ_ERROR ;COM错误码句柄
Global $SQL_ERROR = "";SQL最后的错误码
_SQL_Connect($S_CON)
_SQL_OpenDB($S_CON,'forbugserver')

$G_abc = _SQL_Execute($S_CON,"UPDATE ab_jyxx SET img = 0x00 WHERE j_no = '5127012'")
If IsArray($G_abc) Then
        MsgBox(0,0,0)
Else
        MsgBox(0,$SQL_Error,$G_abc)
EndIf


Func _SQL_Execute(ByRef $c_Con, $Execute_Data)
        If Not IsObj($c_Con) Then Return SetError(2, "无效的数据库连接", 0)
        $SQL_ERROR = ""
        
        Return $c_Con.Execute($Execute_Data)
EndFunc   ;==>_SQL_Execute

Func _SQL_Connect(ByRef $c_Con, $c_Server = "192.168.1.3", $c_UserName = "user", $c_UserPasswORd = "123")
        $SQL_ERROR = ""
        
        Local $c_Reg_Key = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", "SQL Server")
        If @error Or $c_Reg_Key = "" Then Return SetError(2, "ODBC驱动未安装", 0);如果ODBC驱动未安装返回 False
        
        $c_Con = ObjCreate("ADODB.Connection")
        If Not IsObj($c_Con) Then Return SetError(0, "启动数据库引擎失败", 0);如果启动失败则返回 False

        $c_Con.open("DRIVER={SQL Server};SERVER=" & $c_Server & ";UID=" & $c_UserName & ";PWD=" & $c_UserPasswORd & ";")
        If @error Then Return SetError(1, "启动数据库引擎失败", 0);如果连接成功返回 False

        Return $c_Con;
EndFunc   ;==>_SQL_Connect

Func _SQL_OpenDB(ByRef $c_Con, $c_DB_Name)
        If Not IsObj($c_Con) Then Return SetError(2, "无效的数据库连接", 0)
        $SQL_ERROR = ""
        
        $c_Con.Execute("use " & $c_DB_Name)
        
        If Not @error Then Return 1
EndFunc   ;==>_SQL_OpenDB
Func _SQL_RegisterErrorHandler($Func = "_SQL_ErrFunc")
        If ObjEvent("AutoIt.Error") = "" Then
                $_SQL_OBJ_ERROR = ObjEvent("AutoIt.Error", $Func)
                Return 1
        Else
                Return SetError(0, "错误跳转函数已经注册", 0)
        EndIf
EndFunc   ;==>_SQL_RegisterErrorHandler
 楼主| 发表于 2012-7-2 19:57:53 | 显示全部楼层
有人来帮帮我吗~~~~~~~
 楼主| 发表于 2012-7-5 22:01:29 | 显示全部楼层
回复 3# zxxpt6


    兄弟啊, 我这个是提问,不是分享~, 你也太水了吧这灌的
 楼主| 发表于 2012-7-6 03:07:47 | 显示全部楼层
在没有回复之前,也只能不停的回复了。。帮助我~
 楼主| 发表于 2012-7-6 17:39:46 | 显示全部楼层
有人来帮帮我吗, 来吧,Come On!!!
 楼主| 发表于 2012-7-7 18:31:39 | 显示全部楼层
请问到底要如何才能得到,更新数量呢?
 楼主| 发表于 2012-7-9 10:09:56 | 显示全部楼层
2B流求教!
 楼主| 发表于 2012-7-10 01:22:05 | 显示全部楼层
来吧, 兄弟们, 帮帮我。
 楼主| 发表于 2012-7-11 17:34:39 | 显示全部楼层
一长列就我一人在这里蹦达
 楼主| 发表于 2012-7-11 17:34:56 | 显示全部楼层
一长列就我一人在这里蹦达
发表于 2012-7-11 21:48:22 | 显示全部楼层
你这样返回值是一个对象而已,没明白你是想干什么。
 楼主| 发表于 2012-7-12 12:16:57 | 显示全部楼层
回复 12# 水木子


    我想得到我执行UPDATE语句后成功与失败的数量,也就是结果,我也不知道他返回的是什么内容,请帮帮我得到我想得到的那种内容。。
 楼主| 发表于 2012-7-16 21:47:54 | 显示全部楼层
整个页面都是我, 我也很无奈 。求助。!
发表于 2012-7-16 22:52:36 | 显示全部楼层
我帮你改一下函数,这样就可以了。执行sql后,@extended宏就是执行sql影响的行数了。
Func _SQL_Execute(ByRef $c_Con, $Execute_Data)
        If Not IsObj($c_Con) Then Return SetError(2, "无效的数据库连接", 0)
        $SQL_ERROR = ""
        Local $iRecs = 0
        Local $Exec = $c_Con.Execute($Execute_Data,$iRecs)
        Return SetError(True, $iRecs, $Exec)
EndFunc   ;==>_SQL_Execute
 楼主| 发表于 2012-7-18 14:10:53 | 显示全部楼层
回复 15# 298311657


    感谢你的答案, 测试后的结论是不行的,得到的结果都是0 。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-18 17:24 , Processed in 0.076641 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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