chenronting 发表于 2012-6-30 01:33:36

【已解决】SQL 在使用 _SQL_Execute执行后没有得到有效的返回值?

本帖最后由 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

chenronting 发表于 2012-7-2 19:57:53

有人来帮帮我吗~~~~~~~

chenronting 发表于 2012-7-5 22:01:29

回复 3# zxxpt6


    兄弟啊, 我这个是提问,不是分享~, 你也太水了吧这灌的

chenronting 发表于 2012-7-6 03:07:47

在没有回复之前,也只能不停的回复了。。帮助我~

chenronting 发表于 2012-7-6 17:39:46

有人来帮帮我吗, 来吧,Come On!!!

chenronting 发表于 2012-7-7 18:31:39

请问到底要如何才能得到,更新数量呢?

chenronting 发表于 2012-7-9 10:09:56

2B流求教!

chenronting 发表于 2012-7-10 01:22:05

来吧, 兄弟们, 帮帮我。

chenronting 发表于 2012-7-11 17:34:39

一长列就我一人在这里蹦达

chenronting 发表于 2012-7-11 17:34:56

一长列就我一人在这里蹦达

水木子 发表于 2012-7-11 21:48:22

你这样返回值是一个对象而已,没明白你是想干什么。

chenronting 发表于 2012-7-12 12:16:57

回复 12# 水木子


    我想得到我执行UPDATE语句后成功与失败的数量,也就是结果,我也不知道他返回的是什么内容,请帮帮我得到我想得到的那种内容。。

chenronting 发表于 2012-7-16 21:47:54

整个页面都是我, 我也很无奈 。求助。!

298311657 发表于 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

chenronting 发表于 2012-7-18 14:10:53

回复 15# 298311657


    感谢你的答案, 测试后的结论是不行的,得到的结果都是0 。
页: [1] 2
查看完整版本: 【已解决】SQL 在使用 _SQL_Execute执行后没有得到有效的返回值?