pesquisa entre datas por fornecedor

23/01/2006

agradeço a ajuda de ontem sobre a pesquisa entre datas... esta funcionando perfeitamente bem...
mas surgiu uma nova necessidade, pesquisar entre datas e por fornecedor...
fiz da seguinte forma... mas não tive sucesso... tentei algumas variações...

with DataModule1.Qry_Pesq_Datas do
begin
  Close;
  SQL.Text := ´select * from Tab_Entrada_Produto where Data_Entr_Prod between :DataInicial and :DataFinal´;
  ParamByName(´DataInicial´).AsDate := DateTimePickerInicio.Date;
  ParamByName(´DataFinal´).asDate := DateTimePickerFinal.Date;
  Open;
end;



Adelor Silva

Respostas

23/01/2006

Adelor Silva

Desculpem... copiei o texto errado... a pesquisa que eu tentei fazer ficou desta forma...

with DataModule1.Qry_Pesq_Datas do 
begin 
  Close; 
  SQL.Text := ´select * from Tab_Entrada_Produto where(select * from Tab_Entrada_Produto where Fornec_Entr_Prod like: Fornecedor) Data_Entr_Prod between :DataInicial and :DataFinal´; 
  ParamByName(´DataInicial´).AsDate := DateTimePickerInicio.Date; 
  ParamByName(´DataFinal´).asDate := DateTimePickerFinal.Date; 
  ParamByName(´Fornecedor´).AsString := Edit1.Text; 
  Open; 
end;



Responder Citar

23/01/2006

Vinicius2k

Colega,

Eu não tenho certeza se entendi bem o que você precisa...
Seria: retornar os registros de um fornecedor X em um período Y?

Qual a relação existente entre Tab_Entrada_Produto e Fornec_Entr_Prod ?
Como uma é entrada é relacionada a um fornecedor? Através de um código?

Se possível, poste a estrutura de ambas as tabelas para que fique mais fácil que o ajudemos.

T+


Responder Citar

24/01/2006

Adelor Silva

na (Tab_Entr_Prod) eu tenho eu tenho os ítens normais como:
Prod_Entr;
Cod_Fornec_Entr_Prod
Fornec_Entr_Prod;
Data_Entr_Prod;
etc;

gostaria de fazer uma pesquisa onde possa retornar entre um periodo de tempo todos o ítens de um Fornecedor... a pesquisa entre datas vc já me ajudou, e agora gostaria de incluir na mesma pesquisa escolhendo um fornecedor... esta é a pesquisa que vc montou pra mim...

with DataModule1.Qry_Pesq_Datas do
begin
Close;
SQL.Text := ´select * from Tab_Entrada_Produto where Data_Entr_Prod between :DataInicial and :DataFinal´;
ParamByName(´DataInicial´).AsDate := DateTimePickerInicio.Date;
ParamByName(´DataFinal´).asDate := DateTimePickerFinal.Date;
Open;
end;

nesta mostra todos os produtos comprados... mas gostaria de poder escolher... todos os produtos comprados de um fornecedor naquele periodo...

[color=red:0946a527b2]outro detalhe... eu tenho que pesquisar pelo código do Fornecedor né...???[/color:0946a527b2]

espero ter sido claro...


Responder Citar

24/01/2006

Vinicius2k

Colega,

Para lhe ajudar com o que você precisa, precisamos da estrutura da tabela de fornecedores e que você informe qual a relação entre elas (qual campo na tabela de entradas é responsável por armazenar o código do fornecedor).

T+


Responder Citar

24/01/2006

Adelor Silva

InterBase
[color=red:9ce15c0e79]Tab_Fornecedor[/color:9ce15c0e79]

CREATE TABLE TAB_FORNECEDOR (
COD_FORNEC INTEGER NOT NULL,
NOME_FORNEC VARCHAR(30),
CONTATO_FORNEC VARCHAR(20),
END_FORNEC VARCHAR(30),
EMAIL_FORNEC CHAR(20),
BAIRRO_FORNEC VARCHAR(20),
CEP_FORNEC CHAR(15),
CIDADE_FORNEC VARCHAR(20),
UF_FORNEC CHAR(2),
´I.E._FORNEC´ CHAR(15),
CNPJ_FORNEC CHAR(20),
FONE_FORNEC CHAR(20),
CEL_FORNEC CHAR(15),
NUM_COMPRAS_FORNEC INTEGER,
DATA_CADASTRO_FORNEC DATE,
OBS_FORNEC BLOB SUB_TYPE 1 SEGMENT SIZE 150
);

ALTER TABLE TAB_FORNECEDOR ADD CONSTRAINT PK_TAB_FORNECEDOR PRIMARY KEY (COD_FORNEC);

[color=red:9ce15c0e79] Tab_Entrada_Produto[/color:9ce15c0e79]
CREATE TABLE TAB_ENTRADA_PRODUTO (
COD_ENTR_PROD INTEGER NOT NULL,
DESCR_ENTR_PROD VARCHAR(50),
COD_PROD_ENTR_PROD INTEGER,
FORNEC_ENTR_PROD VARCHAR(50),
COD_FORNEC_ENTR_PROD INTEGER, [color=red:9ce15c0e79] Aqui fica o código do fornecedor na hora da entrada[/color:9ce15c0e79]
DATA_ENTR_PROD DATE,
VLRUNIT_ENTR_PROD NUMERIC(15,2),
VLRTOT_ENTR_PROD NUMERIC(15,2),
QTD_ENTR_PROD NUMERIC(15,2),
PESO_ENTR_PROD NUMERIC(15,2),
OBS_ENTR_PROD BLOB SUB_TYPE 0 SEGMENT SIZE 200
);

ALTER TABLE TAB_ENTRADA_PRODUTO ADD CONSTRAINT PK_TAB_ENTRADA_PRODUTO PRIMARY KEY (COD_ENTR_PROD);

o relacionamento entre as tabelas eu não sei fazer também...

Grato pela ajuda!!!


Responder Citar

24/01/2006

Vinicius2k

Colega,

Creio que o que você precisa é:
select
  F.NOME_FORNEC, E.*
from
  TAB_ENTRADA_PRODUTO E
left join
  TAB_FORNECEDOR F on (E.COD_FORNEC_ENTR_PROD = F.COD_FORNEC)
where
 (E.DATA_ENTR_PROD between :datainicial and :datafinal) and
 (F.NOME_FORNEC like :fornecedor)



A passagem dos parametros, no que se refere ao fornecedor, seria desta forma :
...
  ParamByName(´Fornecedor´).AsString := Edit1.Text + ´¬´;
  // ou
  ParamByName(´Fornecedor´).AsString := ´¬´ + Edit1.Text + ´¬´;
...


Isto faria uma busca no intervalo datas e especificando parte do nome do fornecedor, de acordo com como você pretende utilizar o like em conjunto com o ´¬´.


Responder Citar

25/01/2006

Adelor Silva

vou testar... obrigado...


Responder Citar

25/01/2006

Adelor Silva

Tentei desta forma... mas não deu certo...

begin
with DataModule1.Qry_Pesq_Datas do
begin
Close;
SQL.Text := ´select NOME_FORNEC, Data_Entr_Prod * from TAB_ENTRADA_PRODUTO E left join TAB_FORNECEDOR on (COD_FORNEC_ENTR_PROD = COD_FORNEC) where(DATA_ENTR_PROD between :datainicial and :datafinal) and(NOME_FORNEC like:fornecedor)´;
ParamByName(´DataInicial´).AsDate := DateTimePickerInicio.Date;
ParamByName(´DataFinal´).asDate := DateTimePickerFinal.Date;
ParamByName(´Fornecedor´).AsString := Edit1.Text;
Open;
end;


Responder Citar

25/01/2006

Vinicius2k

Colega,

A instrução que você está usando não é a mesma que eu lhe passei. Atenção aos detalhes.

T+


Responder Citar

26/01/2006

Adelor Silva

1° - a pesquisa funcionou perfeitamente... muito obrigado...

2° - desculpa por ter modificado a sua instrução... é que eu não entendi ela e achei que alguns ítens deveria ser modificados...

3° - o que significa o ´F.´ e o ´E.´ e tem também somente ´F sem ponto´

gostaria de entender a instrução, para poder fazer outras com base nesta... para não ter que cada vez pedir socorro no forum...

4° - Mais uma vez... muito obrigado...


Responder Citar

26/01/2006

Aroldo Zanela

Colega,

Estas “Letras” podem ser nomes, ou melhor, alias (apelidos) atribuídos a nomes de tabelas dentro do escopo da instrução SQL. Isto facilita a leitura de scripts e a lógica de associações complexas.

Veja um exemplo com e sem o uso de alias:

Usando ALIAS:
select
  F.NOME_FORNEC, E.*
from
  TAB_ENTRADA_PRODUTO E
left join
  TAB_FORNECEDOR F on (E.COD_FORNEC_ENTR_PROD = F.COD_FORNEC)
where
 (E.DATA_ENTR_PROD between :datainicial and :datafinal) and
 (F.NOME_FORNEC like :fornecedor)

Sem ALIAS:
select
  TAB_FORNECEDOR.NOME_FORNEC, TAB_ENTRADA_PRODUTO.*
from
  TAB_ENTRADA_PRODUTO
left join
  TAB_FORNECEDOR on (TAB_ENTRADA_PRODUTO.COD_FORNEC_ENTR_PROD = TAB_FORNECEDOR.COD_FORNEC)
where
 (TAB_ENTRADA_PRODUTO.DATA_ENTR_PROD between :datainicial and :datafinal) and
 (TAB_FORNECEDOR.NOME_FORNEC like :fornecedor)



Responder Citar

26/01/2006

Adelor Silva

Obrigado Aroldo Zanela... vou fazer alguns testes para ver se entendi...


Responder Citar