Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pr0f3t4

Erro ao abrir Datasource em projeto modularizado

Recommended Posts

Tenho um questão a levantar sobre o modo operacional com os pacotes.

Sempre tive o hábito de explorar a riqueza dos recursos do DataSource, utilizo a procedure DataChange e StateChange para analisar caso, a caso os registros e claro, o estado da tabela (browse, edit, insert ...) porém, ao implementar a técnica de modularização no projeto da empresa, acabei por descobrir ou, talvez não entender o modo funcional dos pacotes após sua abertura. É onde preciso de muita ajuda da comunidade.

Um pequeno exemplo e talvez me entendam, quando verifico se um determinado botão deve aparecer ou não de acordo com uma condição de uma campo, caso o valor seja 0 ou 1, como facilidade, vou disparar o seguinte código no evento DataChange do DataSource:

begin

with(FormPrincipal)do

begin

btnAtivar.Visible:=(cdsTabela1RegistroAtivo.Value=1);

btnDesativar.Visible:=(cdsTabela1RegistroAtivo.Value=0);

end;

end;

 

Dessa forma, fica simples e o próprio processador do Delphi no executável se encarrega de resolver se o botão fica ou não ativo.

Como esse procedimento se encontra dentro do DataModule que está pra ser criado em tempo de execução (dm_1:=Tdm_1.Create(Self)) ao instanciar o DataModule abro as tabelas que por sua vez dispara seus procedimentos (até aqui tudo bem) porém, um erro de violação acontece:

Access Violation at address xxxxxxx in module formulario.bpl. Read of address 00000328.

 

A questão que venho buscando resposta a semana toda é: Por que em modo de execução normal os procedimentos do DataSource não sofreram alteração, o que aconteceu após converter todo o projeto em pacote (.bpl) e passar a gerar essa violação ?

 

Pessoal, preciso mesmo dessa ajuda de vocês, vocês possuem a força.

 

Que a Força do Código Esteja Com Você !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em qual linha de codigo acontece o erro. Quando da erro o Delphi geralmente lhe posiciona na linha do erro. Se possível, poste o trecho de código aonde isto ocorre.

 

Caso o Delphi posicione a linha do erro la no arquivo "Project1.dpr", execute a aplicação passo a passo até surgir o erro.

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

begin

with(FormPrincipal)do

begin

btnAtivar.Visible:=(cdsTabela1RegistroAtivo.Value=1); // é aqui que o erro acontece, exatamente no momento da leitura do botão que se encotra no form e da verificação da condição dos dados da tabela, e por diante.

btnDesativar.Visible:=(cdsTabela1RegistroAtivo.Value=0);

end;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parte do problema que venho mencionando está nesta rotina:

 

PackageModule:=LoadPackage(Trim(aArquivos[nItemSelecionado]));

if(PackageModule<>0)then

begin

AClass:=GetClass(Trim(aForms[nItemSelecionado]));

if(AClass<>nil)then

with(TComponentClass(AClass).Create(Application) as TCustomForm)do

begin

 

é onde o pacote é aberto.

 

Vamos lá, o form é criado como TCustomForm (?) e lá dentro do DataSource no evento on DataChange, estou chamando o form pelo seu nome FormComercial que é ainda por cima um fsMDIChild é ae o problema que tem me atormentado, pois o DataModule não está reconhecendo o FormComercial, ele não entende que este form possui ente por ter sido criado como TCustomForm ....

 

Alguém saberia me ajudar ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou com dificulldade para enteder o problema. Pode explicar melhor esta parte do TCustomForm?

 

Quando você cria um Form apartir de Um TCustomForm, ele não tem nada. Um TCustomForm não é um TForm, existem diferenças. O TForm estende a classe TCustomForm e tem propriedades que o TCustomForm não tem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.