Jump to content

dev botao

Delphi com DataSnap e FireDAC


  • Este tópico foi criado há 2761 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 to comment
Share on other 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

Edited by SolivanAraujo
  • Like 3

Mas ele disse:

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

Link to comment
Share on other 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).

  • Like 1

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

Link to comment
Share on other sites

  • 2 weeks later...

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 to comment
Share on other 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 to comment
Share on other sites

  • 7 months later...
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 to comment
Share on other 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.

  • Like 1
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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.

  • Like 1

Mas ele disse:

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

Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.