Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 19 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
86 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Preenchendo uma matriz dinâmica multidimensional com dados de um dataset
Publicado por ActiveDelphi : Segunda, Dezembro 17, 2007 - 08:31 GMT-3 (1632 leituras)
Comentários comentar   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Bem, o assunto que estou abordando pode ser utilizado em relatórios ou mesmo em listviews, grids ou string grids. O objetivo é suprimir a criação e deleção de tabelas virtuais que necessitam da escrita de informações no HD, ou mesmo a criação de novas consultas para concatenar dados.

Estarei utilizando como exemplo duas consultas, mas vale lembrar que o método pode ser usado com tabelas, com consultas misturado com tabelas e o que mais a imaginação permitir. Também estou utilizando uma procedure, entretanto pode ser usado como função, passando as consultas por parâmetro, por exemplo.

Segue abaixo o corpo da procedure todo explicado. Fique a vontade para entrar em contato e tirar qualquer dúvida seu conteúdo, se for necessário.

procedure MatrizMultidimensional;
var
  //Array multidimensional dinâmica de inteiros
  Listagem: array of array of integer;
  //Variáveis utilizadas
  i, j, TotLin, TotCol, FCampo1, FCampo2: Integer;
begin
  //Indicativo para que a matriz esteja sempre compeltamente vazia
  Listagem := nil;

  //definir a quantidade de linhas e colunas que a matriz deverá ter:
  try
    //QryDados e QryDados1 são os DataSets com as consultas realizadas
    QryDados.Active := False;
    QryDados1.Active := False;
    QryDados.Active := True;
    QryDados1.Active := True;

    TotLinhas := QryDados.RecordCount - 1;
    TotCol := (QryDados.FieldCount - 1) + (QryDados1.FieldCount - 1);
    //No exemplo aabaixo a matriz conterá n linhas por n colunas
    SetLength(Listagem, TotLin, TotCol);

    //Abaixo, preenchemos os campos da matriz com 0 (zero).
    //se isso não for feito, quando forem colocados os dados será
    //apresentada uma mensagem de erro.


    for i := 0 to Totlin - 1 do
      for
j := 0 to TotCol - 1 do
        Listagem[i, j] := 0;

    //Vai para o primeiro registro da consulta
    QryDados.First;
    //Zera as variáveis que serão reaproveitadas no preenchimento da matriz
    i := 0;
    j := 0;

    //como colocar os campos que não são calculados dentro da matriz.
    //Para isso estaremos utilizando a consulta QryDados


    while not QryDados.Eof do
    begin

      j := j + 1;
      Listagem[i, 0] := QryDadosNOMECAMPO1.Value;
      Listagem[i, 1] := QryDadosNOMECAMPO2.Value;
      QryDados.Next;
      i := i + 1;
    end;

    //como colocar os dados calculados, utilizando a consulta QryDados1:

    QryDados1.First;

    while not QryDados1.Eof do
    begin

      FCampo1 := QryDados1NOMECAMPO1.Value;
      FCampo2 := QryDados1NOMECAMPO2.Value;

      for i := 0 to TotLin - 1 do
      begin

        if Listagem[i, 0] = FCampo1 then
        begin

          Listagem[i, 2] := Listagem[i, 2] + QryDados1NOMECAMPO2.Value;
          Listagem[i, 3] := Listagem[i, 3] + (Listagem[i, 2] * QryDados1NOMECAMPO2.Value);
        end;
        QryDados1.Next;
      end;
    end;
  except
    raise
;
  end;
end;

E é isso, dessa forma teremos uma matriz dinâmica multidimensional, com campos copiados de uma consulta e calculados de outra consulta. Espero que goste do meu pequeno artigo. Até mais!

Fábio Moraes
Contato: fmoraes05@terra.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados