cxm23 发表于 2012-5-25 17:09:30

[已解决]AU3中执行ACCESS SQL不成功

本帖最后由 cxm23 于 2012-6-6 19:11 编辑

$mdb_data_path = @ScriptDir & "\db1.mdb"

$mdb = ObjCreate("ADODB.Connection")
$mdb.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)

$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; 建立客户错误处理程序

$sql0 = "DROP TABLE TempTable"
$sql1 = "CREATE TABLE TempTable(序号 AUTOINCREMENT(1,1), 姓名 text(255),年龄 text(255))"
$sql2 = "INSERT INTO TempTable(姓名,年龄) SELECT 姓名,年龄 FROM table1 WHERE 姓名 LIKE '*陈*'"
$sql3 = "INSERT INTO TempTable(姓名,年龄) VALUES('张20','60')"
ClipPut($sql2)

$mdb.Execute($sql0)

$mdb.Execute($sql1)

;~ $mdb.Execute($sql2)

$mdb.Execute($sql3)

;~ $RS.Close
$mdb.Close

Func MyErrFunc()
   $HexNumber=hex($oMyError.number,8)
   Msgbox(0,"","截获一个 COM 错误 !" & @CRLF & _
                "错误代码: " & $HexNumber & @CRLF & _
                                "错误名称: " & $oMyError.source& @CRLF & _
                                "错误名称: " & $oMyError.helpfile& @CRLF & _
                                "错误名称: " & $oMyError.scriptline& @CRLF & _
                "错误描述: " & $oMyError.description )

   $g_eventerror = 1 ; 函数返回
Endfunc通过AU3执行INSERT INTO 命令,为什么插入一条可以(代码中的$sql3 ),插入多条(代码中的$sql2)就失败呢,$sql2直接在ACCESS中执行是没问题的

auto 发表于 2012-5-25 20:17:54

本帖最后由 auto 于 2012-5-25 20:19 编辑

$mdb_data_path = @ScriptDir & "\db1.mdb"

$mdb = ObjCreate("ADODB.Connection")
$mdb.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)


$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; 建立客户错误处理程序

$sql0 = "DROP TABLE TempTable"
$sql1 = "CREATE TABLE TempTable(序号 AUTOINCREMENT(1,1), 姓名 text(255),年龄 text(255))"
$sql2 = "INSERT INTO TempTable(姓名,年龄) SELECT 姓名,年龄 FROM TABLE1 WHERE 姓名 LIKE '%陈%'"
$sql3 = "INSERT INTO TempTable(姓名,年龄) VALUES('张20','60')"
ClipPut($sql2)

$mdb.Execute($sql0)

$mdb.Execute($sql1)

$mdb.Execute($sql2)

;~ $mdb.Execute($sql3)

;~ $RS.Close
$mdb.Close


Func MyErrFunc()
   $HexNumber=hex($oMyError.number,8)
   Msgbox(0,"","截获一个 COM 错误 !" & @CRLF & _
                "错误代码: " & $HexNumber & @CRLF & _
                                "错误名称: " & $oMyError.source& @CRLF & _
                                "错误名称: " & $oMyError.helpfile& @CRLF & _
                                "错误名称: " & $oMyError.scriptline& @CRLF & _
                "错误描述: " & $oMyError.description )

   $g_eventerror = 1 ; 函数返回
Endfunc

见酒就害羞 发表于 2012-5-26 13:27:33

功能还少~~~多+一些共嫩一定有人要的

huohukiss 发表于 2012-5-26 14:43:11

学习 学习~!

kk_lee69 发表于 2012-5-27 00:22:09

試試看

$sql2 = "INSERT INTO TempTable([姓名],[年龄]) SELECT [姓名],[年龄] FROM table1 WHERE [姓名] LIKE '*陈*'"

ashfinal 发表于 2012-5-27 12:02:24

嗯 sql语句错误 是%不是*

cxm23 发表于 2012-5-28 09:49:16

确实是把*改成%就可以了,不过奇怪,ACCESS中的匹配任意字符不是应该用*吗?为什么在AU3中又要用%

kodin 发表于 2012-5-28 14:50:44

一直都是%,这是模糊搜索!必须的。

打个比方,我需要搜索所有数据里面都包含陈的,那我可以%陈%,如果我需要搜索陈为第一个关键字的,可以陈%。

cxm23 发表于 2012-5-28 19:50:34

可是在ACCESS中直接执行SQL的话,必须用*才行,用%匹配不了的

dhlhmgc 发表于 2012-6-4 14:20:14

确实:
Ado组件执行的SQL通配符是以%代表任意多个,_代表任意单个,这点与SQL SERVER好像是一致的
而在ACCESS执行的通配符则以*和?代表上述含义
以后做代码时,需要区分以上区别!

cxm23 发表于 2012-6-6 19:10:53

这样,学习了
页: [1]
查看完整版本: [已解决]AU3中执行ACCESS SQL不成功