Detalhado por Data
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...
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
Curtidas 0
Respostas
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
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
26/12/2005
para obter o resultado que você espera, creio que seja necessário utilizar stored procedures.
GOSTEI 0
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
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
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):
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
26/12/2005
Obrigado, deu certinho!!!!
^^
^^
GOSTEI 0
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