O que é melhor, usar ApplyUpdates() no ClientDataSet ou ExecSql no SqlDataSet ou SqlQuery

Delphi

Firebird

24/11/2015

Bom dia!
Estou desenvolvendo uma aplicação que irá gravar registos em massa no banco de dados Firebird, Aguém sabe me dizer qual dessas formas de gravar registros seria mais Rápida e Segura?
Gabriel Alencar

Gabriel Alencar

Curtidas 0

Melhor post

Luiz Menin

Luiz Menin

24/11/2015

Isso é muito relativo. Os dados necessitam de controle de concorrência? É cliente/servidor?
Um tempo atrás precisei gravar em banco uma grande massa de dados. Testei diversas formas, e por incrível que pareça, a forma mais rápida foi gerar o SQL em um StringList e no final, adicionar em um Query e chamar o ExecSQL.
Quando for um volume menos expressivo, você pode ir adicionando em um ClientDataSet com Append e chamar o Post para deixar os dados em memória. No final, utiliza o ApplyUpdates(0).
Faça testes e veja qual se aplica melhor ao seu caso!
GOSTEI 1

Mais Respostas

Gabriel Alencar

Gabriel Alencar

24/11/2015

Pois é luíz, obrigado desde já.
Atualmente uso esse conceito com o Append e ApplyUpdates, porem o que esta acontecendo é que movimento um grande numero de dados no mesmo SQL.
Ex.: Tenho dois CDS, um de origem e outro de destino. A cada passada do CDS de origem eu faço um ApplyUpdates no final do código gravando os registros em cada Field corresponente (Meio que um programa de migração de dados). Mas, e se ao inves de usar esse conceito eu gravasse por exemplo em um arquivo de Texto delimitado, linhas com Script INSERT pronto, e depois varria cada linha dando ExecSQL, será que teria algum ganho em termos de memória, velocidade, ... ?
Obs.: Os dados não precisariam de Controle de concorrência pois são dados únicos apenas em modo inserção, e não usa o conceito Cliente-Server pois tudo é feito na mesma muina do banco de dados.
Fico no aguardo!
GOSTEI 0
Luiz Menin

Luiz Menin

24/11/2015

Isso, na verdade foi exatamente isso que fiz. Eu gero um script de Insert e vou adicionando em um TStringlist. Depois passo a lista inteira para um Query e executo. É muito rápido!
GOSTEI 0
Gabriel Alencar

Gabriel Alencar

24/11/2015

Entre usar TStringList e TXT delimitado, qual você acha melhor?
GOSTEI 0
Luiz Menin

Luiz Menin

24/11/2015

Acredito que seja melhor você usar um TStringList por ficar em memória. Ao contrário do txt que acessando o disco, se tornaria um gargalo.
GOSTEI 0
Gabriel Alencar

Gabriel Alencar

24/11/2015

Ok, vou fazer uns testes aqui na aplicação então!
Obrigadão, ...
GOSTEI 0
POSTAR