Ir para conteúdo
  • Cadastre-se

dev botao

Delphi com DataSnap e FireDAC


  • Este tópico foi criado há 2537 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia pessoal,

Estamos iniciando os estudos sobre DataSnap e FireDAC e gostaria de saber como o pessoal anda fazendo...
Vi um exemplo no curso da DevMedia FireDAC ministrado pelo Guinther Pauli, onde o lado servidor é com FireDAC
(FDConnection, FDQuery, DataSetProvider) e o lado cliente com DbExpress/Datasnap Client (SQLConnection,
DSProviderConnection, ClientDataSet). Essa é a forma mais correta de se trabalhar?

Até consegui conectar um FDConnection no lado cliente com o FDConnection do servidor, mais não consegui usar o FDQuery,
da erro "Dbx.SQL is an unrecognized command type"... Existe alguma forma pra isso (usar SQL direto no FDQuery no cliente)?

 

Link para o comentário
Compartilhar em outros sites

Olá boa tarde,
 

Primeiro respondendo suas perguntas:
... Essa é a forma mais correta de se trabalhar?
R. A duas formas estão corretas, apesar ser possível usar somente o FireDac no Server e no Client.

... Existe alguma forma pra isso (usar SQL direto no FDQuery no cliente)?
R. Não é uma boa prática utilizar comandos SQL no lado Client, datasnap se torna bem mais interessante quando o Client não necessita saber a estrutura das tabelas.

fiz um pequeno exemplo de como utilizar FireDac no Server e no Client, executando função do Server e retornando o valor para o Client e
também a listagem de registros de uma tabela sem uso de SQL no Client.

 

obs: Altere os parametros do FDConnection que está no server para conectar a uma base de dados.

 

Espero ter ajudado...

DataSnap_Firedac.zip

Editado por SolivanAraujo
  • Curtir 3

Mas ele disse:

Antes bem-aventurados os que ouvem a palavra de Deus e a guardam. Lucas 11:28

Link para o comentário
Compartilhar em outros sites

  • Moderadores
Em 10/08/2016 at 11:08, Michel Ouriques disse:

Bom dia pessoal,

Estamos iniciando os estudos sobre DataSnap e FireDAC e gostaria de saber como o pessoal anda fazendo...
Vi um exemplo no curso da DevMedia FireDAC ministrado pelo Guinther Pauli, onde o lado servidor é com FireDAC
(FDConnection, FDQuery, DataSetProvider) e o lado cliente com DbExpress/Datasnap Client (SQLConnection,
DSProviderConnection, ClientDataSet). Essa é a forma mais correta de se trabalhar?

Até consegui conectar um FDConnection no lado cliente com o FDConnection do servidor, mais não consegui usar o FDQuery,
da erro "Dbx.SQL is an unrecognized command type"... Existe alguma forma pra isso (usar SQL direto no FDQuery no cliente)?

 

Bom dia,

Esse curso do Guinter Pauli é recente? Pergunto isso, porque vi um curso dele também com DataSnap em versões mais antigas do Delphi. Até usei como base para alguns projetos. Mas nas versões mais novas do Delphi, o REST com JSON foi muito melhorado e simples de implementar e entender. E o melhor de tudo é o resultado final (rapido, estável).

  • Curtir 1

Cleber C. Ferreira
Analista de Sistemas e Consultor
Email e
Skype: [email protected]
Formiga-MG

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Boa tarde, bom depois de muitas pesquisa na web eu não achei nada para resolver o meu problema, e o nosso em relação a trabalhar com SQL direto na aplicação  cliente.

 

Com tudo eu resolvi fazer da seguinte forna.

Na aplicação do servidor criei minha conexão com o bando de dados e coloquei uma query. na properties de params criei um param sem nome, do tipo string e vazio. ainda na query em events "BeforeOpen" coloquei da seguinte forma 

  fqryPesquisa.SQL.Clear;
  fqryPesquisa.SQL.Add(fqryPesquisa.Params[0].AsString);

agora vamos para a plicação cliente.

criei um clientdataset e em Params criei um Param idêntico ao da query no meu servidor, porem agora estou passando o SQL pelo Param que criei. assim quando eu dou open no clientdataset ele me retorna o resultado da consulta usando o SQL que passei por Param. 

espero que tenha ajudado. se ficou confuso e só pedir mais explicações. me ponho a disposição. 

 

Link para o comentário
Compartilhar em outros sites

Boa tarde,

Solivan, com certeza ajudou...

Cleber, o curso é este http://www.devmedia.com.br/curso/curso-de-multicamadas-com-delphi-e-datasnap/379 a ultima aula foi feita em XE5... 

Matheus, não entendi direito, ClientDataSet ligado DataSetProvider do servidor escrevendo o SQL no CommandText não é suficiente?

 

Como vocês tem feito os relatórios? Um método no servidor que devolve PDF ou de que forma? Vocês tem relatórios dinâmicos?

Link para o comentário
Compartilhar em outros sites

  • 7 meses depois ...
14 minutos atrás, flavioast disse:

Boa noite!

 

Posso fazer uma conexão usando qualquer tipo de BD Relacional? SqlServer por exemplo?

Obrigado

 

Boa noite,

 

Pode sim, datasnap não depende de nenhum SGDB.

Mas ele disse:

Antes bem-aventurados os que ouvem a palavra de Deus e a guardam. Lucas 11:28

Link para o comentário
Compartilhar em outros sites

 Se você não achou a solução ainda, use o REST Dataware que já faz o que você quer tudo prontinho sem escrever nada além dos seus SQL's, funciona tudo via WS, com o Datasnap integrado tudo certo...

 https://sourceforge.net/projects/rest-dataware-componentes/

 Pode usar que é batata, eu mesmo sou o desenvolvedor do Pacote e já é usado por mais de 500 Programadores e crescendo justamente para suprir esse tipo de necessidade. VLW.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Galera, 

Estou tentando criar um servidor com firedac e os clientes com datasnap dbx. Tudo funciona perfeitamente. O único problema é quando tento enviar um comando sql para apagar registros via clientdataset. Segue o exemplo:

CDS.CommandText := 'DELETE FROM TABELA WHERE CONTROLE = 1' ; 
CDS.Execute ;

Não acontece o esperado, ou seja, não apagou o registro correspondente. 
Somente apagou o registro quando eu fechei a aplicação. 
Minha pergunta é: Existe alguma outra forma de resolver esse problema utilizando algum outro componente Firedac ou somente se eu mudar toda minha estrutura cliente? 
 

Grato desde já,

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
16 horas atrás, SolivanAraujo disse:

Acredito que só pelo fato de você está usando SQL do lado client já é o suficiente para optar em mudar sua estrutura, não de componentes, mas de metodologia.

Agradeço a dica mas não resolve meu problema. 

 

Grato.

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

 Faltou o Commit, por isso só funcionou após fechar o sistema, vc não commitou o dado ele só foi commitado após o fechamento da app, realize o commit após qualquer alteração de dados, crie uma transação e sempre commite ou de o rollback, mais a transação é altamente necessário.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
3 horas atrás, xyberx disse:

 Faltou o Commit, por isso só funcionou após fechar o sistema, vc não commitou o dado ele só foi commitado após o fechamento da app, realize o commit após qualquer alteração de dados, crie uma transação e sempre commite ou de o rollback, mais a transação é altamente necessário.

Amigo xyberx, eu imaginei que seria isso, mas na tecnologia firedac não tenho a mínima noção de como acionar o commit após o comando. 

Você sabe de algum exemplo que possa me explicar melhor o uso do commit?

Grato desde já

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, cardilo disse:

Mas como eu aplicaria o commit pela aplicação cliente?

Você pode chamar um método remoto para isso, então fazendo essa chamada remota vc pode inclusive deixar no servidor o comando que quer executar e apenas passar os parâmetros por ele mesmo.

Com isso pode pode fazer o que quiser do lado do servidor inclusive o commit.

  • Curtir 1

Mas ele disse:

Antes bem-aventurados os que ouvem a palavra de Deus e a guardam. Lucas 11:28

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 minutos atrás, SolivanAraujo disse:

Você pode chamar um método remoto para isso, então fazendo essa chamada remota vc pode inclusive deixar no servidor o comando que quer executar e apenas passar os parâmetros por ele mesmo.

Com isso pode pode fazer o que quiser do lado do servidor inclusive o commit.

Entendi.. Vou pesquisar esse método e tentar aqui.. Obrigado a todos pelas dicas.

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
7 horas atrás, xyberx disse:

Crie um metodo para dar commit na transação, simples, aí coloca nele a linha do amigo, eu gosto de usar commitretain pq ele cria uma nova transação após commitar.

Galera, desculpe minha ignorância mas procurei vários exemplos no google para fazer esse método e não consegui achar nada que se enquadre em minha estrutura DataSnap (Firedac no servidor e DBX no cliente). Alguém aí tem alguma idéia ou um exemplo de como consigo fazer esse método?

 

Grato

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2537 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...