Form e DataModule Sem Variável Global de classe
Form e DataModule Sem Variável Global de classe, todos meus forms e dm´s estão desta forma. Em design, no object inspector, consigo setar a propriedade DataSource dos DataControls para o DataSource que está no DM em questão. Pergunto em RunTime qual a referência dessa classe será passada para os DataControls? Pergunto isso por que em todos os forms eu tenho que configurar os DataSources em tempo de execução para que os DataControls funcionem, mas tenho um único form que não faço esse procedimento e os DataControls funcionam conforme foram configurados em Design. E eu não sei como isso acontece. Eu poderia me ajudar com esse mistério?. Delphi 2007 Update 3.
Comodelphi
Curtidas 0
Respostas
Abadia
21/11/2007
Não há mistério. Apenas o seguinte: Quando o form é criado ele lê os dados do dfm, lá ele encontra que um tal controle liga com um ´DataModule.DataSource´, então ele procula na lista de datamodules já criados (os datamodules criados em runtime estarão lá também) um que tenha o nome ´DataModule´ e dentro deste procura um componente chamado ´DataSource´ se encontrar então faz a ligação automaticamente.
Note: Este processo falha se o datamodule em questão ainda não estiver criado e a propriedade que se refere a algo nele é setada para nil.
Note: Este processo falha se o datamodule em questão ainda não estiver criado e a propriedade que se refere a algo nele é setada para nil.
GOSTEI 0
Micheus
21/11/2007
Form e DataModule Sem Variável Global de classe, todos meus forms e dm´s estão desta forma. Em design, no object inspector, consigo setar a propriedade DataSource dos DataControls para o DataSource que está no DM em questão. Pergunto em RunTime qual a referência dessa classe será passada para os DataControls? Pergunto isso por que em todos os forms eu tenho que configurar os DataSources em tempo de execução para que os DataControls funcionem
é assim mesmo.Acredito que algo que poucos já precisaram fazer foi criar mais que uma instância de um mesmo form com datasets e dgbrid nele.
Quantas instâncias vc criar, mesmo que para várias variáveis da mesma classe, ao manipular a lista (registros no grid) em uma 3ª instância do form (ou seja, 3 forms iguais abertos), vc estará manipulando o mesmo dataset em todos eles. Já tive este problema, e a solução foi justamente esta: ajustar os datasources em tempo de execução.
mas tenho um único form que não faço esse procedimento e os DataControls funcionam conforme foram configurados em Design. E eu não sei como isso acontece. Eu poderia me ajudar com esse mistério?
é que o compilador/linkador sabe como resolver os endereçamentos de memória já que existe a variável declarada. (mais ou menos isso)GOSTEI 0
Comodelphi
21/11/2007
Obrigado a explicação dos colegas acima.
só para ilustrar, meu sistema tá modularizado dessa forma:
Dessa forma são criados todos os forms, na classe fornecedor os datasources configurados em design usam o DM normalmente porém nas demais classes eu tive colocar no form datasources adicionais e fazer o seguinte:
Quem tiver algo a acrescentar, por favor. Abcs.
só para ilustrar, meu sistema tá modularizado dessa forma:
TFornecedor = class(TObject) private FForm: TfrmFornecedor; FData: TdmFornecedor; public constructor Create; end; constructor TFornecedor.Create; begin FForm := TfrmFornecedor.Create(nil); FData := TdmFornecedor.Create(nil); end;
Dessa forma são criados todos os forms, na classe fornecedor os datasources configurados em design usam o DM normalmente porém nas demais classes eu tive colocar no form datasources adicionais e fazer o seguinte:
FForm.dsrech. DataSet := cdsRech; FForm.dsrecd1.DataSet := cdsRecd1; FForm.dsrecd3.DataSet := cdsRecd3;
Quem tiver algo a acrescentar, por favor. Abcs.
GOSTEI 0