用Delphi 7,BDE和OracleORA-01000:最大打開的遊標超出
我執行SQL SELECT語句,然後通過各自的返回set的記錄步驟,並執行以下更新SQL
var
AQuery: TQuery;
begin
AQuery:= TQuery.Create(nil);
AQuery.DatabaseName:= ADatabase.DatabaseName;
with AQuery do
begin
SQL.Text:= 'UPDATE AP_Master SET CMCL_FORECAST_CLEARED=:AClearedDate WHERE ID=:AMasterId';
ParamByName('AMasterId').AsString:= IntToStr(AId);
ParamByName('AClearedDate').AsDateTime:= StrToDateTime(FormatDateTime('mm/dd/yyyy', AForeCastClearedDate));
try
ExecSql;
except on E: Exception do
begin
raise Exception.create('Error Updating AP_Master Tables Forecast Cleared Date!' + E.Message);
end;//except
end; //try
end; //with
AQuery.Close;
AQuery.Free;
end;
它的工作原理爲福斯特500分+的記錄,但後來我得到一個:ORA-01000:最大打開的遊標超出消息
有什麼我需要在BDE側做,Oracle方面,或在我的代碼(使用標準TQuery和TDatabase組件的Im)
你看過http://mail.dir.bg/~radoslav.rusinov/Blog/How.to.Cope.with.an.ORA-01000.Error-v.2.1。 pdf? – SimaWB 2011-04-28 12:26:29
你至少應該把Close()和Free()放在try/finally塊中。但我不認爲這會解決問題。 – 2011-04-28 12:28:15
ParamByName('AMasterId')。AsString:= IntToStr(AId);可以簡單地寫成ParamByName('AMasterId')。AsInteger:= AId;也許你可以在日期上做同樣的事情。爲什麼獲取日期,將其轉換爲字符串,然後獲取該字符串並將其轉換爲日期?如果您只需要獲得日/月/年的部分,則有更好的方法(即Trunc())。 – 2011-04-28 15:00:51