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

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

  [复制链接]
发表于 2012-7-18 15:22:53 | 显示全部楼层
老问题了,我原来就遇到过,也没人难帮助解决!
最后是使用变通的方法处理的!
我的代码
Global $objErr=""
$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Install a custom error handler

Func MyErrFunc()
        $objErr = $oMyError.Description
        ;          $oMyError.scriptline
        ;SetError ( hex($oMyError.Number,8), $oMyError.scriptline)
EndFunc

Dim $Cn1 = ObjCreate("Adodb.Connection")
With $Cn1
    .Provider = "Microsoft.Jet.OLEDB.4.0;"
    .ConnectionString = "Data Source=" & @ScriptDir & "\db1.mdb;"
    .CursorLocation = 3                ;3=adUseClient
    .Open

    ;删除记录
    AdoDbExeCute( $Cn1, "DELETE FROM [XXB] WHERE 1=1" )
    Switch @Error
            case 0 
                    msgbox( 64, "删除数据", "删除记录 " & @extended & " 条!" )
            case 1 
                    msgbox( 48, "提示", "未能创建对象!      ")
            case 2        ;'sql 出错
                    msgbox( 48, "提示", "动态SQL出错!       " & $objErr)
            case else
                    msgbox( 48, "提示", "执行遇到错误!      ")
        EndSwitch

        ;导入文本
        AdoDbExeCute( $Cn1, "INSERT INTO [xxb1] SELECT * FROM [Text;DataBase="& @ScriptDir &"].[xxb.txt] ") ;WHERE 类别=106" )
    Switch @Error
            case 0 
                    msgbox( 64, "导入数据", "导入记录 " & @extended & " 条!" )
            case 1 
                    msgbox( 48, "提示", "未能创建对象!      ")
            case 2        ;'sql 出错
                    msgbox( 48, "动态SQL错误", $objErr)
            case else
                    msgbox( 48, "提示", "执行遇到错误!      ")
        EndSwitch
    .Close
EndWith

Func AdoDbExeCute(ByRef $Cnn, byRef $strQuery )
        ;Dim $vba = ObjCreate("MSScriptControl.ScriptControl")        ;与下面效果相同
        Local $vbs = ObjCreate("ScriptControl")
         Local $erl, $rec
         If (IsObj($Cnn)=0 OR IsObj($vbs)=0) Then
                 Return SetError(1, 0, 0)
        Endif
        $vbs.Language = "VBScript"
    $vbs.AddObject("cnn", $Cnn, false )
    $vbs.AllowUI = false        ;不显示接口UI
        $vbs.ExecuteStatement('cnn.ExeCute "' & $strQuery & '", x ,1' )
        $erl = $vbs.Eval("cnn.Errors.Count")
        $rec = $vbs.Eval("x")
        $vbs.reset
        if $erl>0 then 
                return SetError(2, $rec, $rec)
        Else
                return SetError(0, $rec, $rec)
        Endif
EndFunc
 楼主| 发表于 2012-7-18 18:06:24 | 显示全部楼层
回复 17# dhlhmgc


    谢谢你, 可是我这个是MSSQL。对这些个对象, 实在功力有限,谢谢你的回答 。
 楼主| 发表于 2012-7-18 18:07:23 | 显示全部楼层
回复 17# dhlhmgc


    谢谢你, 可是我这个是MSSQL。对这些个对象, 实在功力有限,谢谢你的回答 。
 楼主| 发表于 2012-8-20 22:50:16 | 显示全部楼层
唉, 再顶出水面 。 看能不能有人来帮帮忙。
 楼主| 发表于 2012-8-31 09:47:08 | 显示全部楼层
我顶, 顶,顶。就是希望有人在这方面那这个东西加强。对执行影响返回值方面。
发表于 2012-9-7 21:35:48 | 显示全部楼层
回复 1# chenronting


    有辦法解決
但是 算是 有點作弊  如果只是位了得到傳回值.....這樣也可以得到

                                      $conn.Execute ("UPDATE MacContractMain SET MA027='A' ");
                        $Rs.Open ("SELECT @@rowcount ");
                        MsgBox(0,"",$RS.Fields(0).value  )


可以先使用 $conn.Execute  執行一個 UPDATE 的動作....
接著 用$Rs.Open ("SELECT @@rowcount ")  傳回剛剛動作影響的筆數......

$RS.Fields(0).value   就是你要的結果.....
 楼主| 发表于 2012-9-7 22:13:12 | 显示全部楼层
回复 23# kk_lee69


    哦?!很有意思。。谢谢, 我试试看!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-18 17:29 , Processed in 0.063656 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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