返回列表 发帖

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

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

会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 编辑 ]
附件: 您需要登录才可以下载或查看附件。没有帐号?加入
生命,美在过程。
程序,美在流程。
我,什么都不会,
  只会胡思乱想……

12小时悄悄地流逝,这四行代码的问题就是无解。。。。。
生命,美在过程。
程序,美在流程。
我,什么都不会,
  只会胡思乱想……

TOP

$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


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

TOP

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

TOP

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

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

解决了再去想,就是这么简单,当时却就是想不到这一点,就是搞不定,还搞到累得睡了一觉,呵呵。
生命,美在过程。
程序,美在流程。
我,什么都不会,
  只会胡思乱想……

TOP

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

TOP

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

TOP

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

TOP

太笨了,没太明白

TOP

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

TOP

我仔细查看过你的脚本代码,没有任何问题,问题在于你的数据库设计有问题,把S_id 数据类型修改为自动编号就好了,这个时候就可以成功写入数据了
附件: 您需要登录才可以下载或查看附件。没有帐号?加入

TOP

$conn.Execute('insert into S_zbbTable (S_zbbymd,S_zbbname,S_bz,S_id ) values ("20080804","张三李四","备注文本","123" )')
即可
表设计了S_id主键,主键有唯一性,不能为空,不能重复

或者按楼上的解决
S_id 数据类型修改为自动编号,插入数据时,该字段留空,系统会填写

TOP

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

多用用ObjEvent会有意外收获。

TOP

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

TOP

返回列表