"Procedure has not been executed or has no results"
具体情况是,在一个cb_00n中调用了一个函数,而在函数中调用了一个存储过程,用于统计/汇总部分历史数据.
执行完成之后,偶尔在切换到别的数据控件焦点时,即出现错误. 显示了上面的错误信息.?
这类错误如何避免? 应该注意什么?
/*
- SQL code
DECLARE aproc_genNewPtfromorg PROCEDURE FOR ap_genNewPtfromorg ( :ldt_Max, :ldt_mid, :ls_yesNo ); SetPointer(HourGlass!) Open(w_schedule_bar) ldt_Now = DateTime(Today(), Time(String(Now(), 'hh') + ':00:00.000' )) ldt_mid = ldt_Now If IsNull(ldt_Max) Then ldt_Max = DateTime(Date('2005-12-25'),Time('00:00:00.000')) w_schedule_bar.uf_schedule_move(50) EXECUTE aproc_genNewPtfromorg ; If SQLCA.sqlcode = 0 Or SQLCA.sqlcode = 100 Then Commit ; ElseIf SQLCA.sqlcode = -1 Then // Issue an error message since it failed. MessageBox("Stored Procedure Error!", SQLCA.sqlerrtext) RollBack ; End If Close aproc_genNewPtfromorg ; ElseIf ldt_Now > ldt_Max Then ll_Hours = DaysAfter(Date(ldt_Max), Date(ldt_Now)) * 24 + (SecondsAfter(Time(ldt_Max), Time(ldt_Now)) / 3600) For ll_i = 1 To ll_Hours w_schedule_bar.uf_schedule_move(100 * ll_i / ll_Hours) If Hour(Time(ldt_Max)) >= 23 Then // 23点以后,加一个小时日期也要加一天。 ldt_mid = DateTime(RelativeDate(Date(ldt_Max), 1), RelativeTime(Time(ldt_Max), 3600)) Else ldt_mid = DateTime(Date(ldt_Max), RelativeTime(Time(ldt_Max), 3600) ) End If EXECUTE aproc_genNewPtfromorg ; If SQLCA.sqlcode = 0 Or SQLCA.sqlcode = 100 Then Commit ; ElseIf SQLCA.sqlcode = -1 Then // Issue an error message since it failed. MessageBox("Stored Procedure Error!", SQLCA.sqlerrtext) RollBack ; End If ldt_Max = ldt_mid Next If ll_Hours > 1 Then Close aproc_genNewPtfromorg ; End If End If Close(w_schedule_bar) SetPointer(Arrow!)
*/
------解决方案--------------------
执行完成之后,偶尔在切换到别的数据控件焦点时,即出现错误.
偶尔?
就是有时报错?有时不报错?没有规律?
把窗口重新regenerate.
------解决方案--------------------
为什么在SQLCODE = 100 的时候还COMMIT 呢,不明白