Cursor not returned from query

Delphi

20/07/2007

Está dando este erro Cursor not returned from query, na linha :

Dm.cds_material.refresh;

Alguem sabe?

Vai aí o código:
----------------------------------------------------------------------------------------

transacao.TransactionID:=1;
transacao.IsolationLevel:=xilREPEATABLEREAD;
dm.CONEXAO.StartTransaction(transacao);
dm.SDS_MATERIAL.Close;
dm.SDS_MATERIAL.CommandText:=´update material set cod_ordenado = :cod_ordenado,´+
´ descricao = :descricao, tipo_conta = :tipo_conta,´+
´ un = :un, preco_unitario = :preco_unitario)´;
dm.SDS_MATERIAL.ParamByName(´cod_ordenado´).AsString:=cod.Text;
dm.SDS_MATERIAL.ParamByName(´descricao´).AsString:=descricao.Text;
dm.SDS_MATERIAL.ParamByName(´tipo_conta´).AsString:=un.Text;
dm.SDS_MATERIAL.ParamByName(´un´).AsString:=unitario.Text;
dm.SDS_MATERIAL.ParamByName(´preco_unitario´).AsString:=tipo.Text;
dm.SDS_MATERIAL.ExecSQL;
dm.CONEXAO.Commit(transacao);
dm.cds_material.Refresh;
DM.CDS_MATERIAL.Refresh;
limparClick(Sender);

----------------------------------------------------------------------------------------------


Jpauloss

Jpauloss

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

31/07/2007

[quote:86e2105c12=´murilo-jau´]Ola, pessoal tenho uma aplicação de Delphi 7 com Firebird Embarcado (aplicativo e banco no mesmo PC) usando o DBExpress e este erro
´Cursor not returned from Query´
acontece na minha aplicação.[/quote:86e2105c12]

Esse erro acontece quando é feita uma tentativa de abrir (Open) um dataset que possui comandos DML (insert, update, delete).

Para esses comandos, utilize métodos de execução da instrução (Exec/ExecSQL/Execute, dependendo do componente utilizado)

Utilize o método open somente com instruções [i:86e2105c12]select[/i:86e2105c12].


GOSTEI 1

Mais Respostas

Emerson Nascimento

Emerson Nascimento

20/07/2007

você deve executar o refresh para atualizar os dados do dataset, porém seu dataset não tem dados, visto que o comando executado foi update. para comandos DML (update, delete, insert) não há retorno de dados (cursor), portanto não se atualiza os dados com refresh.
as duas linhas que contém refresh são totalmente desnecessárias - pra não dizer erradas.


GOSTEI 0
Jpauloss

Jpauloss

20/07/2007

você deve executar o refresh para atualizar os dados do dataset, porém seu dataset não tem dados, visto que o comando executado foi update. para comandos DML (update, delete, insert) não há retorno de dados (cursor), portanto não se atualiza os dados com refresh. as duas linhas que contém refresh são totalmente desnecessárias - pra não dizer erradas.


Então como irei atualizar o dbgrid no mesmo tempo de insert/update?
Só coloquei o refresh para atualizar o dbgrid na mesma hora que o usuario fosse inserindo e atualizando.
Como faço?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/07/2007

não sei como você desenvolve, mas se está usando SQLDataset -> DatasetProvider -> ClientDataset, não é preciso fazer update explícito. deixe que o provider se encarregue disso. trabalhe com componentes data-ware e envie os dados para o servidor através do método ApplyUpdates do clientdataset.


GOSTEI 0
Murilo-jau

Murilo-jau

20/07/2007

Ola, pessoal tenho uma aplicação de Delphi 7 com Firebird Embarcado (aplicativo e banco no mesmo PC) usando o DBExpress e este erro
´Cursor not returned from Query´
acontece na minha aplicação.

Ja tentei usando o quarteto sqlconnection , sqldataset , datasetprovider ,ClientDataset

assim como o SimpleDataset, mas nada resolve o erro.

é uma aplicação bem simples é só para abrir uma tabela e poder fazer alteração, nem inserir um novo registro eu não vou.

Seria alguma coisa haver com a questão de eu estar acessando o banco local e não remotamente ?

Por favor me ajudem, é importantíssimo.

Obrigado!


GOSTEI 0
Gyncowboy

Gyncowboy

20/07/2007

O que vc pode fazer é dar um close e um open no ClientDataSet.

Assim ele atualizará.

O mesmo que o refresh, mas quando se tem um update ele pode não atualizar porque não retorna dados. Sendo assim a necessidade de se fechar e abrir a query original novamente.


GOSTEI 0
Murilo-jau

Murilo-jau

20/07/2007

Posso passar por email para vcs um exemplo pois ainda não consegui resolver?????


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/07/2007

pode sim...


GOSTEI 0
Murilo-jau

Murilo-jau

20/07/2007

O erro dá no SqlDatset


GOSTEI 0
POSTAR