Fórum Erro: Closed dataset!!! #354961
06/03/2008
0
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
Curtir tópico
+ 0Posts
06/03/2008
Hall 9000
Qquer cois posta aí...
Gostei + 0
06/03/2008
Ferreia2
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.
Gostei + 0
06/03/2008
Milinha
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 :?
Gostei + 0
06/03/2008
Milinha
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
Gostei + 0
06/03/2008
Hall 9000
Gostei + 0
07/03/2008
Milinha
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!
Gostei + 0
07/03/2008
Ferreia2
O que esta procedure faz? pode colocar o código para analise?
Gostei + 0
07/03/2008
Milinha
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+.
Gostei + 0
07/03/2008
Ferreia2
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;
Gostei + 0
07/03/2008
Milinha
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!
Gostei + 0
07/03/2008
Ferreia2
Gostei + 0