Acesse a violação ao atribuir propriedade componente no módulo de dados
-
13-09-2019 - |
Pergunta
Estou no Delphi 2009 e meu aplicativo contém um módulo de dados, que possui um componente personalizado chamado 'Globals'.
De outra forma no aplicativo, estou tentando alterar uma propriedade publicada (uma string) no componente Globals:
dm.Globals.qhProject := _ProjectName.Text; //always gives access violation
O controle do nome do nome é um descendente de tlabeledit. Eu sempre recebo uma violação de acesso aqui se houver algum texto na caixa.
No entanto, se eu manualmente assinando uma string na propriedade, não entendo o AV:
dm.Globals.qhProject := 'some text'; //works
Aqui está a declaração da propriedade QHProject:
FqhProject: string;
property qhProject: string read FqhProject write FqhProject;
Não consigo descobrir por que há um AV aqui. Tentei mover o pedido de criação automática do módulo de formulários/dados, mas sempre recebo o AV.
O que eu estou fazendo errado aqui?
Atualizar:
Estou usando efeitos de billenium TFormContainer para alternar entre diferentes formas no aplicativo. Ambas as formas envolvidas aqui estão no contêiner do formulário. Uma forma, tdlgSummary, contém o seguinte:
procedure TdlgSummary.SyncVars;
begin
dm.Globals.qhProject := _ProjectName.Text
end;
A outra forma, tdlgfinalize, contém o seguinte:
dlgSummary.SyncVars;
Se eu executar o Syncvars dentro de DlgSummary, ele funciona bem. Se eu chamar de dlgfinalize, recebo o AV. Este parece ser o ponto crucial do problema, mas não consigo descobrir o que está dando errado. Mesmo que eu mude o controle para o dlgfinalize, o dlgSummary não foi destruído, porque posso voltar a ele. Alguma ideia?
Solução
Parece -me como _projectName é nada. Tente colocar um ponto de interrupção nesta linha e examine _projectName, veja se ela fornece uma referência válida ou não.