找回密码  加入

AUTOIT CN

搜索
查看: 10156|回复: 13

这样简单的脚本都会出错,真是奇怪了,会access连接的朋友来

[复制链接]
发表于 2008-8-22 22:03:29 | 显示全部楼层 |阅读模式
这样简单的脚本都会出错,真是奇怪了,错在哪儿了呢?

会access连接的朋友来帮忙看看,实例中出错后,半睡半醒查了好几个小时(没睡够,太困了),实在头痛了,想不出来原因,现在扣出故障部分给大家看看,到底是怎么回事?

如果要精减一下的话,其实代码只有四行。包括代码和数据库样本都在压缩包中,请帮助下载测试,先谢谢各位朋友
  1. $conn = ObjCreate("ADODB.Connection")
  2. ;~ $RS = ObjCreate("ADODB.Recordset")
  3. $conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & @ScriptDir&"\test.mdb;Jet Oledb:Database Password=abc")
  4. ;~ $RS.ActiveConnection = $conn
  5. $conn.Execute('insert into S_zbbTable (S_zbbymd,S_zbbname,S_bz) values ("20080804","张三李四","备注文本" )')
  6. $conn.close       
  7. $rs=""                ;释放资源
  8. $conn=""
复制代码

[ 本帖最后由 KiwiCsj 于 2008-8-23 11:07 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

x
 楼主| 发表于 2008-8-23 09:57:52 | 显示全部楼层
12小时悄悄地流逝,这四行代码的问题就是无解。。。。。
发表于 2008-8-23 10:27:53 | 显示全部楼层
$dbname="test.mdb"
$tblname="测试表"
$fldname="测试字段"
$format="int"
$sData="123456"
$T="*"
_CreateDB($dbname)
_CreateTBL($dbname, $tblname)
_CreateFLD($dbname, $tblname, $fldname, $format)
_InsertData($dbname, $tblname, $fldname, $sData)
;_DeleteData($dbname, $tblname, $fldname, $sData)
;_SelectData($dbname, $tblname, $fldname, $T)
Func _CreateDB($dbname)
$newMdb = ObjCreate("ADOX.Catalog")
$newMdb.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $dbname)
$newmdb.ActiveConnection.Close
EndFunc

Func _CreateTBL($dbname, $tblname)
$addtbl = ObjCreate("ADODB.Connection")
$addTbl.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $dbname)
$addTbl.Execute("CREATE TABLE " & $tblname)
$addtbl.Close
EndFunc

Func _CreateFLD($dbname, $tblname, $fldname, $format)
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $dbname)
$addfld.Execute("ALTER TABLE " & $tblname & " ADD " & $fldname & " " & $format)
$addfld.Close
EndFunc

Func _InsertData($dbname, $tblname, $fldname, $sData)
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $dbname)
$addfld.Execute("Insert Into " & $tblname & " (" & $fldname & ") " & "VALUES ("&$sData&")")
$addfld.Close
EndFunc


你试下这个例子,我测试了可以正常添加记录,数据库操作方面接触的少,试了你的代码很久都没找到原因,看上面这个例子能不能给你一点灵感!
发表于 2008-8-23 10:30:44 | 显示全部楼层
这个例子跟你的那段代码的区别在于你的库有密码,后面的那个没有设置密码的!我研究的少不知道是不是这方面的原因,你仔细看一下~!
 楼主| 发表于 2008-8-23 11:06:54 | 显示全部楼层
谢谢 penguinl 以及其他帮忙测试的朋友,问题已经解决了,看来写代码还是要清醒的头脑以统观全局的眼光看待一个问题的前因后果才成。

说下我今天再次反复测试所得的错误原因结论:
因为insert要求所有存在的列都必需有所填充,而我的例子中,有两个列空着没有要求写入,所以就错了,唉。

解决了再去想,就是这么简单,当时却就是想不到这一点,就是搞不定,还搞到累得睡了一觉,呵呵。
发表于 2008-10-21 13:47:55 | 显示全部楼层
学习一下,做个同学录!呵呵!
发表于 2009-8-12 11:36:04 | 显示全部楼层
恩,坚持不懈弄清一个问题,值得敬佩
发表于 2010-9-18 12:14:14 | 显示全部楼层
学了一招,数据库处理起来是有点麻烦的
发表于 2010-10-11 15:19:54 | 显示全部楼层
太笨了,没太明白
发表于 2011-4-20 11:18:29 | 显示全部楼层
在SQL语法中,好象可以不用所有列都插入数据的》??
发表于 2011-4-23 16:56:40 | 显示全部楼层
我仔细查看过你的脚本代码,没有任何问题,问题在于你的数据库设计有问题,把S_id 数据类型修改为自动编号就好了,这个时候就可以成功写入数据了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

x
发表于 2011-4-23 20:02:17 | 显示全部楼层
$conn.Execute('insert into S_zbbTable (S_zbbymd,S_zbbname,S_bz,S_id ) values ("20080804","张三李四","备注文本","123" )')
即可
表设计了S_id主键,主键有唯一性,不能为空,不能重复

或者按楼上的解决
S_id 数据类型修改为自动编号,插入数据时,该字段留空,系统会填写
发表于 2011-4-24 00:50:49 | 显示全部楼层
做数据库只要把DEBUG做好,就能很好的检查出错误,而无需浪费这么多时间.

多用用ObjEvent会有意外收获。
发表于 2013-11-19 02:23:50 | 显示全部楼层
RE: 这样简单的脚本都会出错,真是奇怪了,会access连接的朋友来 [修改]
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2023-2-9 17:07 , Processed in 0.250000 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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