Fórum Carregar ClientDataSet com todos dados da camada BD - DataSnap #9493

23/09/2009

0

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

Responder

Posts

24/09/2009

Wesley Yamazack

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
Responder

Gostei + 0

24/09/2009

Fabiano Araujo

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
Responder

Gostei + 0

24/09/2009

Fabiano Araujo

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
Responder

Gostei + 0

24/09/2009

Wesley Yamazack

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
Responder

Gostei + 0

24/09/2009

Fabiano Araujo

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 )
Responder

Gostei + 0

24/09/2009

Fabiano Araujo

  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
Responder

Gostei + 0

25/09/2009

Wesley Yamazack

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

Att,

Wesley Y
Responder

Gostei + 0

28/09/2009

Fabiano Araujo

E ai amigo? conseguiu achar alguma coisa?
Responder

Gostei + 0

28/09/2009

Rodrigo Mourão

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

Responder

Gostei + 0

28/09/2009

Fabiano Araujo

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

Gostei + 0

29/09/2009

Fabiano Araujo

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.
Responder

Gostei + 0

30/09/2009

Rodrigo Mourão

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!



Responder

Gostei + 0

30/09/2009

Rodrigo Mourão

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

Responder

Gostei + 0

30/09/2009

Fabiano Araujo

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar