Array
(
)

pesquisa entre datas por fornecedor

Adelor Silva
   - 23 jan 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...

#Código

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
   - 23 jan 2006

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

#Código

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;



Vinicius2k
   - 23 jan 2006

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+


Adelor Silva
   - 24 jan 2006

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...

outro detalhe... eu tenho que pesquisar pelo código do Fornecedor né...???

espero ter sido claro...


Vinicius2k
   - 24 jan 2006

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+


Adelor Silva
   - 24 jan 2006

InterBase
Tab_Fornecedor

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);

Tab_Entrada_Produto
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, Aqui fica o código do fornecedor na hora da entrada
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!!!


Vinicius2k
   - 24 jan 2006

Colega,

Creio que o que você precisa é:
#Código

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 :
#Código
...
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 ´¬´.


Adelor Silva
   - 25 jan 2006

vou testar... obrigado...


Adelor Silva
   - 25 jan 2006

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;


Vinicius2k
   - 25 jan 2006

Colega,

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

T+


Adelor Silva
   - 26 jan 2006

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...


Aroldo Zanela
   - 26 jan 2006

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:
#Código


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:
#Código

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)



Adelor Silva
   - 26 jan 2006

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