Erro ao abrir Datasource em projeto modularizado

10/01/2010

1

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ê !
Responder

Posts

12/01/2010

Pr0f3t4

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 ?
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira