Tabela temporária dinamica

22/02/2013

14

Bom dia, Pessoal. Estou necessitando de desenvolver o processo de geração de tabelas temporárias, ou seja a minha ideia é centralizar todo o processo de geração das tabelas com os respectivos registros em uma Unit e no ambiente de geração de relatório (Rave Report ou Quick Report)e consulta (DBGrid) eu somente direcionar o DataSource.


Isso é possível?
Qual é a melhor maneira?

Desde já lhe agradeço pela atenção.
Responder

Post mais votado

22/02/2013

vamos la:

primeiramente, vamos entender o que vc entende como TABELA TEMPORARIA DINAMICA:

digite um codigo onde vc montaria uma 'tabela temporaria dinamica' do seu ponto de vista para entendermos e começarmos a te ajudar, pq na net tem muitos tipos diferentes de exemplos 'dinamicos', vamos ver como vc trabalhar e partir dai.


Obrigado por responder, neste codigo abaixo está tratando somente uma tabela 'Produto', a ideia é tratar varias tabelas onde será defindo por paramentro no momento da criação. Vê se entende o codigo. Obrigado.



unit UTabTemp;

interface

uses
Dialogs, Windows, SysUtils, Classes, Messages, Forms, Variants, DB, DBClient;

type

  TPesquisa = class(TObject)
  public
    DSFormas: TDataSource;
    CDSFormas: TClientDataSet;

    constructor Create;
    destructor Destroy; Override;
    function Pesquisar(): Integer;
  end;

implementation

{ TPesquisa }

uses Udm;

constructor TPesquisa.Create;
begin
  try
  CDSFormas := TClientDataSet.Create(nil);
  CDSFormas.FieldDefs.add('codigo',ftInteger);
  CDSFormas.FieldDefs.add('descricao',ftString,20);
  CDSFormas.ProviderName := 'teste';
  CDSFormas.CreateDataSet;
  DSFormas := TDataSource.Create(nil);
  DSFormas.DataSet := CDSFormas;
  except on E: Exception do
     ShowMessage( E.Message );
  end;
end;

destructor TPesquisa.Destroy;
begin
  DSFormas.Free;
  CDSFormas.Free;
  inherited;
end;

function TPesquisa.Pesquisar(): Integer;
var sFormaCliente : string;
begin
   CDSFormas.Close;
   CDSFormas.CreateDataSet;
   CDSFormas.IndexFieldNames:= 'codigo';
   CDSFormas.Open;
   if dm.IBTransaction.Active then
      dm.IBTransaction.Commit;
   dm.IBTransaction.StartTransaction;
   try
     try
       with dm.QProduto do
          begin
             close;
             sql.Clear;
             sql.Text:= 'SELECT CODIGO, DESCRICAO FROM PRODUTOS';
             open;
             while not eof do
                begin
                         begin
                            CDSFormas.Append;
                            CDSFormas.FieldByName('codigo').AsInteger           := fieldbyname('codigo').AsInteger;
                            CDSFormas.FieldByName('descricao').AsString         := fieldbyname('descricao').AsString;
                            CDSFormas.Post;
                         end;
                   next;
                end;
          end;
       dm.IBTransaction.Commit;
     except
       dm.IBTransaction.Rollback;
       showmessage('erro ao buscar PRODUTOS');
     end;
   finally
     dm.QConsulta.close;
     CDSFormas.First;
   end;
end;

end.


Responder

Mais Posts

é possível sim!
vai dar trabalho mais é possivel! hehe
você terá que criar funções de banco para cada consulta e dentro desta função você terá que alimentar a tabela temporária com os valores e ID do registro! para devolver a sua tela para efetuar a busca!

outras formas seria com a utilização de view, alimentando um ClientDataSet em tempo de execução...
Responder

22/02/2013

Leandroptu

é possível sim!
vai dar trabalho mais é possivel! hehe
você terá que criar funções de banco para cada consulta e dentro desta função você terá que alimentar a tabela temporária com os valores e ID do registro! para devolver a sua tela para efetuar a busca!

outras formas seria com a utilização de view, alimentando um ClientDataSet em tempo de execução...


Alessandro, obrigado por responder. Como que ficaria essa opção:

outras formas seria com a utilização de view, alimentando um ClientDataSet em tempo de execução...
Responder

22/02/2013

Danilo Emanuel

vamos la:

primeiramente, vamos entender o que vc entende como TABELA TEMPORARIA DINAMICA:

digite um codigo onde vc montaria uma 'tabela temporaria dinamica' do seu ponto de vista para entendermos e começarmos a te ajudar, pq na net tem muitos tipos diferentes de exemplos 'dinamicos', vamos ver como vc trabalhar e partir dai.
Responder

22/02/2013

Danilo Emanuel

pq vc nao faz diferente: cria uma classe para cada tabela vc pode instanciar e manipular, e usando atributos vc pode sim criar dinamicamente os CDS inclusive populá-los e até configurar as gris com base nessa classe.

Ex:


unit Cliente;

interface

type
  TCliente = class
  private
    ID: Integer;
    NOME: String;
    INSCRICAO_ESTADUAL: String;
    DATA_CADASTRO: Date;

  published

    property Id: Integer read ID write ID;
    property IE: String read INSCRICAO_ESTADUAL write INSCRICAO_ESTADUAL;
    property DataCadastro: Date read DATA_CADASTRO write DATA_CADASTRO;

  end;

implementation

end.



assim, no método que seria responsável pela criação dinâmica dos cds, vc pasaria a classe no caso TCliente... acho que fica mais fácil pra manutenção, concorda ?

Responder

22/02/2013

Leandroptu

Obrigado irei fazer uns testes.
Responder