Erro: Closed dataset!!!
ó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
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
Curtidas 0
Respostas
Hall 9000
06/03/2008
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í...
Qquer cois posta aí...
GOSTEI 0
Ferreia2
06/03/2008
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.
GOSTEI 0
Milinha
06/03/2008
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 :?
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
Milinha
06/03/2008
[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
GOSTEI 0
Hall 9000
06/03/2008
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...
GOSTEI 0
Milinha
06/03/2008
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!
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
Ferreia2
06/03/2008
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?
GOSTEI 0
Milinha
06/03/2008
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+.
GOSTEI 0
Ferreia2
06/03/2008
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;
GOSTEI 0
Milinha
06/03/2008
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!
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
Ferreia2
06/03/2008
Ok, boa sorte
GOSTEI 0