ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Erro: cannot perform this operation on an open dataset
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
iammedeiros
Novato
Novato


Registrado: Segunda-Feira, 10 de Abril de 2017
Mensagens: 31

MensagemEnviada: Ter Abr 11, 2017 9:23 pm    Assunto: Erro: cannot perform this operation on an open dataset Responder com Citação

Bom pessoal, sou novo no delphi e estou desenvolvendo uma aplicação apenas para fins de aprendizado, no meu form tenho um capo pesquisar e um botão filtrar que ao ser pressionado deveria ir no banco e buscar uma consulta conforme for digitado um valor no campo de pesquisar, o problema é que meu código está dando o seguinte erro: cannot perform this operation on an open dataset.

segue abaixo meu código:
dmDados.cdsUsuarios.Close;
case cbFiltros.ItemIndex of
0 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE NOME LIKE ' + QuotedStr('%'+edtPesquisar.Text+'%');
1 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE LOGIN LIKE ' + QuotedStr('%'+edtPesquisar.Text+'%');
end;
dmDados.cdsUsuarios.Open;

Agradeço desde já!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joseY
Novato
Novato


Registrado: Domingo, 9 de Abril de 2017
Mensagens: 13

MensagemEnviada: Ter Abr 11, 2017 10:17 pm    Assunto: Responder com Citação

Ola iammedeiros.

fiz assim:
cdsUsuarios.Close;
case ComboBox1.ItemIndex of
0 : SQLDataSet1.CommandText := 'SELECT * FROM VI_USUARIOS WHERE NOME LIKE ' + QuotedStr('%'+edit1.Text+'%');
1 : SQLDataSet1.CommandText := 'SELECT * FROM VI_USUARIOS WHERE LOGIN LIKE ' + QuotedStr('%'+edit1.Text+'%');
end;
cdsUsuarios.Open;

cdsUsuarios que está ligado a um dataSetProvider e este ligado a um SqlDataSet que recebe o comandText.

Espero que ajude..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Abr 12, 2017 10:08 am    Assunto: Responder com Citação

Bom dia,

iammedeiros, você por acaso está executando o método Open do SQLDataSet (ou outro tipo de DataSet que está ligado ao DataSetProvider)?
Se estiver experimente remover o Open (e consequentemente o Close) mantendo apenas o Open no ClientDataSet.

Espero que ajude

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!gopouva-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
iammedeiros
Novato
Novato


Registrado: Segunda-Feira, 10 de Abril de 2017
Mensagens: 31

MensagemEnviada: Qua Abr 12, 2017 6:46 pm    Assunto: Responder com Citação

joseY escreveu:
Ola iammedeiros.

fiz assim:
cdsUsuarios.Close;
case ComboBox1.ItemIndex of
0 : SQLDataSet1.CommandText := 'SELECT * FROM VI_USUARIOS WHERE NOME LIKE ' + QuotedStr('%'+edit1.Text+'%');
1 : SQLDataSet1.CommandText := 'SELECT * FROM VI_USUARIOS WHERE LOGIN LIKE ' + QuotedStr('%'+edit1.Text+'%');
end;
cdsUsuarios.Open;

cdsUsuarios que está ligado a um dataSetProvider e este ligado a um SqlDataSet que recebe o comandText.

Espero que ajude..


O código está igual ao meu, só removeu o dmDados que é meu datamodulo onde estão os componentes para conexão com banco
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
iammedeiros
Novato
Novato


Registrado: Segunda-Feira, 10 de Abril de 2017
Mensagens: 31

MensagemEnviada: Qua Abr 12, 2017 7:18 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

iammedeiros, você por acaso está executando o método Open do SQLDataSet (ou outro tipo de DataSet que está ligado ao DataSetProvider)?
Se estiver experimente remover o Open (e consequentemente o Close) mantendo apenas o Open no ClientDataSet.

Espero que ajude

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!gopouva-residencial-casa


Bom cara ja tentei removendo tanto o open quando o close, mas não vai de jeito nenhum, quando não da erro, simplesmente não me retorna valor algum
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
iammedeiros
Novato
Novato


Registrado: Segunda-Feira, 10 de Abril de 2017
Mensagens: 31

MensagemEnviada: Qua Abr 12, 2017 7:19 pm    Assunto: Responder com Citação

O engraçado é que estou fazendo está aplicação estudando atraves de vídeo aulas e no do professor funciona perfeitamente com este msm código, e o meu está exatamente igual ao dele
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joseY
Novato
Novato


Registrado: Domingo, 9 de Abril de 2017
Mensagens: 13

MensagemEnviada: Qua Abr 12, 2017 9:29 pm    Assunto: Responder com Citação

Olá..

Veja bem no código que eu te passei, estou utilizado o commandText do SqlDataSet e não do ClientDataSet.

e também:
cdsUsuarios que está ligado a um dataSetProvider e este ligado a um SqlDataSet que recebe o comandText.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Abr 13, 2017 9:23 am    Assunto: Responder com Citação

iammedeiros, o que aconteceu exatamente sem o Open e o Close no SQLDataSet?
Acredito que quando deu erro estava com um problema e quando não retornou nada estava com outro problema.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
iammedeiros
Novato
Novato


Registrado: Segunda-Feira, 10 de Abril de 2017
Mensagens: 31

MensagemEnviada: Qui Abr 13, 2017 10:04 am    Assunto: Responder com Citação

joseY escreveu:
Olá..

Veja bem no código que eu te passei, estou utilizado o commandText do SqlDataSet e não do ClientDataSet.

e também:
cdsUsuarios que está ligado a um dataSetProvider e este ligado a um SqlDataSet que recebe o comandText.


Msms subistituindo o comando do ClientDataSet para o SQlDataSet da o msm erro, ja não sei mais o que fazer, ja tentei de tudo e não funciona, quando não da este erro ai, ele simplesmente não me retorna nada, se caso eu tirar o metodo open ou o close.
[/img]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Abr 13, 2017 10:45 am    Assunto: Responder com Citação

Experimente fazer uns testes sem o Open e o Close no SQLDataSet e o código da seguinte forma para ver o que acontece:

Código:
dmDados.cdsUsuarios.Close;
case cbFiltros.ItemIndex of
    0 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE NOME LIKE ' + QuotedStr('%' + edtPesquisar.Text + '%');
    1 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE LOGIN LIKE ' + QuotedStr('%' + edtPesquisar.Text + '%');
end;
dmDados.cdsUsuarios.Open;
ShowMessage('Quantidade de registros: ' + IntToStr(dmDados.cdsUsuarios.RecordCount));


Se o resultado for zero nos testes, experimente fazer outro teste removendo o filtro da query para ver se o resultado continua zero:

Código:
dmDados.cdsUsuarios.Close;
dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS';
dmDados.cdsUsuarios.Open;
ShowMessage('Quantidade de registros: ' + IntToStr(dmDados.cdsUsuarios.RecordCount));


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
iammedeiros
Novato
Novato


Registrado: Segunda-Feira, 10 de Abril de 2017
Mensagens: 31

MensagemEnviada: Qui Abr 13, 2017 11:26 am    Assunto: Responder com Citação

imex escreveu:
Experimente fazer uns testes sem o Open e o Close no SQLDataSet e o código da seguinte forma para ver o que acontece:

Código:
dmDados.cdsUsuarios.Close;
case cbFiltros.ItemIndex of
    0 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE NOME LIKE ' + QuotedStr('%' + edtPesquisar.Text + '%');
    1 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE LOGIN LIKE ' + QuotedStr('%' + edtPesquisar.Text + '%');
end;
dmDados.cdsUsuarios.Open;
ShowMessage('Quantidade de registros: ' + IntToStr(dmDados.cdsUsuarios.RecordCount));


Se o resultado for zero nos testes, experimente fazer outro teste removendo o filtro da query para ver se o resultado continua zero:

Código:
dmDados.cdsUsuarios.Close;
dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS';
dmDados.cdsUsuarios.Open;
ShowMessage('Quantidade de registros: ' + IntToStr(dmDados.cdsUsuarios.RecordCount));


Espero que ajude


Olha cara, com esse código aqui que vc me passou
Código:
dmDados.cdsUsuarios.Close;
case cbFiltros.ItemIndex of
    0 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE NOME LIKE ' + QuotedStr('%' + edtPesquisar.Text + '%');
    1 : dmDados.cdsUsuarios.CommandText := 'SELECT * FROM USUARIOS WHERE LOGIN LIKE ' + QuotedStr('%' + edtPesquisar.Text + '%');
end;
dmDados.cdsUsuarios.Open;
ShowMessage('Quantidade de registros: ' + IntToStr(dmDados.cdsUsuarios.RecordCount));


Da o msm erro, mas com o segundo código removendo o filtro da query funciona perfeitamente, exibi a quantidade de registros e faz a consulta, então creio que o problema seja o filtro da minha query, mas e ai vcs sabem que pode estar acontecendo?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Abr 13, 2017 12:07 pm    Assunto: Responder com Citação

Você sabe em qual linha exatamente ocorre o erro?
Se não sabe, experimente colocar um Breakpoint na linha do Close, execute sua aplicação com debug e quando a execução chegar no Breakpoint prossiga pressionando F8 até que ocorra o erro. Depois você também pode fazer testes pressionando F7 quando chegar na linha em que ocorre o erro para ver o que acontece quando essa linha é executada.
Desconfio que esse erro deva estar ocorrendo por causa de algum código que está em outro ponto do projeto, em função do resultado retornado pela query, por isso pode estar variando quando tem ou não filtro na query.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
iammedeiros
Novato
Novato


Registrado: Segunda-Feira, 10 de Abril de 2017
Mensagens: 31

MensagemEnviada: Sex Abr 14, 2017 9:35 am    Assunto: Responder com Citação

imex escreveu:
Você sabe em qual linha exatamente ocorre o erro?
Se não sabe, experimente colocar um Breakpoint na linha do Close, execute sua aplicação com debug e quando a execução chegar no Breakpoint prossiga pressionando F8 até que ocorra o erro. Depois você também pode fazer testes pressionando F7 quando chegar na linha em que ocorre o erro para ver o que acontece quando essa linha é executada.
Desconfio que esse erro deva estar ocorrendo por causa de algum código que está em outro ponto do projeto, em função do resultado retornado pela query, por isso pode estar variando quando tem ou não filtro na query.


Fiz como vc falou cara, ele passa normalmente pela linha da query, mas dispara a exceção na linha do open, mas apertei f7 como falou e a linha do end do evendo do botão ficou marcada com vermelho, depois não fez mais nada
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lokasso
Aprendiz
Aprendiz


Registrado: Terça-Feira, 11 de Abril de 2017
Mensagens: 174

MensagemEnviada: Sex Abr 14, 2017 3:24 pm    Assunto: Responder com Citação

Brother, pelo que vi no seu código nao tem o parametro
ParamByName.

Código:
SQL.Add('Where id = :id');
                ParamByName('id').Value:= Edt_Busca.Text;
                Open;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sáb Abr 15, 2017 11:12 am    Assunto: Responder com Citação

iammedeiros, então quando chegar na linha do Open pressione F7 para ver para onde a execução vai e continue até que ocorra o erro.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB