找回密码
 加入
搜索
查看: 1293|回复: 3

[系统综合] ACCESS写数据问题

[复制链接]
发表于 2021-8-14 11:10:20 | 显示全部楼层 |阅读模式
_accessAddRecord($adSource, $adTable,$rData,$adCol)


#include <Access.au3>
$adSource = @ScriptDir & "\DB1.mdb"
$adTable = "Computer"
$adCol = "a TEXT(255) | b MEMO | c COUNTER | d INTEGER | e YESNO | f DATETIME | g CURRENCY | h OLEOBJECT"
_accessCreateDB($adSource)
_accessCreateTable($adSource, $adTable, $adCol)
$rData = "111"        ;重点 : 这里数据为非数组状态, 想写入第4列
$yo = _accessAddRecord($adSource, $adTable, $rData, $adCol = 4)
MsgBox(0, "提示", "数据库添加新记录<" & $rData & ">成功")



按函数说明《》当数值等于0,而当$rData不是数组,将会添加数据至(默认为第一格)

实际测试,$adCol设置无效,都写入的是第一列

不知道是个人理解错误还是函数本身不支持 ?
发表于 2021-8-14 13:36:13 | 显示全部楼层
本帖最后由 chzj589 于 2021-8-14 13:37 编辑
#cs ____________________________________
        例子:        示例 3
        函数名称:   _accessAddRecord()
        描述:       在现有的数据库表文件中添加新记录(单个或多个字段)
        语法:       _accessAddRecord($adSource, $adTable, $rData,$adCol = 0)
        参数:       $adSource  - 打开数据库文件的完整路径以及数据库文件名
        $adTable - 搜索的表名称
        $rData - 将数据被添加到字段(必须是一个数组才能将数据添加到多个字段,数据必须输入相应的工作类型数据)
        $adCol - 当数值等于0,而当$rData不是数组,将会添加数据至(默认为第一格)
#ce _______________脚本开始_________________
#AutoIt3Wrapper_UseX64 = n
$adSource = @ScriptDir & "\DB1.mdb"
$adTable = "Table3"
$rData = "1 | ABC | DEF"
_accessAddRecord($adSource, $adTable, $rData)
MsgBox(64, "提示", "添加新记录成功", 5)
Func _accessAddRecord($adSource, $adTable, $rData, $adCol = 0)
        If Not IsArray($rData) Then
                $rData = StringSplit($rData, '|')
        EndIf
        $oADO = 'ADODB.Connection'
        If IsObj($oADO) Then
                $oADO = ObjGet('', $oADO)
        Else
                $oADO = _dbOpen($adSource)
        EndIf
        If IsObj($oADO) = 0 Then Return SetError(1)
        If Not IsObj($oADO) Then Return SetError(2, 0, 0)
        $oRec = _dbOpenRecordset()
        If IsObj($oRec) = 0 Then Return SetError(2)
        With $oRec
                .Open("SELECT * FROM " & $adTable, $oADO, 3, 3)
                .AddNew
                If IsArray($rData) Then
                        For $I = 1 To UBound($rData) - 1;$rData[0]
                                $rData[$I] = StringStripWS($rData[$I], 1)
                                .Fields.Item($I - 1) = $rData[$I]
                        Next
                Else
                        .Fields.Item($adCol) = $rData
                EndIf
                .Update
                .Close
        EndWith
        $oADO.Close()
EndFunc   ;==>_accessAddRecord
Func _dbOpen($adSource)
        $oProvider = "Microsoft.Jet.OLEDB.4.0; "
        $objCheck = ObjCreate("Access.application")
        If IsObj($objCheck) Then
                $oVersion = $objCheck.Version
                If StringLeft($oVersion, 2) == "12" Then $oProvider = "Microsoft.ACE.OLEDB.12.0; "
        EndIf
        $oADO = ObjCreate("ADODB.Connection")
        $oADO.Provider = $oProvider
        $oADO.Open($adSource)
        Return $oADO
EndFunc   ;==>_dbOpen
Func _dbOpenRecordset()
        $oRec = ObjCreate("ADODB.Recordset")
        Return $oRec
EndFunc   ;==>_dbOpenRecordset
发表于 2021-8-14 15:24:02 | 显示全部楼层

#cs ____________________________________
        例子:        示例 2
        描述:       在现有的数据库表文件中添加新记录(单个或多个字段)
        语法:       INSERT INTO 表名称 VALUES (值1,值2,....')
                    INSERT INTO 表名称 (列1,列2,....') VALUES (值1,值2,....')
    说明:              我们所使用的是向指定列插入数据。列名称一定要和值对应,还要注
                    意某些类型的值在写入的时候不能带有“ ' or  " ”,所以在插入数据
                                的时候要注意('" & $rData1 & "','" & $rData2 & "')")内所要更
                                新的值是否多加了“ ' or "  ”号。
#ce _______________脚本开始_________________
#AutoIt3Wrapper_UseX64 = n
$adSource = @ScriptDir & "\DB1.mdb"
$adTable = "Table2"
$rData1 = "ABC"
$rData2 = "DEF"

$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $adSource)
$addfld.Execute("insert into " & $adTable & " (name,pass) values('" & $rData1 & "','" & $rData2 & "')")
$addfld.close
MsgBox(64, "提示", "添加新记录成功", 5)
 楼主| 发表于 2021-8-16 18:13:07 | 显示全部楼层
明白了,谢谢chzj589 , 是我钻错字眼了,这个地方也确实是有这个BUG,这样导致关键字段必须放在第一栏
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 14:35 , Processed in 0.069375 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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