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開發的資料庫中,是否使用觸發器,預存程序.
PB沒用過,好象是資料庫開發工具,是開發工具哦,不是使用工具,可以編寫基於SQL資料庫的程式,所以觸發器,預存程序當然在SQL裡面建立了
PB不可以動態建立帶變數的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前面沒有空格,拼出來的語句肯定有問題啦!!!