Carregar ClientDataSet com todos dados da camada BD - DataSnap

23/09/2009

Salve, Salve! Prazer iniciar esse serviço da DevMedia, creio que será muito útil em meu projeto. Apresentando, estou iniciando um novo projeto - software para comercio em geral - varejo; e com algumas parametrizações para drogaria que é meu foco principal; e é o ramo que trabalho já a alguns anos(Atualmente tenho um software, em Delphi7 + DBF ); Estou começando do "zero" o desenvolvimento; Irei utilizar 3 Camadas, DataSnap e banco de desenvolvimento e padrão o Firebird - más voltado para N-SgbdEstou lendo bastante a respeito de 3 camadas e Datasnap, testes etc... Já estou com as telas padrões de pesquisas e cadastro ( herança ) e ja fazdo cadastros testes, porém surgiu um problema, e dúvida:A tela de cadastro ( usuários por exemplo ) ela cadastra etc, tudo normal, más ela não carrega os dados atuais do banco de dados; ou Seja, se faço um cadastro agora o registro que acabei de salvar, fica disponível para excluir, editar etc. Porém é como se fosse ele o único registro do banco de dados; Como carrego meu ClientDataSet do AppClient com todos registros do Banco de dados, para exclusão, edição que precisar?
Como é minha primeira postagem, a arquitetura que estou usando é a seguinte:
Aplicação Server:TDSServerModule (  SqlDataSet - DataSetProvider )TdataModule (TSQLConection - DSServer - DSServerClass - ServerTransport )Aplicação ClientTDataModule(SQLConection - DSProviderConnection - ClientDataSet )Não utilizo o SQLServerMethod, Gero uma classe do dataSnap toda vez que atualizo a aplicação server pelo SQLConnection(GenerateDataSnap...etc) 
Já uso algumas funções de pesquisas etc. e esta OK a comunicação entre as aplicações; Más como ainda é tudo novo pra mim essa forma de programar e estou aprendendo fazendo, resolvi postar para pedir um Help pra quem sabe. rsrs

No aguardo,
Fabiano

Fabiano Araujo

Fabiano Araujo

Curtidas 0

Respostas

Wesley Yamazack

Wesley Yamazack

23/09/2009

Olá meu amigo, bom dia.
  Pelo que estive vendo aqui está tudo correto, você fez as ligações certas. Tente dar um Refresh no seu clientDataset, ou então um close e depois um open. Só uma dica você esta usando applyupdates do clientdataset, certo ?

Um abraço

Wesley Y
GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

Wesley, quando cadastro um registro, ai esse fica disponível pra mim, para excluir, editar etc;  E sim uso o Apply no Post dos CDS;O Problema, são os registros q. já estão no banco de dados, a estrutura do Form é essa:
Um Form "Herança" ( PageControl - Uma aba de pesquisa e outra para cadastro )Pesquisa com um grid e um datasource ligados ( dsPesquisa )Page cadastro com um "DBNavigator - Ainda pra teste, depois controlarei com "Meus botões" rs  ligada a um DataSource "dsCadastro" Assim padronizando as pesquisas e os cadastros

E criei um form para usuarios ( pegando o form de Herança - inherited )  Nesse form coloquei os DBEdits, digitei os nomes dos campos da tabela "usuarios" -  e os liguei as dsCadastroe ao criar o Form eu Ligo o DsCadastro dele ao CDSUsuarios do DataModuleFica tudo habilitado para "incluir" e depois que incluo registro, posso exclui-lo edita-lo etc.Porem "visualizo" digamos assim, somente esse registro q. acabei de cadastrar, os outros não aparecem ( o que estão cadastrados na tabela ), uso os botões Next - last etc é como se não tivesses cadastrados ou cadastrado apenas o que acabei de cadastrar ( se cadastrar algum - se não cadastrar nenhum fica sem nenhum registro )
Na aba pesquisa - faço as pesquisas normais, retorno tudo pra mim certinho ( claro q. aqui uso consultas sql que pego as funções da AppServerPreciso que retorne os dados, pra qdo fizer a pesquisa, eu posso alterar o registro, excluir,  assim apenas busco no CDSUsuario pelo ID da Pesquisa
Não sei se fui claro, se não fui me diga que tento explicar melhor.Sem mais,Fabiano Araujo
GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

Wesley, quando cadastro um registro, ai esse fica disponível pra mim, para excluir, editar etc;  E sim uso o Apply no Post dos CDS;O Problema, são os registros q. já estão no banco de dados, a estrutura do Form é essa:
Um Form "Herança" ( PageControl - Uma aba de pesquisa e outra para cadastro )Pesquisa com um grid e um datasource ligados ( dsPesquisa )Page cadastro com um "DBNavigator - Ainda pra teste, depois controlarei com "Meus botões" rs  ligada a um DataSource "dsCadastro" Assim padronizando as pesquisas e os cadastros

E criei um form para usuarios ( pegando o form de Herança - inherited )  Nesse form coloquei os DBEdits, digitei os nomes dos campos da tabela "usuarios" -  e os liguei as dsCadastroe ao criar o Form eu Ligo o DsCadastro dele ao CDSUsuarios do DataModuleFica tudo habilitado para "incluir" e depois que incluo registro, posso exclui-lo edita-lo etc.Porem "visualizo" digamos assim, somente esse registro q. acabei de cadastrar, os outros não aparecem ( o que estão cadastrados na tabela ), uso os botões Next - last etc é como se não tivesses cadastrados ou cadastrado apenas o que acabei de cadastrar ( se cadastrar algum - se não cadastrar nenhum fica sem nenhum registro )
Na aba pesquisa - faço as pesquisas normais, retorno tudo pra mim certinho ( claro q. aqui uso consultas sql que pego as funções da AppServerPreciso que retorne os dados, pra qdo fizer a pesquisa, eu posso alterar o registro, excluir,  assim apenas busco no CDSUsuario pelo ID da Pesquisa
Não sei se fui claro, se não fui me diga que tento explicar melhor.Sem mais,Fabiano Araujo
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

23/09/2009

Olá meu caro,
   Me mande os fontes do teu projeto, para poder analisar, se possivel um pequeno exemplo, seria mais fácil, com a mesma estrututa que você tem no teu projeto, ou então o projeto todo, so me diga qual banco e versão do delphi você usa, se usar componentes de terceiros me avise também.
  Uma pergunta, quando você grava, o registro vai pro teu banco de dados ? Ou não vai ?

Abraço

Wesley Y
GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

Sim, ao gravar ele é gravado no Banco sim, tudo certinho.
O Projeto ainda é inicial, só tem a tela de cadastro de usuários, mas a partir dele q. vou iniciar de verdade, segue o link:Código Fonte:http://video.devmedia.com.br/discovirtual/189731/sistema.zipBanco de Dados:http://video.devmedia.com.br/discovirtual/189731/dados.zip
Delphi 2009FirebirdComponentes (JEDI-VCL ) http://jvcl.delphi-jedi.org/E o DBX4 driver que esta na revista 107 Clube delphi( http://downloads.embarcadero.com/free/delphi )
GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

  Faltou esse componente tambem, que uso em lugar do DBNAvigator - se não quiser instalar use o dbnavigatorhttp://video.devmedia.com.br/discovirtual/189731/button_dbnavigate.zip
GOSTEI 0
Wesley Yamazack

Wesley Yamazack

23/09/2009

Olá ,
   Estou analisando o teu código, e logo retornarei.

Att,

Wesley Y
GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

E ai amigo? conseguiu achar alguma coisa?
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/09/2009

Olá amigo,

Meu nome é Rodrigo Carreiro.

Apartir de agora estarei lhe auxiliando neste chamado. O Wesley me adiantou o problema, testou o projeto e a principaio nao há problema.

vou analisar e lhe retono.

Abs!!

GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

OK. Aguardo... poisé; tem hora tambem que o registro não salva no banco de dados, estranho.
GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

Amigo, seguinte:( demoraram tive que correr atrás... ) Sobre não trazer os dados pra ( no caso citei o dbnavigator etc ) que não trazia os registros gravados, é porque a Propriedade "CommandType" do SQLDataset ( modulo AppServer ) estava como CTQuery ( receber comandos sql ); Colocando em ctTable os registros são carregados da AppClientAgora então surgiu outras dúvidasEu preciso de um padrão de tela de cadastro para trabalhar com DataSnap, ou seja; Se deixo co ctTable, posso normalmente usa padrões como Alterar - Deletar etc. que estará tudo certo; Porém e quanto a escalabilidade, é viavel? sempre trazer todos registros em rede etc? não tornará o sistema lento de navegação?Se o correto é usar o CTQuery, e operações como Alterar? e o fato de usar um Formulário Herança? enfim, em resumo gostaria apenas de um padrão de manutenção de cadastros  para trabalhar com DataSnap, etc.
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/09/2009

Olá Fabiano,

Bem isso pode ter ate resolvido o seu problema especificamente, mas nas minhas aplicacoes estão todos como CTQuery e funciona normalmente. O problema nao está ai. A demora se justifica pelo fato de termos que testar sua aplicacao. Nós na consultoria estamos aqui para resolver os problemas, mas resolver de verdade. Saber o pq do erro.

Quanto a usar CtTable e comparação a Query isso vai depender do seu commmand Text. Se vc faz Select * from Cliente e usar o data set com ctTable na tabela cliente entao nao faria diferança.

Peço que aguarde enquanto terminamos de ralizar os testes !!!

Abs!



GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/09/2009

Após analisar seu codigo a conclusao que eu cheguei foi a seguinte. Voce esta passando commando sql parametrizados para os DataSets.  Veja:

select ID, ID_LOJA, ID_NIVEL, NOME, LOGIN, SENHA, ADM
 from USUARIOS
where
USUARIOS.ID = :ID

Com isso vc insere nornalmente mas eu nao vi so seu codigo o momento onde voce remove este parametro. Se isso nao ocorrer ele semrpe vai trazer penas um pois e isso que vc colocou no select.  Se a sua intencao e limitar o trafego na rede o caminho nao seira esse (na minha humilde opiniao).

Use a propriedade Packet Records no ClientDataSet.  Veja mais nesta video de minha autoria:

https://www.devmedia.com.br/articles/viewcomp.asp?comp=11500


CAso nao tenha acesso a video nos informe para que possamos liberá-la.

Abs!!

GOSTEI 0
Fabiano Araujo

Fabiano Araujo

23/09/2009

Rodrigo, era a parametização mesmo, estava viajando; vou deixar como ctquery e buscar para edição etc pelo Id e configurar Fetch Param;

vlw
GOSTEI 0
POSTAR