w60711 发表于 2019-6-20 13:25:16

[已解决]MDB创建问题

本帖最后由 w60711 于 2019-10-24 15:43 编辑

请问各位先进
我要建立accdb,使用以下代码

      $newMdb = ObjCreate("ADOX.Catalog")
      $newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $DBName & ";Jet Oledb:Database Password="&$mdb_data_pwd)
      $newmdb.ActiveConnection.Close


都会提示 $newmdb.ActiveConnection.Close 不符合
请问要如何修改呢
感谢各位

已解决
========================
虽然是老问题了终于在刚刚找到了原因...

代碼在 10F,感謝大大的幫忙

1.首先安装 Microsoft Access Database Engine 2010 可转散发套件 x86
2.执行源码,成功。

备注:
安装第一点的x86,源码使用:#AutoIt3Wrapper_UseX64 = n
安装第一点的x64,源码使用:#AutoIt3Wrapper_UseX64 = y

十分感谢您的帮忙



chzj589 发表于 2019-6-20 13:51:09


例子:      示例 2
描述:      创建一个数据库文件(*. mdb)
说明:      ADOX是ADODB的对象扩展库,它的对象可用于创建、修改和删除数据库。
            它还包含安全对象,可用于维护用户和组,以及授予和撤销对象的权限。
            这里使用的对象:Catalog 是用于创建包含描述数据源模式目录的集合。
            Create 创建新的目录。“Provider= Microsoft.Jet.OLEDB.4.0”表示数据库的类型,
            “DataSource=" & $mdb_data_path”数据库创建的路径与名称。
            最后是结束创建。(ActiveConnection指示目录所属的 ADO Connection 对象)
#ce _______________脚本开始_________________
#AutoIt3Wrapper_UseX64 = n
$adSource = @ScriptDir & "\DB1.mdb"
$Password = "123456"
If Not FileExists($adSource) Then;如果脚本所在目录没有发现数据库文件,则创建数据库文件,
        $newMdb = ObjCreate("ADOX.Catalog")
        $newMdb.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source="& $adSource& ";Jet Oledb:Database Password="&$Password);创建新的目录
        $newMdb.ActiveConnection.Close
        MsgBox(64, "提示", "建立数据库成功", 5)
Else
        MsgBox(64, "提示", "你已经建立了一个数据库了", 5)
EndIf

chzj589 发表于 2019-6-20 19:59:16

chzj589 发表于 2019-6-20 13:51


access2007以上的格式
        $newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)

#AutoIt3Wrapper_UseX64 = n
$adSource = @ScriptDir & "\DB1.mdb"
$Password = "123456"
$adtables = "admin"
If Not FileExists($adSource) Then;如果脚本所在目录没有发现数据库文件,则创建数据库文件,
        $newMdb = ObjCreate("ADOX.Catalog")
        $newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password);创建新的目录
        $newMdb.ActiveConnection.Close
        MsgBox(64, "提示", "建立数据库成功", 5)
Else
        MsgBox(64, "提示", "你已经建立了一个数据库了", 5)
EndIf

w60711 发表于 2019-6-23 18:26:38

本帖最后由 w60711 于 2019-6-23 18:27 编辑

chzj589 发表于 2019-6-20 19:59
access2007以上的格式
      $newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSourc ...
感謝ˋ您~
但是它顯示以下訊息

The requested action with this object has failed.:
$newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)
$newMdb^ ERROR




chzj589 发表于 2019-6-23 18:59:41

w60711 发表于 2019-6-23 18:26
感謝ˋ您~
但是它顯示以下訊息



未成功创建数据库
这一句有写上吗?
#AutoIt3Wrapper_UseX64 = n

chzj589 发表于 2019-6-26 13:42:08

把你创建2007ACCESS数据库的代码贴上来,我看看是什么原因

w60711 发表于 2019-6-26 18:31:11

chzj589 发表于 2019-6-26 13:42
把你创建2007ACCESS数据库的代码贴上来,我看看是什么原因

>"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "D:\Admin\Desktop\accdb_create.au3" /UserParams   
+>18:27:37 Starting AutoIt3Wrapper v.16.612.1119.0 SciTE v.3.6.6.0   Keyboard:00000409OS:WIN_10/CPU:X64 OS:X64Environment(Language:0404)CodePage:950utf8.auto.check:4
+>         SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE   UserDir => C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper
>Running AU3Check (3.3.14.5)from:C:\Program Files (x86)\AutoIt3input:D:\Admin\Desktop\accdb_create.au3
+>18:27:37 AU3Check ended.rc:0
>Running:(3.3.14.5):C:\Program Files (x86)\AutoIt3\autoit3.exe "D:\Admin\Desktop\accdb_create.au3"   
--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
"D:\Admin\Desktop\accdb_create.au3" (7) : ==> The requested action with this object has failed.:
$newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)
$newMdb^ ERROR
->18:27:38 AutoIt3.exe ended.rc:1
+>18:27:38 AutoIt3Wrapper Finished.
>Exit code: 1    Time: 1.551

chzj589 发表于 2019-6-26 20:25:53

w60711 发表于 2019-6-26 18:31


$adSource =数据库名称
$Password =数据库密码
以上你都没有设定,数据库当然无法创建

#cs
        >"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "D:\Admin\Desktop\accdb_create.au3" /UserParams
        +>18:27:37 Starting AutoIt3Wrapper v.16.612.1119.0 SciTE v.3.6.6.0   Keyboard:00000409OS:WIN_10/CPU:X64 OS:X64Environment(Language:0404)CodePage:950utf8.auto.check:4
        +>         SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE   UserDir => C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper
        >Running AU3Check (3.3.14.5)from:C:\Program Files (x86)\AutoIt3input:D:\Admin\Desktop\accdb_create.au3
        +>18:27:37 AU3Check ended.rc:0
        >Running:(3.3.14.5):C:\Program Files (x86)\AutoIt3\autoit3.exe "D:\Admin\Desktop\accdb_create.au3"
        --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
        "D:\Admin\Desktop\accdb_create.au3" (7) : ==> The requested action with this object has failed.:
        ->18:27:38 AutoIt3.exe ended.rc:1
        +>18:27:38 AutoIt3Wrapper Finished.
        >Exit code: 1    Time: 1.551
#ce
#AutoIt3Wrapper_UseX64 = n
$adSource = @ScriptDir & "\DB1.mdb"
$Password = "123456"
$adtables = "admin"
If Not FileExists($adSource) Then;如果脚本所在目录没有发现数据库文件,则创建数据库文件,
        $newMdb = ObjCreate("ADOX.Catalog")
        $newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)
        $newMdb.ActiveConnection.Close

        MsgBox(64, "提示", "建立数据库成功", 1)
Else
        MsgBox(64, "提示", "你已经建立了一个数据库了", 1)
EndIf

w60711 发表于 2019-6-26 22:08:41

chzj589 发表于 2019-6-26 20:25
$adSource =数据库名称
$Password =数据库密码
以上你都没有设定,数据库当然无法创建

感謝您熱心解答~^^
我數據庫變數是有設定的~


代碼沒問題的話
看來可能是電腦環境的問題了...
我再來找找看原因在哪~
PS. 我是Win10 x64 教育版
AU3 3.3.14.2

chzj589 发表于 2019-6-27 12:26:29

本帖最后由 chzj589 于 2019-6-27 12:28 编辑

w60711 发表于 2019-6-26 22:08
感謝您熱心解答~^^
我數據庫變數是有設定的~


我刚发现是你的数据库的后缀问题:$adSource = @ScriptDir & "\DB1.mdb";DB1.accdb"
#AutoIt3Wrapper_UseX64 = n
$adSource = @ScriptDir & "\DB1.mdb";DB1.accdb"
$Password = "123456"
$adtables = "admin"
If Not FileExists($adSource) Then;如果脚本所在目录没有发现数据库文件,则创建数据库文件,
        $newMdb = ObjCreate("ADOX.Catalog")
        $newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password);创建新的目录
        $newMdb.ActiveConnection.Close

        $ADDTBL = ObjCreate("ADODB.Connection")
        $ADDTBL.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)
        $ADDTBL.Execute("CREATE TABLE " & $adtables)
        $ADDTBL.Close;建表

        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)
        $addfld.Execute("ALTER TABLE " & $adtables & " ADD id identity(1, 1) primary key,namekey text(255),passkey text(255) ,ipasskey text(255),ipasskeya text(255),ipasskeyb text(255))")
        $addfld.close

        $namekey = "A"
        $passkey = "B"
        $ipasskey = "C"
        $ipasskeya = "D";@YEAR & "年" & @MON & "月" & @MDAY & "日";"zxc-=iop"
        $ipasskeyb = "未注册"
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)
        $addfld.execute("insert into " & $adtables & " (namekey,passkey,ipasskey,ipasskeya,ipasskeyb) values('" & $namekey & "','" & $passkey & "','" & $ipasskey & "','" & $ipasskeya & "','" & $ipasskeyb & "')")
        $addfld.close
        MsgBox(64, "提示", "建立数据库成功", 1)
Else
        MsgBox(64, "提示", "你已经建立了一个数据库了", 1)
        $addfld = ObjCreate("ADODB.Connection")
        $addfld.Open("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & $adSource & ";Jet Oledb:Database Password=" & $Password)
        $RS = ObjCreate("ADODB.recordset")
        $RS.ActiveConnection = $addfld
        $RS.open("SELECT * FROM " & $adtables)
        Local $i = 0
        While Not $RS.eof And Not $RS.bof
                MsgBox(0, "提示", $RS.Fields(1).value & @CRLF & $RS.Fields(2).value & @CRLF & $RS.Fields(3).value & @CRLF & $RS.Fields(4).value & @CRLF & $RS.Fields(5).value, 5)
                ;$i += 1
                $RS.movenext
        WEnd
        $RS.close
        $addfld.Close
EndIf


blue003 发表于 2019-6-28 07:23:28

学习了,谢谢

xuanniao110 发表于 2019-6-29 20:16:52

应该是系统原因   我还遇见了   所有论坛兄弟出的数据库实例    都会报这个错
>"D:\Program Files\AutoIt3\SciTE\AccAu3Wrapper\AccAu3Wrapper.exe" /run /prod /ErrorStdOut /in "D:\Desktop\ACCES操作实例.au3" /UserParams   
+>20:16:37 开始 AccAu3Wrapper v.16.306.1237.0 SciTE v.3.6.2.0
    ------------------------------------------------------------------------------------------------------
    键盘布局:00000804操作系统:WIN_10/CPU:X64 系统架构:X64    文件编码:UTF8含BOM(128)    字符集:936
    SciTE目录 => D:\Program Files\AutoIt3\SciTE   用户目录 => C:\Users\Administrator\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper   SCITE_USERHOME => C:\Users\Administrator\AppData\Local\AutoIt v3\SciTE
    ------------------------------------------------------------------------------------------------------
>运行 AU3Check (3.3.14.2)从:D:\Program Files\AutoIt3
+>20:16:37 AU3Check 语法检查结束.rc:0
>运行:(3.3.14.2):D:\Program Files\AutoIt3\autoit3_x64.exe "D:\Desktop\ACCES操作实例.au3"   
--> 按 Ctrl+Alt+Break 重新启动或按 Ctrl+Break 停止
"D:\Desktop\ACCES????.au3" (104) : ==> The requested action with this object has failed.:
$newMdb.Create("Provider=Microsoft.Jet.OLEDB.12.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$newMdb^ ERROR
->20:16:39 AutoIt3.exe 结束.rc:1
+>20:16:39 AccAu3Wrapper 完成.
>Exit code: 1    Time: 2.096

zmdzhxj 发表于 2019-6-30 23:38:39

这个很有用

tarcy118 发表于 2019-7-6 00:17:32

不错支持一下

chzj589 发表于 2019-7-6 08:52:11

本帖最后由 chzj589 于 2019-7-6 08:54 编辑

xuanniao110 发表于 2019-6-29 20:16
应该是系统原因   我还遇见了   所有论坛兄弟出的数据库实例    都会报这个错
>"D:\Program Files\AutoIt3 ...
好象这句不对???
$newMdb.Create("Provider=Microsoft.Jet.OLEDB.12.0; Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)
$newMdb.Create("Provider=Microsoft.Jet.OLEDB.12.0; ???
应该是:
$newMdb.Create("Provider=Microsoft.Jet.OLEDB.4.0;
$newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0;
$newMdb.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & $mdb_data_path & ";Jet Oledb:Database Password=" & $mdb_data_pwd)

页: [1] 2
查看完整版本: [已解决]MDB创建问题