Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Bom dia pessoal. 

Estou iniciando com o lazarus e gostaria de saber o que usar no lugar do clientdataset do delphi 7?

Lembrando que o ClientDataSet não segura a conexão com o servidor, além de ter o evento onReconcilieError que gerencia transações concomitantes que possam estar ocorrendo no servidor no mesmo registro.

@Daniel Simoes e @Juliomar Marchetti quais componentes vocês utilizam?

Desde já agradeço a todos.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Eu uso Zeos e os componentes nativos do Lazarus...

Mas a forma de uso varia para cada um deles e é diferente do ClientDataSet 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

5 horas atrás, jackson Lima disse:

Bom dia pessoal. 

Estou iniciando com o lazarus e gostaria de saber o que usar no lugar do clientdataset do delphi 7?

Lembrando que o ClientDataSet não segura a conexão com o servidor, além de ter o evento onReconcilieError que gerencia transações concomitantes que possam estar ocorrendo no servidor no mesmo registro.

@Daniel Simoes e @Juliomar Marchetti quais componentes vocês utilizam?

Desde já agradeço a todos.

Boa tarde,

eu tenho usado o componente TSQLQuery mesmo...

A princípio, da maneira que eu (sub)utilizava o TClientDataset no D7, consegui obter o mesmo comportamento com o TSQLQuery ao migrar meu projeto (cliente/servidor).

Porém, no TSQLQuery você mesmo precisa montar e definir os comandos SQL (comandos insert, update e delete para realizar o CRUD) nas propriedades InsertSQL, UpdateSQL e DeleteSQL. Até onde me lembro, o componente TClientDataSet fazia isso automaticamente ao executar o método ApplyUpdates.

Enfim, vai depender mesmo da sua necessidade (arquitetura e tamanho do teu projeto).

Att

Ricardo

 

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Daniel Simoes disse:

Eu uso Zeos e os componentes nativos do Lazarus...

Mas a forma de uso varia para cada um deles e é diferente do ClientDataSet 

Mas quando tu faz uma consulta fica aberta a conexão com o servidor? (O clientdataset consulta e liberar)

3 minutos atrás, RicardoVoigt disse:

Boa tarde,

eu tenho usado o componente TSQLQuery mesmo...

A princípio, da maneira que eu (sub)utilizava o TClientDataset no D7, consegui obter o mesmo comportamento com o TSQLQuery ao migrar meu projeto (cliente/servidor).

Porém, no TSQLQuery você mesmo precisa montar e definir os comandos SQL (comandos insert, update e delete para realizar o CRUD) nas propriedades InsertSQL, UpdateSQL e DeleteSQL. Até onde me lembro, o componente TClientDataSet fazia isso automaticamente ao executar o método ApplyUpdates.

Enfim, vai depender mesmo da sua necessidade (arquitetura e tamanho do teu projeto).

Att

Ricardo

 

Com relação aos sql, é tranquilo, meu medo é em relação a performance. Quando eu abro um clientdataset no d7 ele conecta no servidor, traz os dados e disconecta (clientserver). Porém usando o sqlquery ele mantem a conexão ativa no servidor enquanto eu não der um close nela

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, jackson Lima disse:

Mas quando tu faz uma consulta fica aberta a conexão com o servidor? (O clientdataset consulta e liberar)

Com relação aos sql, é tranquilo, meu medo é em relação a performance. Quando eu abro um clientdataset no d7 ele conecta no servidor, traz os dados e disconecta (clientserver). Porém usando o sqlquery ele mantem a conexão ativa no servidor enquanto eu não der um close nela

Certo, é isso mesmo...

em algumas situações, onde trabalho com dados apenas em memória, eu já utilizei o componente TMemDataset.

Porém, até onde entendi, ele não tem ligação com banco de dados. Isto é, não teria um comando como o ApplyUpdates para gravação/confirmação dos dados em um banco de dados, utilizando o TSQLQuery, por exemplo.

Att

Ricardo

Link para o comentário
Compartilhar em outros sites

Agora, RicardoVoigt disse:

Certo, é isso mesmo...

em algumas situações, onde trabalho com dados apenas em memória, eu já utilizei o componente TMemDataset.

Porém, até onde entendi, ele não tem ligação com banco de dados. Isto é, não teria um comando como o ApplyUpdates para gravação/confirmação dos dados em um banco de dados, utilizando o TSQLQuery, por exemplo.

Att

Ricardo

Hum, entendi. Foi nesse ponto que senti falta do clientdataset. Ele faz as duas funções juntas: pega os dados no servidor, fecha a conexão, e fica trabalhando em memória, quando eu quiser eu dou um applyupdate ele grava no banco (se já houver novas alterações no registro por outro usuário, o próprio clientdataset no evento onReconcileError faz o merge ou sobreescrita, depende do que eu configuro)

 

Tu usa algum ORM?

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, jackson Lima disse:

Hum, entendi. Foi nesse ponto que senti falta do clientdataset. Ele faz as duas funções juntas: pega os dados no servidor, fecha a conexão, e fica trabalhando em memória, quando eu quiser eu dou um applyupdate ele grava no banco (se já houver novas alterações no registro por outro usuário, o próprio clientdataset no evento onReconcileError faz o merge ou sobreescrita, depende do que eu configuro)

 

Tu usa algum ORM?

Não (ainda não)

dá uma conferida em outras bibliotecas de componentes, como ZeosLib por exemplo, pra ver se acha um "clone" do ClientDataset...

Att

Ricardo

Link para o comentário
Compartilhar em outros sites

@jackson Lima descobriu algo de novo? Caso contrário no Lazarus usando o Zeos não resolveria seu problema ativar o cacheUpdate = true do componente TzQuery? Já faz tempo que estou tentando migrar minha aplicação Delphi para Lazarus, por enquanto estou ainda substituindo alguns componentes que tenho no Delphi mas não tenho no Lazarus (QuickReport para FortesReport, DBX para Zeos).

Link para o comentário
Compartilhar em outros sites

@Juliomar Marchetti Rapaz eu comecei um exemplo com o buf, criando uma function pra construir ele em tempo de execução baseado na query que usei para pegar os dados, só é ruim pq não consegui gerenciar as alterações feitas no banco, porque assim que passo os dados para a query e executo o post, ele não gerencia as alterações em fila, como o @jackson Lima falou, estava pensando em usar o Transaction nativo e o events nativo para realizar esse gerenciamento, nesse caso se gera outro problema que é tempo, estamos um pouco apertados no projeto para poder desenvolver algo do tipo, lembrando que todas essas coisas que foram e que serão desenvolvidas teriam que ser genéricas.

 

Vocês conheceriam um jeito de gerenciar essas transações de uma forma mais rápida?

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

  • 2 semanas depois ...
Em 2017-6-3 at 22:59, Hernani Prado Beira disse:

@jackson Lima descobriu algo de novo? Caso contrário no Lazarus usando o Zeos não resolveria seu problema ativar o cacheUpdate = true do componente TzQuery? Já faz tempo que estou tentando migrar minha aplicação Delphi para Lazarus, por enquanto estou ainda substituindo alguns componentes que tenho no Delphi mas não tenho no Lazarus (QuickReport para FortesReport, DBX para Zeos).

Não resolve, pois ao usar o zQuery com cacheUpdate ao dar um post as alterações feitas no mesmo momento por outros clientes sobrescreveria a alteração. O clientdataset fazia esse controle pra mim.

Mas obrigado pessoal, vou utilizar o tiOpf e quando precisar desse controle (principalmente nas tabelas de movimentações) vou criar campos flags no banco para controlar quem está manipulando os dados.

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

  • 6 anos depois...
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.