Erro Herança Forms
Bom dia pessoal!
Não estou conseguindo resolver um erro que está acontecendo comigo.
O que acontece é que tenho dois Forms que são herança de outro, eles funcionam normal, más quando abro o form que é o pai, fecho e vou abrir os outros dois que são os filhos dele, os dois da uma mensagem de erro e não abre mais.
O erro que mostra é o seguinte: Error reading dxBdProduto.DataField: FormPai: Field 'COD_PROD' not found.
Se alguém conseguir me ajudar fico muito grato pois já faz um tempo que estou com esse problema e não consigo resolver.
Leandro.
Leandro Ferreira
Curtidas 0
Respostas
Eriley Barbosa
16/07/2010
Isso acontece com forms herdados comigo também, o que faço é sempre abrir o formPai primeiro, não fecho e depois abro os forms filhos, ou seja, quando estiver trabalhando com os forms filhos o form pai deverá estar aberto, mesmo que tu não vá trabalhar nele.
Atenciosamente
Eriley
GOSTEI 0
Leandro Ferreira
16/07/2010
Bom dia Eriley!
Você poderia me fornecer um exemplo de sua explicação?
Não ficou muito claro pra mim sua explicação, você dando um exemplo entenderei melhor com certeza.
Fico no aguardo.
GOSTEI 0
Emerson Nascimento
16/07/2010
seus datasets estão num datamodule? se estiverem, recomendo colocá-los nos formulários.
se você trabalhar com clientdatasets, coloque-os no form. nesse caso não precisa do dataset origem no formulário.
se você trabalhar com clientdatasets, coloque-os no form. nesse caso não precisa do dataset origem no formulário.
GOSTEI 0
Eriley Barbosa
16/07/2010
File->Open Project-> abra seu projeto;
File->Open -> Abra o seu formulario pai e não o feche.
File -> Open->Abra o seu formulário filho
Toda vez que for trabalhar num formulario filho o formulario pai tem que estar aberto.
Atenciosamente
Eriley
GOSTEI 0
Leandro Ferreira
16/07/2010
Eriley acho que você entendeu errado, quando disse que dava erro era em tempo de execução não quando estou programando.
Emerson pelo que entendi aqui, o dataset eh declarado pra ficar diinamico quando carregar o form. Não está nem no DM nem no FORM. Acho que por isso que ele esta dando este erro.
Segue uma parte do codigo quando da um close e um open no form pai. Pode ser ai o erro:
procedure OpenCloseTable ( Form : TForm; Acao : Integer );
var t : Integer;
begin with Form do begin
if Acao = OC_OPEN then
for t := 0 To ComponentCount - 1 do
if (Components[t] is TDBGrid) then
(Components[t] as TDBGrid).DataSource.DataSet.Open
else if (Components[t] is TdxDBGrid) then
(Components[t] as TdxDBGrid).DataSource.DataSet.Open; if Acao = OC_CLOSE then
for t := 0 To ComponentCount - 1 do
if (Components[t] is TDBGrid) then
if (Components[t] as TDBGrid).DataSource.DataSet.Active then
(Components[t] as TDBGrid).DataSource.DataSet.Close
else if (Components[t] is TdxDBGrid) then
if (Components[t] as TdxDBGrid).DataSource.DataSet.Active then
(Components[t] as TdxDBGrid).DataSource.DataSet.Close;
end; end; procedure OpenCloseTable ( DataSet : TDataSet; Acao : Integer );
begin if Acao = OC_OPEN then
DataSet.Open; if Acao = OC_CLOSE then
DataSet.Close; end;
var t : Integer;
begin with Form do begin
if Acao = OC_OPEN then
for t := 0 To ComponentCount - 1 do
if (Components[t] is TDBGrid) then
(Components[t] as TDBGrid).DataSource.DataSet.Open
else if (Components[t] is TdxDBGrid) then
(Components[t] as TdxDBGrid).DataSource.DataSet.Open; if Acao = OC_CLOSE then
for t := 0 To ComponentCount - 1 do
if (Components[t] is TDBGrid) then
if (Components[t] as TDBGrid).DataSource.DataSet.Active then
(Components[t] as TDBGrid).DataSource.DataSet.Close
else if (Components[t] is TdxDBGrid) then
if (Components[t] as TdxDBGrid).DataSource.DataSet.Active then
(Components[t] as TdxDBGrid).DataSource.DataSet.Close;
end; end; procedure OpenCloseTable ( DataSet : TDataSet; Acao : Integer );
begin if Acao = OC_OPEN then
DataSet.Open; if Acao = OC_CLOSE then
DataSet.Close; end;
GOSTEI 0
Emerson Nascimento
16/07/2010
você precisa verificar pra onde o Datasource ligado à grade está apontando. se for para um dataset comum não vai dar certo. é preciso que o Dataset esteja em form herdado.
por exemplo:
imagine que seu form pai aponte para um dataset num datamodule qualquer.
ao criar o form, você altera a instrução SQL desse dataset.
daí você abre um form herdado que também aponta para o mesmo dataset porém, no momento da criação do form herdado ele altera a instrução SQL.
nesse momento os campos esperados no form pai já foram alterados pelo form filho.
daí você volta para o form pai e ocorre o erro. você fecha o form pai, abre de novo - novamente ele altera a instrução SQL. agora o form filho é que vai gerar um erro.
creio que seja esse seu problema.
por exemplo:
imagine que seu form pai aponte para um dataset num datamodule qualquer.
ao criar o form, você altera a instrução SQL desse dataset.
daí você abre um form herdado que também aponta para o mesmo dataset porém, no momento da criação do form herdado ele altera a instrução SQL.
nesse momento os campos esperados no form pai já foram alterados pelo form filho.
daí você volta para o form pai e ocorre o erro. você fecha o form pai, abre de novo - novamente ele altera a instrução SQL. agora o form filho é que vai gerar um erro.
creio que seja esse seu problema.
GOSTEI 0