本帖最后由 bnuzjm 于 2013-8-7 16:33 编辑
问题是这样的:(解决思路见四楼)
我通过 $RS.open($sql) 执行数据库插入、更新等操作,但是一旦调用 $RS.close 程序就出错。代码如下,大家知道是怎么回事么?是不是因为数据表被占用了? $RS.open($sql)除了执行查询操作外,还能不能用来执行插入、更新操作?
在 $RS.open("INSERT INTO a (name) values('dd')") 后面加了一句 $RS.open("select * from a"),可以正常关闭了,问题是可以解决,不过其中道理不大懂,只能猜个大概。Dim $mdb_data_path = @ScriptDir & "\sjcl.mdb"
_init()
Func _init()
$addfld = ObjCreate("ADODB.Connection")
$addfld.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & $mdb_data_path)
$RS =ObjCreate("ADODB.Recordset")
$RS.ActiveConnection =$addfld
$RS.open("INSERT INTO a (name) values('dd')")
$RS.close
$addfld.close
EndFunc
PS:
这是简化了的sql语句,本来可以用 $addfld.execute($sql) 来执行数据库操作的,但是我那条sql语句用到多次左连接,貌似没办法通过这种方式执行。后面尝试用 $RS.open($sql) 来执行,可以执行,却又出现 $RS.close 出错的问题。顺便把sql语句也贴上来,里面用到了左连接,为什么无法通过 $addfld.execute($sql) 执行呢?
INSERT INTO t_jhk_temp (pcmc, klmc, jhxz, tddwmc, zydh, zymc, jhrs, sfsf)
SELECT td_pcdm.pcmc,
td_kldm.klmc,
t_jhk.jhxz,
t_tddw.tddwmc,
t_jhk.zydh,
t_jhk.zymc,
t_jhk.jhrs,
t_jhk.sfsf
FROM (((t_jhk
LEFT JOIN t_tddw ON (t_jhk.kldm=t_tddw.kldm)
AND (t_jhk.pcdm=t_tddw.pcdm)
AND (t_jhk.tddw=t_tddw.tddwdm))
LEFT JOIN td_kldm ON asc(t_jhk.kldm)=asc(td_kldm.kldm))
LEFT JOIN td_pcdm ON t_jhk.pcdm=td_pcdm.pcdm); |