Array
(
)

Excesso de ClientDataSets e etc...

Wart
   - 02 set 2004

E ae galera...

Seguinte,
Eu to fazendo aqui um form pra venda e cada venda tem um cliente, um vendedor os itens e o seu cadastro. O problema é q nessa brincadeira em to com 5 clientdatasets, 5 datasetproviders, 5 sqldatasets e 4 datasourses no meu form. Tem algum problema esse monte de coisa? alguem tem alguma sugestão?

Vlw...


Maicongabriel
   - 02 set 2004

Por que você não utiliza um DataModule e centraliza as tabelas principais, como as de clientes, produtos, fornecedores, etc.
Assim você cria a liga os componentes de acesso uma unica vez, alem de poder acessar os dados de qualquer local da aplicação! :wink:


Vinicius2k
   - 02 set 2004

Não... nenhum problema...

Minha sugestão seria apenas o reaproveitamento de componentes com o uso de DataModules... bem, talvez vc não goste de DataModules, conheço muitos colegas q não gostam, mas eu NUNCA coloco componentes de acesso diretamente em forms...

Vc tem um cadastro de clientes e de vendedores correto? No seus cadastros vc já tem os componentes de acesso para estas tabelas... se estes componentes estivessem num DataModule, eles poderiam ser compartilhados entre os cadastros e seu form de pedidos, por exemplo...

T+


Wart
   - 02 set 2004

pra falar a verdade, eu num curto mto datamodule msm, mas to vendo q eles sao meio necessários... :lol: :wink:
Obrigado pela atenção e até a próxima...


Dopi
   - 03 set 2004

O maior problema de DataModules são as aplicações MDI, onde voce pode abrir várias janelas simultaneamente...
Imagine por exemplo abrir 2 vezes a janela de Cadastro de Clientes (o mesmo Form) nesse caso você terá 2 forms diferentes apontando para o mesmo conjunto de ClientDataSets, ou seja, o que o usuário fizer em um Form, também será refletido no outro.... (pois o ponteiro é o mesmo) .

Para sanar esse problema voce pode:

- Sempre que uma janela for ShowModal, não há problemas, pois somente ela estará acessando os ClientDataSets

- Se a janela for Modal você pode criar uma Copia do seu DataModule em Memória, em tempo de execução, e modificar os DataSets para acessar o Datamodule criado na memória Exemplo:

#Código


..... Declaração Type do Form .....
private
{ Private declarations }
dml : Tdm ; { Cria variavel para armazenar copia do Datamodule }
..........

..... FormCreate ........
dml := Tdm.Create(self) ; { Criando DATA Module Temporario, e ligando em dsPrincipal }
dsPrincipal.DataSet := dml.tbCliente ;
dml.tbCliente.Open ;

{ Ajustando DataSets de Metre/Detalhe }
dml.tbFuncionario.MasterSource := dsPrincipal ;
dml.tbFuncionario.MasterFields := ´Cod_cliente´ ;
dsFuncionario.DataSet := dml.tbFuncionario ;
dml.tbFuncionario.Open ;