Fórum ORA-01000: maximum open cursor execeeded DBExpress - Delphi 2010 #411276
06/01/2012
0
Trabalho com Delphi 2010 e conexão com DBExpress
Tenho uma rotina que insere vários registro no banco e um loop e utilizop o comando insert into....
Ele gera um erro:
ORA-01000: maximum open cursor execeeded
isso ocorre quando atinge o envio de exatamente 140 registros que deve ser o maximo de cursor permitido no banco oracle, sei que tem como aumentar esse limite, mas nao considero uma boa solucao, o correto seria o dbexpress fechar o cursor no banco a cada insert, pois sei que o delphi nao faz isso automaticamente, alguem sabe algum comando que posso utilizar neste caso?
Att.
Adauto
Tenho uma rotina que insere vários registro no banco e um loop e utilizop o comando insert into....
Ele gera um erro:
ORA-01000: maximum open cursor execeeded
isso ocorre quando atinge o envio de exatamente 140 registros que deve ser o maximo de cursor permitido no banco oracle, sei que tem como aumentar esse limite, mas nao considero uma boa solucao, o correto seria o dbexpress fechar o cursor no banco a cada insert, pois sei que o delphi nao faz isso automaticamente, alguem sabe algum comando que posso utilizar neste caso?
Att.
Adauto
Suprasys Inteligente
Curtir tópico
+ 0
Responder
Posts
06/01/2012
Alex Oliveira
vc deve ta usando clientdataset certo ? vc ta dando applyupdate?? ou ta jogando tudo isso na memoria?
Responder
Gostei + 0
09/01/2012
Suprasys Inteligente
Utilizo uma Query, e passo para ela os comandos de Insert into... a todo registro, porém utilizo duas query, uma eu crio dinamicamente e destruo logo em seguida e a outra não.
O que observei foi que a cada insert ele abre um cursor no banco, mas não libera.
Ex do meu Codigo.
With QGeral do
Begin
CommandText :=INSERT INTO NFE_INVALIDAS +
( Nfe_Id, Serie, Data, Mensagem_Erro) +
Values +
( :ID, :vSerie, :vData, :vMensagem );
ParamByName(ID).AsString := Dados.cds_Fat.FieldByName(N_Nota).AsString;
ParamByName(vSerie).AsString := Dados.cds_Fat.FieldByName(Serie).AsString;
ParamByName(vData).AsDateTime := Date;
ParamByName(vMensagem).AsString := Dados.NFe.NotasFiscais.Items[0].Alertas;
ExecSQL(False);
ExecutaQ(Commit);
End;
Aguardo retorno.
O que observei foi que a cada insert ele abre um cursor no banco, mas não libera.
Ex do meu Codigo.
With QGeral do
Begin
CommandText :=INSERT INTO NFE_INVALIDAS +
( Nfe_Id, Serie, Data, Mensagem_Erro) +
Values +
( :ID, :vSerie, :vData, :vMensagem );
ParamByName(ID).AsString := Dados.cds_Fat.FieldByName(N_Nota).AsString;
ParamByName(vSerie).AsString := Dados.cds_Fat.FieldByName(Serie).AsString;
ParamByName(vData).AsDateTime := Date;
ParamByName(vMensagem).AsString := Dados.NFe.NotasFiscais.Items[0].Alertas;
ExecSQL(False);
ExecutaQ(Commit);
End;
Aguardo retorno.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)