| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1372 人关注过本帖
标题:[原创]Delphi 出現ORA-01000: maximum open cursors exceeded
只看楼主 加入收藏
形影随从
Rank: 1
等 级:新手上路
威 望:1
帖 子:188
专家分:0
注 册:2005-3-15
收藏
 问题点数:0 回复次数:6 
[原创]Delphi 出現ORA-01000: maximum open cursors exceeded
Delphi程式碰到在執行SELECT時報出ORA-01000: maximum open cursors exceeded
信息來,有知道這問題應該怎麽處理的嗎?
急........
搜索更多相关主题的帖子: maximum Delphi cursors exceeded open 
2006-11-09 23:58
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 

查一下Oracle语法有没有问题!


大家都是朋友,有空就来坐坐!
2006-11-10 17:17
形影随从
Rank: 1
等 级:新手上路
威 望:1
帖 子:188
专家分:0
注 册:2005-3-15
收藏
得分:0 
語法當然是沒有問題的了.
因這語句是放在一個FOR循環里做的.前面一部執行是OK的,但到後面就出現這種狀況了.
問題是程式原來是沒問題的.後來程式增了些功能後,就出現這問題了.但增加的功能又跟這個部分沒關系的.

2006-11-10 18:19
xu2000
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:51
帖 子:3890
专家分:56
注 册:2006-4-8
收藏
得分:0 

报错的是oracle而不是delphi.


我会拿出我全部的钱财,以保你衣食无忧。我会献出我所有的智慧,以助你一帆风顺。我会想到所有的笑语,以令你展眉开颜。我会挤出最长的时间,以使你终生幸福。        [本人原创的结婚宣言]
2006-11-10 22:23
volte
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:69
帖 子:1167
专家分:1316
注 册:2004-12-19
收藏
得分:0 

说了半天,你连程序都不放上来。
怎么解决问题!


大家都是朋友,有空就来坐坐!
2006-11-11 08:43
形影随从
Rank: 1
等 级:新手上路
威 望:1
帖 子:188
专家分:0
注 册:2005-3-15
收藏
得分:0 

Sorry!
程式裏是循環調用這個function的,一開始不會報錯,而是循環N次後報這錯誤的.
function TPTR_FRM.Generate_Hs_Commodity(isn, item: string; var hs_commodity_str: string): boolean;
var
strList: TStringList;
v_kpcount: integer;
v_partNum, v_Kpsn: string; // v_itemNm,
v_hardRev, v_firmRev, v_date_Code, v_supplier_id, v_family, v_part_category, v_description: string;
vmsg: string;
v_ExtraInfo: WideString;
begin
try
result := false;
vMsg := '';
strList := TstringList.Create;
Application.ProcessMessages;
with OraQuery2 do
begin
Close;
Sql.Clear;
UnPrepare;
Sql.Add('SELECT A.MO, A.ISN, A.KPSN, A.KPITEM, A.BIOS,A.PCBA, B.CUSTITEM,B.ITEMNM, C.KPCOUNT FROM MOKP_D A, ITEM B, MOKP C '
+ ' WHERE A.ISN=:ISN AND A.KPITEM=:ITEM AND B.ITEM(+)=A.KPITEM AND C.MO(+)=A.MO AND C.KPITEM(+)=A.KPITEM');
ParamByName('ISN').AsString := isn;
ParamByName('ITEM').AsString := item;
try
LogToFile2.WriteToLogFile('SELECT A.MO, A.ISN, A.KPSN, A.KPITEM, A.BIOS,A.PCBA, B.CUSTITEM,B.ITEMNM, C.KPCOUNT FROM MOKP_D A, ITEM B, MOKP C '
+ ' WHERE A.ISN=' + isn + ' AND A.KPITEM=' + item + ' AND B.ITEM(+)=A.KPITEM AND C.MO(+)=A.MO AND C.KPITEM(+)=A.KPITEM');
PrePare;
Open; //執行到這裏報出來的錯誤
except
on E: exception do
begin
LogToFile2.WriteToLogFile('MOKP_D A, ITEM B, MOKP C: ' + E.Message);
StrList.free;
exit;
end;
end;
v_kpsn := FieldByName('KPSN').AsString;
v_partnum := FieldByName('CUSTITEM').AsString;
v_description := FieldByName('ITEMNM').AsString;
v_kpcount := FieldByName('KPCOUNT').AsInteger;
v_ExtraInfo := '';
// v_ExtraInfo := FieldByName('ITEMSP').AsString; B.ITEMSP
LogToFile2.WriteToLogFile('v_kpsn=' + FieldByName('KPSN').AsString + ' v_partnum=' + FieldByName('CUSTITEM').AsString +
' v_description=' + FieldByName('ITEMNM').AsString + ' v_kpcount=' + inttostr(FieldByName('KPCOUNT').AsInteger));
if v_kpcount = 0 then
begin
Close;
Sql.Clear;
Unprepare;
Sql.Add('select * from mokp where mo=(select mo from isn where isn=:ISN) and kpbc=(select kpbc from mokp_d where isn=:ISN and kpitem=:KPITEM ) and kpcount>0 ');
ParamByName('ISN').AsString := isn;
ParamByName('KPITEM').AsString := item;
try
Prepare;
Open;
if RecordCount > 1 then
begin
v_kpcount := FieldByName('KPCOUNT').AsInteger;
end
else
begin
v_kpcount := 1;
end;
except
on E: exception do
begin
LogToFile2.WriteToLogFile('mokp: ' + E.Message);
v_Kpcount := 1;
end;
end;
end;
end;
v_date_Code := ''; //暫時為空
with OraQuery2 do
begin
Close;
UnPrepare;
Sql.Clear;
Sql.Add('SELECT ATTRID,ATTRINFO FROM MODEL_D WHERE MODELID=:ITEM');
ParamByName('ITEM').AsString := item;
try
LogToFile2.WriteToLogFile('SELECT ATTRID,ATTRINFO FROM MODEL_D WHERE MODELID=' + item);
Prepare;
Open;
First;
while not Eof do
begin
LogToFile2.WriteToLogFile('Query is not null');
if FieldByName('ATTRID').AsString = 'HPKP_H/W' then
v_hardRev := FieldByName('ATTRINFO').AsString
else if FieldByName('ATTRID').AsString = 'HPKP_F/W' then
v_firmRev := FieldByName('ATTRINFO').AsString
else if FieldByName('ATTRID').AsString = 'HPKP_VENDOR' then
v_supplier_id := FieldByName('ATTRINFO').AsString
else if FieldByName('ATTRID').AsString = 'HPKP_KIND' then
v_part_category := FieldByName('ATTRINFO').AsString
else if FieldByName('ATTRID').AsString = 'HPKP_DESC' then
v_description := FieldByName('ATTRINFO').AsString
else if FieldByName('ATTRID').AsString = 'HPKP_FAMILY' then
v_family := FieldByName('ATTRINFO').AsString;
Next;
end;
except
on E: exception do
begin
LogToFile2.WriteToLogFile('MODEL_D: ' + E.Message);
v_hardRev := '';
v_FirmRev := '';
v_date_Code := '';
v_supplier_id := '';
v_part_category := '';
end;
end;
end;
//------------------------------------------------------------------------------
// if G_Series = 'OXFORD' then
// begin
with OraQuery2 do
begin
// GET HW,FW FROM ISN_WAREINFO
Close;
UnPrepare;
Sql.Clear;
Sql.Add('SELECT * FROM ISN_WAREINFO WHERE ISN=:ISN');
ParamByName('ISN').AsString := ISN;
try
LogToFile2.WriteToLogFile('SELECT * FROM ISN_WAREINFO WHERE ISN=' + ISN);
Prepare;
Open;
if not IsEmpty then
begin
if FieldByName('HW').AsString <> '' then
begin
v_hardRev := FieldByName('HW').AsString;
end;
if FieldByName('FW').AsString <> '' then
begin
v_firmRev := FieldByName('FW').AsString;
end;
end;
except
on e: exception do
begin
LogToFile2.WriteToLogFile('ISN_WAREINFO: ' + E.Message);
v_hardRev := '';
v_FirmRev := '';
end;
end;
end;
// end;

//------------------------------------------------------------------------------
with strList do
begin
Clear;
if v_partNum <> '' then
begin
Add('CM');
Add('HW');
Add(v_partNum);
Add(item); //update 9.12
Add(v_kpsn);
Add(v_date_code);
Add(v_hardRev);
Add(v_firmRev);
Add(v_supplier_id);
Add('');
Add('I');
Add(IntToStr(v_kpcount));
Add(''); // 14,15 item exchange 2005.9.28
Add(v_family);
Add(v_part_category);
Add(v_description);
Add(v_ExtraInfo); // Ver3.5 :Add ExtraInformation 2005.9.28
end;
end;

hs_Commodity_str := GenerateStr(strList);
LogToFile2.WriteToLogFile('hs_Commodity_str=' + hs_Commodity_str);
Application.ProcessMessages;
result := true;
StrList.free;
except
on E: exception do
begin
LogToFile2.WriteToLogFile('hs_Commodity_str Error: ' + E.Message);
end;
end;
end;


2006-11-11 13:22
形影随从
Rank: 1
等 级:新手上路
威 望:1
帖 子:188
专家分:0
注 册:2005-3-15
收藏
得分:0 
以下是引用xu2000在2006-11-10 22:23:03的发言:

报错的是oracle而不是delphi.

我知道是oracle報出來的錯誤呀.
我是想知道這個問題在Delphi中如何來優化執行SELECT語句時不報這錯誤.
或者如何來Free.


2006-11-11 13:31
快速回复:[原创]Delphi 出現ORA-01000: maximum open cursors exceeded
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014537 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved