KiwiCsj 发表于 2008-8-22 22:03:29

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

这样简单的脚本都会出错,真是奇怪了,错在哪儿了呢?

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

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

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

KiwiCsj 发表于 2008-8-23 09:57:52

12小时悄悄地流逝,这四行代码的问题就是无解。。。。。:face (36):

penguinl 发表于 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


你试下这个例子,我测试了可以正常添加记录,数据库操作方面接触的少,试了你的代码很久都没找到原因,看上面这个例子能不能给你一点灵感!

penguinl 发表于 2008-8-23 10:30:44

这个例子跟你的那段代码的区别在于你的库有密码,后面的那个没有设置密码的!我研究的少不知道是不是这方面的原因,你仔细看一下~!

KiwiCsj 发表于 2008-8-23 11:06:54

谢谢 penguinl 以及其他帮忙测试的朋友,问题已经解决了,看来写代码还是要清醒的头脑以统观全局的眼光看待一个问题的前因后果才成。

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

解决了再去想,就是这么简单,当时却就是想不到这一点,就是搞不定,还搞到累得睡了一觉,呵呵。

s20305 发表于 2008-10-21 13:47:55

学习一下,做个同学录!呵呵!

bloodspirit 发表于 2009-8-12 11:36:04

恩,坚持不懈弄清一个问题,值得敬佩

jiangllllp 发表于 2010-9-18 12:14:14

学了一招,数据库处理起来是有点麻烦的

wzhen1210 发表于 2010-10-11 15:19:54

太笨了,没太明白

lhy6456210 发表于 2011-4-20 11:18:29

在SQL语法中,好象可以不用所有列都插入数据的》??

zouyingj 发表于 2011-4-23 16:56:40

我仔细查看过你的脚本代码,没有任何问题,问题在于你的数据库设计有问题,把S_id 数据类型修改为自动编号就好了,这个时候就可以成功写入数据了

auto 发表于 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 数据类型修改为自动编号,插入数据时,该字段留空,系统会填写

kodin 发表于 2011-4-24 00:50:49

{:face (327):}做数据库只要把DEBUG做好,就能很好的检查出错误,而无需浪费这么多时间.

多用用ObjEvent会有意外收获。

雪酷龙 发表于 2013-11-19 02:23:50

RE: 这样简单的脚本都会出错,真是奇怪了,会access连接的朋友来 [修改]
页: [1]
查看完整版本: 这样简单的脚本都会出错,真是奇怪了,会access连接的朋友来