Detalhado por Data

Delphi

26/12/2005

Salve Salve...

Galera, preciso de mais uma ajuda de vcs...
seguinte, preciso fazer um relatório +/- assim:


--------------01/12|02/12|03/12|04/12|
CLIENTE 1| 01 | 32 | 54 | 64
CLIENTE 2| 28 | 32 | 50 | 58

...

Onde os valores são as quantidades lançadas no sistema, ou seja os registros da tabela....
Mas um detalhe mto importante é que o usuário tem que especificar o período do relatório....
por exemplo eu só quero saber do dia 01 até dia 15, etc...

Se alguem puder me ajudar fico agradecido ^^

Vlw...


Ramms

Ramms

Curtidas 0

Respostas

Martins

Martins

26/12/2005

Se vc estiver usando um Banco de Dados com suporte a SQL vc poderá usar [b:573a05ac50]Between[/b:573a05ac50]

Select <Campos> from tabela WHERE<nome da coluna> BETWEEN<valor 1> and <valor 2>; 



GOSTEI 0
Ramms

Ramms

26/12/2005

Se vc estiver usando um Banco de Dados com suporte a SQL vc poderá usar [b:ac4ba8842e]Between[/b:ac4ba8842e]
Select <Campos> from tabela WHERE<nome da coluna> BETWEEN<valor 1> and <valor 2>; 


Isso eu to ligado kra...
mas msm assim isso não funcionaria kra....


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/12/2005

para obter o resultado que você espera, creio que seja necessário utilizar stored procedures.


GOSTEI 0
Martins

Martins

26/12/2005

[quote:1948d6a5b2=´Martins´]Se vc estiver usando um Banco de Dados com suporte a SQL vc poderá usar [b:1948d6a5b2]Between[/b:1948d6a5b2]
Select <Campos> from tabela WHERE<nome da coluna> BETWEEN<valor 1> and <valor 2>; 


Isso eu to ligado kra...
mas msm assim isso não funcionaria kra....[/quote:1948d6a5b2]

Blz, agora q caiu a ficha, hehehe
--------------01/12|02/12|03/12|04/12| CLIENTE 1| 01 | 32 | 54 | 64 CLIENTE 2| 28 | 32 | 50 | 58
aqueles 01/12 etc... são os dias, e vc terá q montar aquelas colunas com as quantidades lançadas é isso?

O [b:1948d6a5b2]Emerson[/b:1948d6a5b2], sugeriu uma SP para isso, será q usando um ClienteDataSet daria para fazer tb Emerson?

Valew!!!


GOSTEI 0
Ramms

Ramms

26/12/2005

[quote:ed312f100a=´Ramms´][quote:ed312f100a=´Martins´]Se vc estiver usando um Banco de Dados com suporte a SQL vc poderá usar [b:ed312f100a]Between[/b:ed312f100a]
Select <Campos> from tabela WHERE<nome da coluna> BETWEEN<valor 1> and <valor 2>; 


Isso eu to ligado kra...
mas msm assim isso não funcionaria kra....[/quote:ed312f100a]

Blz, agora q caiu a ficha, hehehe
--------------01/12|02/12|03/12|04/12| CLIENTE 1| 01 | 32 | 54 | 64 CLIENTE 2| 28 | 32 | 50 | 58
aqueles 01/12 etc... são os dias, e vc terá q montar aquelas colunas com as quantidades lançadas é isso?

O [b:ed312f100a]Emerson[/b:ed312f100a], sugeriu uma SP para isso, será q usando um ClienteDataSet daria para fazer tb Emerson?

Valew!!![/quote:ed312f100a]

Isso msm kra....
Mas eu não tenho noção nenhuma de como montar essa SP...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/12/2005

fiz com clientdataset mesmo. não seria possível com SP porque os parâmetros de saída são desconhecidos e, pelo meu pouco conhecimento, as SP precisam ser criadas com os parâmetros de saídas previamente informados.

vamos ao exemplo (feito com banco de dados Firebird):
procedure TForm1.Button1Click(Sender: TObject);
var
  cliente, i: integer;
  scampo: string;
  fcampo: TField;
begin
  { ESSE EXEMPLO FOI FEITO UTILIZANDO A TABELA "SALES"
    DO BANCO DE DADOS "EMPLOYEE" FORNECIDO COM O IB/FB
    --------------------------------------------------

    COMPONENTES UTILIZADOS:

    - SQLConnection1: TSQLConnection
        ConnectionName = IBConnection
        DriverName = Interbase
        GetDriverFunc = getSQLDriverINTERBASE
        LibraryName = dbexpint.dll
        LoginPrompt = False
        VendorLib = fbclient.dll

    - SQLDataSet1: TSQLDataSet
        SQLConnection = SQLConnection1

    - ClientDataSet1: TClientDataSet

    - DataSource1: TDataSource
        Dataset = ClientDataSet1

    - DBGrid1: TDBGrid
        DataSource = DataSource1

    OBS: as propriedades que não foram informadas
         acima não sofreram nenhuma modificação }

  // ***************************************************** //
  // com essa instrução serão criadas as colunas da tabela //
  // temporária, conforme as datas encontradas             //
  // ***************************************************** //
  with SQLDataSet1 do
  begin
    Close;
    CommandText :=
      ´select ´+
      ´  distinct order_date ´+
      ´from ´+
      ´  sales ´+
      ´where ´+
      ´  order_date between :datainicio and :datafim ´+
      ´order by ´+
      ´  order_date ´;
    Params.ParamByName(´datainicio´).asdate := DateTimePicker1.Date;
    Params.ParamByName(´datafim´).asdate := DateTimePicker2.Date;
    Open;
  end;

  //* aqui será criada a tabela temporária propriamente dita */
  with ClientDataSet1, ClientDataSet1.FieldDefs do
  begin
    close;
    clear;
    Add(´cliente´,ftInteger,0,True);
    while not SQLDataSet1.Eof do
    begin
      Add(SQLDataSet1.Fields[0].AsString,ftFloat,0,False);
      SQLDataSet1.Next;
    end;
    CreateDataSet;
    Open;
  end;

  // ************************************ //
  // com essa instrução trarei os valores //
  // e preecherei a tabela temporária     //
  // ************************************ //
  with SQLDataSet1 do
  begin
    Close;
    CommandText :=
      ´select ´+
      ´  cust_no, order_date, sum(total_value) total_value ´+
      ´from ´+
      ´  sales ´+
      ´where ´+
      ´  order_date between :datainicio and :datafim ´+
      ´group by ´+
      ´  cust_no, order_date ´+
      ´order by ´+
      ´  cust_no, order_date ´;
    Params.ParamByName(´datainicio´).asdate := DateTimePicker1.Date;
    Params.ParamByName(´datafim´).asdate := DateTimePicker2.Date;
    Open;
  end;

  //* as informações serão gravadas *//
  //* na tabela temporária          *//
  while not SQLDataSet1.Eof do
  begin
    cliente := SQLDataSet1.FieldByName(´cust_no´).AsInteger;

    ClientDataset1.Append;
    ClientDataset1.fieldbyname(´cliente´).asinteger := cliente;

    while SQLDataSet1.FieldByName(´cust_no´).AsInteger = cliente do
    begin
      scampo := SQLDataSet1.FieldByName(´order_date´).AsString;
      ClientDataset1.FieldByName(scampo).AsFloat :=
          SQLDataSet1.FieldByName(´total_value´).AsFloat;
      SQLDataSet1.Next;
    end;

    for i := 0 to ClientDataset1.Fields.Count-1 do
      if ClientDataset1.Fields[i].FieldName <> ´cliente´ then
      begin
        fcampo := ClientDataset1.Fields[i];
        //* será alterado o DisplayFormat de modo a   *//
        //* exibir corretamente os valores monetários *//
        if TFloatField(fcampo).DisplayFormat = ´´ then
          TFloatField(fcampo).DisplayFormat := ´,0.00´;

        //* e para as colunas ainda não preenchidas *//
        //* será atriduído o valor 0 (zero)         *//
        if fcampo.IsNull then fcampo.AsFloat := 0;
      end;

    ClientDataset1.Post;
  end;

  ClientDataset1.First;
end;



GOSTEI 0
Ramms

Ramms

26/12/2005

Obrigado, deu certinho!!!!
^^


GOSTEI 0
Martins

Martins

26/12/2005

Obrigado, deu certinho!!!! ^^


Beleza, minha teoria foi boa então, hehehehe

valew [b:2a4946a1b8]Emerson.en[/b:2a4946a1b8].

Desde já Feliz Ano Novo pessoal!!!


GOSTEI 0
POSTAR