Para todos os delpheiros de plantão, essa classe é com certeza a mais idolatrada (tanto que a microsoft copiou.. hehehe)
Um componente capaz de manter em memória um "micro bd", com indices, ordenação, agrupamento, etc.
Mas, apesar dos pesares, não é perfeito. Já encontrei alguns empecilhos com esse cara e de vez em quando, quando lembrar de algum, posto aqui.
1 - Em caso de erro de um reconcile erro, ele engole a exceção e passa direto como se nada tivesse acontecido. :)
2 - Aggregate fields: nunca tente interpretá-los como AsFloat. Sempre da problema. Faça um cast StrToFloat e trate valores como '' para conseguir o que quer.
3 - Utilizando o commandtext do componente: você pode passar parâmetros no commandtext e depois dar um fetchparams para criá-lo. Mas, se você troca o commandtext, dê um clear nos params da query senão da m#r#a!!
Bem, num lembro mais de um... Quando aparecer eu posto
Mostrando postagens com marcador delphi. Mostrar todas as postagens
Mostrando postagens com marcador delphi. Mostrar todas as postagens
quinta-feira, 3 de abril de 2008
segunda-feira, 31 de março de 2008
Dicas de delphi - Parte I
Começando uma série de dicas rápidas de delphi, aqueles códigos que você sempre precisa mas nunca lembra. Se quiser alguma coisa, dá um toque que eu posto. Vou tentar colocar dicas que eu mesmo desenvolvi, mas se eu não conseguir, o google me ajuda. ;).
Fazendo download de arquivos:
Declare no uses a unit UrlMon.
procedure TForm5.Download(AFileSource, AFileDestiny: String);
begin
URLDownloadToFile(nil, PChar(AFileSource), PChar(AFileDestiny), 0, nil);
end;
Beleza, chame essa procedure passando a url do arquivo (AFileSource) e onde será salvo (AFileDestiny).
T+
Fazendo download de arquivos:
Declare no uses a unit UrlMon.
procedure TForm5.Download(AFileSource, AFileDestiny: String);
begin
URLDownloadToFile(nil, PChar(AFileSource), PChar(AFileDestiny), 0, nil);
end;
Beleza, chame essa procedure passando a url do arquivo (AFileSource) e onde será salvo (AFileDestiny).
T+
sexta-feira, 28 de março de 2008
Ferramenta para atualização de banco de dados
Tive uma idéia brilhante ontem (que com certeza não é minha).
Quando precisamos atualizar um banco de dados muito grande, passamos por um problema: tempo. Rodamos um update e esperamos uma vida pra obter resposta. Fora quando o banco não cai, ou tinha problema e corrompe, etc. Os ossos quebrados do ofício.
Mas será que é possível atualizar de poucos em poucos registros, aumentando assim a velocidade e diminuindo o perigo de inconsistência?
Há algum tempo atrás desenvolvi uma classe de pool de thread (p.s: thread é um processo do programa que roda em paralelo com ele. Pool de thread é um conjunto de threads) que permite que eu passe um procedimento e ela cria uma série de threads, dividindo a tarefa, e executando mais rápido.
Essa classe foi pensada pra ser utilizada com relatórios muito pesados, e faria o seguinte: numa das threads retorna os registros, por exemplo, de 1 a 100. Em outra thread, do 101 a 200. E assim por diante. No final, todos os registros seriam juntados na máquina do usuário e o relatório seria montado.
Acredite, é muito mais rápido para o banco executar pequenos selects ou updates do que um monstro de uma vez.
Mas queria algumas idéias, de como começar, ou se é útil. Além disso, outras aplicações para o pool de threads.
Não vou postar aqui o código, mas quem quiser, só me dá um toque que eu mando.
E se tiver alguma correção, ai é legal postar aqui.
Até
Quando precisamos atualizar um banco de dados muito grande, passamos por um problema: tempo. Rodamos um update e esperamos uma vida pra obter resposta. Fora quando o banco não cai, ou tinha problema e corrompe, etc. Os ossos quebrados do ofício.
Mas será que é possível atualizar de poucos em poucos registros, aumentando assim a velocidade e diminuindo o perigo de inconsistência?
Há algum tempo atrás desenvolvi uma classe de pool de thread (p.s: thread é um processo do programa que roda em paralelo com ele. Pool de thread é um conjunto de threads) que permite que eu passe um procedimento e ela cria uma série de threads, dividindo a tarefa, e executando mais rápido.
Essa classe foi pensada pra ser utilizada com relatórios muito pesados, e faria o seguinte: numa das threads retorna os registros, por exemplo, de 1 a 100. Em outra thread, do 101 a 200. E assim por diante. No final, todos os registros seriam juntados na máquina do usuário e o relatório seria montado.
Acredite, é muito mais rápido para o banco executar pequenos selects ou updates do que um monstro de uma vez.
Mas queria algumas idéias, de como começar, ou se é útil. Além disso, outras aplicações para o pool de threads.
Não vou postar aqui o código, mas quem quiser, só me dá um toque que eu mando.
E se tiver alguma correção, ai é legal postar aqui.
Até
Marcadores:
banco de dados,
delphi,
desenvolvimento,
pool,
threads
Assinar:
Postagens (Atom)