Fórum Array dúvida? #220892

17/03/2004

0

Pessoal!

Como posso fazer para colocar os registros da minha tabela do meu banco de dados em um array?



[]´s

Marcos


Marcosmp

Marcosmp

Responder

Posts

18/03/2004

Allen74

Olá Marcos!

Você pretende trazer todos os registros de sua tabela para um Array? Só para que eu possa entender melhor sua motivação, em que situação você pretende trabalhar com um array ao invés de utilizar um componente de acesso a dados como o TQuery, TTable ou mesmo o TClientDataSet?


Responder

Gostei + 0

18/03/2004

Cabelo

Caro Allen74..
A motivação de se utilizar um array é que vc tem uma velocidade muito maior, para manipulação dos dados, sem contar a maior versatilidade de recursos que vc obtem, fazendo tudo ´na mão´, que é o caso de um vetor..

Caro marcosmp..

Para vc trabalhar com uma matriz de campos do banco de dados, vc pode utilizar um vetor do tipo record, e ir implementando as variáveis dos vetores, de acordo com a sua tabela, por exemplo :

type
r_campos = record
s_vetor_campos : string;
end;

type
r_valores = record
s_vetor_valores : Currency;
end;

type
r_tabela = record
s_campos : array of r_campos;
s_valores : r_valores;
s_tabela : string;
end;

declarar o vetor em PUBLIC

s_vetor1 : array of r_tabela;

No evento FormCreate, vc deve implementar o vetor

setlength(s_vetor1, length(s_vetor1) + 1);
de um select nos dados do banco,
for v_i := 0 to clientdataset.fieldcount - 1 do
begin
setlength(s_vetor1[0].s_campos, length(s_vetor1[0].s_campos) + 1);
s_vetor1[0].s_campos[v_i].s_vetorcampos :=
clientdataset.fields[v_i].fieldname;
end;

a mesma coisa vc deve fazer com o outro vetor, e montar a sua matriz..

depois que isso estiver carregado na memória, ficará muito mais rápido por exemplo, criar relatórios..

sem mais

Cabelo


Responder

Gostei + 0

18/03/2004

Marcosmp

Bom dia Fernando

Obrigado por ter respondido ao meu e-mail.
Eu preciso traze-los para o array pelo seguinte fato:

Desenvolvi um sistema na empresa no qual trabalho que é controlado por licenças onde por exemplo ele é vendido e colocado uma data de expiração qualquer exemplo:18/03/2005 que corresponde a 1 ano de licenca do software onde que expirara nessa data.
Quando estiver faltando 30 dias para a data de expiração o sistema emitira um alerta para o Depto de Comercial para que eles entrem em contato com o cliente para negociar a renovação das licenças.
A rotina eu já criei mas não consigo colocar os registros da tabela nesse array, pois acho mais rápido a consulta.
E outra coloquei um timer para que ele execute essa rotina de tempos em tempos para verifica-los.
Não sei se fui muito claro na exposição da minha ideia


Desde já agradeço a sua atenção

Marcos


Responder

Gostei + 0

18/03/2004

Allen74

Marcos,

Todo processamento em memória é significativamente mais rápido e eficiente que um acesso ao disco. Para algumas situações quando o processamento das informações que estão no banco de dados implicam em uma grande quantidade de IO (operações de leitura e escrita), podemos conseguir grandes diferenciais de desempenho utilizando a memória para realizar tal tarefa.

No seu caso, se entendi corretamente a sua necessidade, não acho que esta preocupação seja pertinente. Quando você utiliza uma Query o componente geralmente faz uma leitura de parte ou de todo o resultado da consulta na memória, construindo internamente uma estrutura semelhante ao array que você pretende implementar. Esta estrutura já é comprovadamente otimizada e estável já que os componentes de acesso a dados no Delphi são bastante amadurecidos.

Por outro lado, se você optar por criar código para este propósito, o exemplo que o amigo [b:afecdab57e]cabelo_uni[/b:afecdab57e] postou poderia te servir bem, apesar de que eu preferiria construir uma solução com uma lista ligada estruturas do tipo record ou então uma lista de objetos que estaria reproduzindo a estrutura da tabela em seus atributos. Mesmo assim, eu somente partiria para esta solução se fosse realmente necessário exisitr um processamento intenso sobre estes dados, porque se investir nesta solução eu estarei sujeito a perder tempo com o desenvolvimento e também terei a oportunidade de estar inserindo bugs e até funcionalidade desnecessária para meu projeto.

Sendo assim, sugiro inicialmente que você analise melhor suas necessidades. Se você quiser ou puder entrar um pouco mais em detalhes sobre o processamento que você terá que realizar com estas informações, poste aqui que terei o maior prazer em te ajudar.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar