Fórum Erro: Closed dataset!!! #354961

06/03/2008

0

óla Pessoal!

Qdo rodo meu sistema e tento fazer uma alterção, da esse erro d ... Closed dataset...

Sei q isso acontece qdo o CDS tá fechado, mas já verifikei tdo e está tdo ativo. Não estou coseguindo ver onde estou errando...

códigos abaixo:

tenho uma tabela de produtos com os seguintes campos

COD_PROD
CODLOCAL_PROD
TITULO_OBRA
DIMENSAO_OBRAend
COD_ARTISTA
ARTISTA( sub select)

No comandText do cdsproduto fiz um sub select para fazer uma consulta auxiliar na tabela Artista, e não precisar usar um DBLookupComboBox e não pesar o sistema, Qdo consulto um produto fuciona certim, então o subselect tá certo... .

select PROD.COD_PROD, prod.CODLOCAL_PROD, prod.TITULO_OBRA, prod.DIMENSAO_OBRA, PROD.cod_artista
(select ART.NOME_ARTISTA FROM ARTISTA ART WHERE ART.COD_ARTISTA = PROD.COD_ARTISTA) AS ARTISTA
from PRODUTO prod
where cod_prod =:cod_prod


no data module fiz uma procedure para alterar o artista

procedure TDM.AlteraArt(aCodArt: integer; aNome: string);
begin

cdsProduto.Edit;
cdsProdutoCod_Artista.AsInteger := aCodArt;
cdsProdutoArtista.AsString := aNome;
cdsProduto.Post;

end;

e no botão alterar artista colokei

try
Application.CreateForm(TfrmPesquisaArtista, frmPesquisaArtista);
dm.CDSArtista.Open;
frmPesquisaArtista.ShowModal;
if frmPesquisaArtista.ModalResult = mrOk then
begin

DM.AlteraArt(DM.CDSPesquisaArtistaCOD_ARTISTA.AsInteger, DM.SDSArtistaNOME_ARTISTA.AsString);

end;
finally
frmPesquisaArtista.Free;
end;


O erro acontece qdo eu tento alterar ou incluir um artista em um determinado produto, qdo um dou duplo clique no grid artistas, o artista selecionado não vai para o dbedit.

A linha marcada no erro é essa

try
application.CreateForm(TfrmCadastroProduto,frmCadastroProduto);
dm.CDSProduto.Open;
[color=red:d5d5dd6e11] frmCadastroProduto.ShowModal;[/color:d5d5dd6e11]

finally
frmCadastroProduto.Free;
end;
end;


alguém tem uma dica??

obrigada!


obs: BD Firebird, delphi 7 e paleta dbexpress


Milinha

Milinha

Responder

Posts

06/03/2008

Hall 9000

Verifique se no OnClose do Form: frmPesquisaArtista vc não está dando comando para fechar o CDSPesquisaArtista; outra coisa, nos fields co cds, o campo NOME_ARTISTA tem que estar com os providerFlags todos em fase...

Qquer cois posta aí...


Responder

Gostei + 0

06/03/2008

Ferreia2

try application.CreateForm(TfrmCadastroProduto,frmCadastroProduto); dm.CDSProduto.Open; frmCadastroProduto.ShowModal;


Vai no evento on Show ou no evento create do form Acima que vc esta mandando abrir alguma coisa com o DataSet Fechado.

Caso ainda não de certo compila com F7 que vai linha a linha ai vc descobre.


Responder

Gostei + 0

06/03/2008

Milinha

Obrigada pela dica!

Fui tda animada, mas para minha tristeza os provideflags do nome_Artista já estão como false e não to fexando no onclose!

oq pode ser? Além disso?

o erro dá na chamada ao form d cadastro de produto, não entendo :?


Responder

Gostei + 0

06/03/2008

Milinha

[quote:472cbb32e1]try application.CreateForm(TfrmCadastroProduto,frmCadastroProduto); dm.CDSProduto.Open; frmCadastroProduto.ShowModal;


Vai no evento on Show ou no evento create do form Acima que vc esta mandando abrir alguma coisa com o DataSet Fechado.

Caso ainda não de certo compila com F7 que vai linha a linha ai vc descobre.[/quote:472cbb32e1]


Ok! Ferreira2 vou verificar!
obrigada! dps volto pra dizer se funcionou


Responder

Gostei + 0

06/03/2008

Hall 9000

Seguinte... Você tem que configurar uma propriedade do datasetprovider do seu clientdataset para usar o commandtext dele. O dsprovider tem uma prop. options, vc expande ela e configure para true a opção: poAllowComammdText. Configure os providers do cds e do sqldataset ou sqlquery (qual vc estiver usando). Tenta essa...


Responder

Gostei + 0

07/03/2008

Milinha

Hall 9000, já tá configurado sim!

Fiz o q o Ferreira2 disse rodei com o F7, o erro acotece exatamente qdo chamo a procedure AlteraArt. Logo qdo chega nessa linha aki

DM.AlteraArt(DM.CDSPesquisaArtistaCOD_ARTISTA.AsInteger, DM.SDSArtistaNOME_ARTISTA.AsString);


Ja to pra fikr louca com esse erro!


Responder

Gostei + 0

07/03/2008

Ferreia2

o erro acotece exatamente qdo chamo a procedure AlteraArt. Logo qdo chega nessa linha aki


O que esta procedure faz? pode colocar o código para analise?


Responder

Gostei + 0

07/03/2008

Milinha

O que esta procedure faz? pode colocar o código para analise?


Ela é alterarar o artista do determinado produto, como disse acima optei uma consulta auxiliar a tabela artista a usar um DBLookupComboBox.

procedure TDM.AlteraArt(aCodArt: integer; aNome: string);
begin



cdsProduto.Edit;
cdsProdutoCod_Artista.AsInteger := aCodArt;
cdsProdutoArtista.AsString := aNome;
cdsProduto.Post;

end;



ai chamo ela no botão


procedure TfrmCadastroProduto.btnAlterarArtistaClick(Sender: TObject);
begin
inherited;
try
Application.CreateForm(TfrmPesquisaArtista, frmPesquisaArtista);
dm.cdspesquisaArtista.Open;
frmPesquisaArtista.ShowModal;
if frmPesquisaArtista.ModalResult = mrOk then
begin

DM.AlteraArt(DM.CDSPesquisaArtistaCOD_ARTISTA.AsInteger, DM.SDSArtistaNOME_ARTISTA.AsString);

end;
finally
frmPesquisaArtista.Free;
end;
end;


já tentei d tdo e nda!

ia voltar pros DBLookupComboBox, mas seriam 4 na msm tela, ai pesa d+.


Responder

Gostei + 0

07/03/2008

Ferreia2

procedure TDM.AlteraArt(aCodArt: integer; aNome: string); begin cdsProduto.Edit; cdsProdutoCod_Artista.AsInteger := aCodArt; cdsProdutoArtista.AsString := aNome; cdsProduto.Post; end;


Será que vc não esta mandando editar o cdsProduto com ele Inativo?

e se vc fizesse assim

procedure TDM.AlteraArt(aCodArt: integer; aNome: string);
begin


If not cdsproduto.active = True then
cdsproduto.active := True;
cdsProduto.Edit;
cdsProdutoCod_Artista.AsInteger := aCodArt;
cdsProdutoArtista.AsString := aNome;
cdsProduto.Post;

end;


Responder

Gostei + 0

07/03/2008

Milinha

Ferreira vc não vai acreditar onde estava o erro, dps ler e reler aki no forum q fui ver, mereço uma surra de gato morto até miar.

Olha:

DM.AlteraArt(DM.CDSPesquisaArtistaCOD_ARTISTA.AsInteger, DM.[color=red:8eba7879a0]SDSArtista[/color:8eba7879a0]NOME_ARTISTA.AsString);

tinha q ser CDSPesquisaArtista! :oops:


mto obrigada pelas dicas e pela paciência! :lol:



vlw pessoal mto obrigada!


Responder

Gostei + 0

07/03/2008

Ferreia2

Ok, boa sorte


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar