PB+MS SQL+触发器必须注意,pbsql
PB+MS SQL+触发器必须注意:
若触发器存在两笔以上的返回值,比如两条update 语句,被误判为数据有改变,存盘不成功。
提示:
Row changed between retrieve and update.
No changes made to database.
所以MS SQL 触发器必须统一处理为:
触发器开始加:
if@@ROWCOUNT=0 Return --提高效能
setnocount on --不返回统计笔数,可减少网络频繁响应,提高效性能;避免误判为数据有改变(sybase不存在此类问题)
…
…
结束加:
setnocount off
PB没用过,好象是数据库开发工具,是开发工具哦,不是使用工具,可以编写基于SQL数据库的程序,所以触发器,存储过程当然在SQL里面建立了
messagebox("",ls_mysql)
//提示框出来后,ctrl+c复制出提示框内容,然后ctrl+v到查询分析器,看看有没有问题
sqlto.autocommit = true
Execute Immediate :ls_sql;
If sqlto.sqlcode = 0 Then
messagebox("","成功!")
Else
messagebox("","失败!"+sqlto.sqlerrtext)
End If
sqlto.autocommit = false
如果提示失败,在真正确认PB中的SQL脚本没错的情况下,检查
sqlto.sqlerrtext错误提示是什么,然后对症下药
如果还是不能,看看数据库是否有修改触发器的权限
----------------------
+" select @autoid = cast(rdrecords.autoid as varchar) from rdrecords,inserted where rdrecords.cdefine33 = cast(inserted.rdsid as varchar)"&
+"update purbillvouchs set purbillvouchs.rdsid = cast(@autoid as int(4)) from inserted
=================
就这个地方,update前面没有空格,拼出来的语句肯定有问题啦!!!