consultando pedidos do mes

Delphi

23/08/2007

pessoal estou tentando fazr uma consulta em q resulte na exibição de todos os pedidos feitos no mês desejado. c/ a rotina q estou utilizando tras este resultado. só q ñ esta exibindo todos os itens do pedido apenas um item. e o total do pedido [por cliente] tb ñ esta exibindo. já qbrei a kbeça e ñ consegui encontrar este erro, se alguem podr ajudar fico muito grato. a rotina q estou usando é a seguinte:

var part: string;
dataini,datafin : string;
begin
ShortDateFormat:=´dd/mm/yyyy´;
part := datetostr(date);
begin
dataini := MaskEdit1.text;
datafin := MaskEdit2.text;
//Transforma em data estilo Americano, usado pela instrução SQL
dataini:=FormatDateTime(´mm/dd/yyyy´,StrToDate(dataini));
datafin:=FormatDateTime(´mm/dd/yyyy´,StrToDate(datafin));
with DtmContVendas.Query3 do
begin
Close;
sql.Clear;
sql.add(´select codped,nped,clienteped,dataped,subtotal,desconto,totgeral,produto,preco,qtditem,totiten,descricao from produtos,clientes,Pedidos,itens´);
sql.add(´where produtos.descricao=itens.produto and itens.codped=pedidos.codped and pedidos.dataped between ´´+ dataini + ´´and ´´ + datafin + ´´´);
sql.add(´group by codped,nped,clienteped,dataped,subtotal,desconto,totgeral,produto,preco,qtditem,totiten,descricao order by pedidos.dataped´);
Open;
Application.CreateForm(TFrmrelpedmes,Frmrelpedmes); // cria o formulário
Frmrelpedmes.qreprelpedmes.Preview; // exibe a consulta

por favor se alguem podr ajudar


Marquinhospe

Marquinhospe

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

23/08/2007

qual o banco de dados utilizado ?
outra coisa: você está certo do resultado que deseja? porque não é possível retornar numa instrução simples, os itens do pedido e ainda o total dos pedidos [b:cb82dd9e88]por cliente[/b:cb82dd9e88]. sem contar a incoerência de exibir ´todos os pedidos feitos no mês desejado´ e ter uma data inicial e uma data final.


GOSTEI 0
Nasguone

Nasguone

23/08/2007

bem eu ápenas modificaria seu tipode consulta para a seguinte forma...declarar a data ao invez de utilizar between....

segue abaixo um exemplo de como utilizo




DATAINI := (FormatDateTime(´mm/dd/yyyy´,dtpIni.DateTime));
DATAFIN := (FormatDateTime(´mm/dd/yyyy´,dtpFin.DateTime +1));

dm.cdproducao.Close;
dm.dsProducao.CommandText :=
´DECLARE @ApontIni As DateTime,´+´ ´+
´@ApontFin As DateTime;´+´ ´+
´SET @ApontIni =´´´+DATAINI+´´´;´+´ ´+
´SET @ApontFin =´´´+DATAFIN+´´´;´+´ ´+
´SELECT A.* FROM CONSULTA_PRODUCAO A´+´ ´+
´where´+´ ´+
´(A.Apont_Date >=@ApontIni) and ´+´ ´+
´(A.Apont_Date <=@ApontFin)´+´ ´+
´and A.Apont_Status = ´´AP´´´+´ ´+
´order by A.Apont_Date desc´;
dm.cdproducao.Open;

ode os dtp são componentes de data TdateTime
dsprodução = datasource
E o script e para SQL Server...se vc utiliza outro banco não sei se funciona a forma de declarar as datas.

No geral a logica do seu script esta correta, não vejo nada de anormal.
Apenas no where coloque entre parentese cada clausula dos and.


Espero que te ajude
E.C.S


GOSTEI 0
Nasguone

Nasguone

23/08/2007

E verdade não me atentei ao que vc quer mostrar.....

para este tipode resultado vc teria que usar uma instrução de WITH ROLLUP ai sim vc teria numped por quantidade total de itens, pois os resultados seriam como um cubo.


GOSTEI 0
Marquinhospe

Marquinhospe

23/08/2007

estou trabalhando c/ paradox. e preciso gerar um relatorio c/ todos os pedidos feito no mês c/ seus respectivos itens e totais dos pedidos. monto o relatorio mas em um pedido c/ + d 1 item ele ñ exib todos os itens (como já citei) ñ sei + o q fazr. tm um erro no cadastro dos itens q ñ sei se implik no relatorio os itens estão sendo cadastrados na tblitens c/ o codigo sempre repetindo o codigo do pedido. ex.: pedido codigo 5 os coditens sempre são inseridos como 5


GOSTEI 0
Nasguone

Nasguone

23/08/2007

select A.nped
, COUNT(*) AS´TOTAL GERAL ´
FROM tabela_pedidos A
where
A.Apont_Date >=´05/05/2007´ and A.Apont_Date <=´09/05/2007´
group by A.nped WITH ROLLUP
Order by A.nped DESC

tente usar este select para ver se reporta numped por totais de itens....
se sim basta vc incluir as clausulas que vc quiser


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

23/08/2007

tente assim:
begin
  with DtmContVendas.Query3 do
  begin
    Close;
    sql.Text :=
      ´select codped, nped, clienteped, dataped, subtotal, desconto, totgeral, ´+
      ´  produto, preco, qtditem, totiten, descricao ´+
      ´from pedidos, clientes, itens, produtos ´+
      ´where clientes.codcli = pedidos.codcli and itens.codpedido = pedidos.codpedido ´+
      ´ and produtos.codproduto = itens.codproduto and extract(month from pedidos.dataped) = :mes ´+
      ´ and extract(year from pedidos.dataped) = :ano ´+
      ´order by pedidos.dataped ´;
    ParamByName(´mes´).asinteger := monthof(strtodate(dataini));
    ParamByName(´ano´).asinteger := yearof(strtodate(dataini));
    Open;

    if IsEmpty then
      ShowMessage(´Não há pedidos no mês´)
    else
    begin
      Application.CreateForm(TFrmrelpedmes,Frmrelpedmes); // cria o formulário
      Frmrelpedmes.qreprelpedmes.Preview; // exibe a consulta
    end;
  end;
end;



GOSTEI 0
Emerson Nascimento

Emerson Nascimento

23/08/2007

corrigindo:
begin
  with DtmContVendas.Query3 do
  begin
    Close;
    sql.Text :=
      ´select codped, nped, clienteped, dataped, subtotal, desconto, totgeral, ´+
      ´  produto, preco, qtditem, totiten, descricao ´+
      ´from pedidos, clientes, itens, produtos ´+
      ´where clientes.codcli = pedidos.codcli and itens.codpedido = pedidos.codpedido ´+
      ´ and produtos.codproduto = itens.codproduto and extract(month from pedidos.dataped) = :mes ´+
      ´ and extract(year from pedidos.dataped) = :ano ´+
      ´order by pedidos.dataped ´;
    ParamByName(´mes´).asinteger := monthof(strtodate(MASKEDIT1.TEXT));
    ParamByName(´ano´).asinteger := yearof(strtodate(MASKEDIT1.TEXT));
    Open;

    if IsEmpty then
      ShowMessage(´Não há pedidos no mês´)
    else
    begin
      Application.CreateForm(TFrmrelpedmes,Frmrelpedmes); // cria o formulário
      Frmrelpedmes.qreprelpedmes.Preview; // exibe a consulta
    end;
  end;
end;



GOSTEI 0
POSTAR