Fórum Select Firebird no Delphi7 #504049

10/12/2014

0

Pessoal, preciso de ajuda. Delphi 7 com firebird 2.5. Tenho uma tabela de pedidos chamada PEDIDOBASE e outra tabela com os itens chamada PEDIDOITEM. Na tabela PEDIDOBASE tenho um campo com o codigo de empresa, pois o banco trabalha com varias empresas e sempre quando preciso de informacoes busco na base apenas os dados daquela empresa. Pois bem. Preciso filtrar a tabela PEDIDOITEM por data de entrega, mas pode ter ITENS que não fazem parte da empresa selecionada. A questão é, como trazer os itens que preciso dentro do parametro das datas iniciais e finais e que estejam relacionadas com a empresa que necessito sendo que esta informacao esta na tabela PEDIDOBASE ?
Carlos Cabral

Carlos Cabral

Responder

Posts

11/12/2014

Renato Rubinho

Buenos,

Segue exemplo de comando com join para o seu resultado:

SELECT 
PEI.*  
FROM 
PEDIDOITEM PEI
INNER JOIN PEDIDOBASE PEB ON PEB.CODIGO = PEI.CODIGO
WHERE PEB.EMPRESA = 1
AND PEB.DATA_ENTREGA BETWEEN '01.12.2014' AND '11.12.2014'


Abraççç,
rrubinho
Responder

Gostei + 0

13/12/2014

Carlos Cabral

Obrigado. Montei e deu certo. Valeu
Responder

Gostei + 0

13/12/2014

Carlos Cabral

Obrigado. Montei e deu certo. Valeu
. Mas tem um porém colocando com os campos propriamente dito deu certo, mas preciso colocar com as variaveis que serão solicitadas em tempo de execução estou colocando o fonte aqui:

var AUXEMP : Integer;
var DATAINI : String;
var DATAFIM : String;
var Contador : Integer;
begin
AUXEMP := codigoempresa;
DATAINI := FormatDateTime('dd.mm.yyyy',StrToDate(mkdataini.Text));
DATAFIM := FormatDateTime('dd.mm.yyyy',StrToDate(mkdatafim.Text));
dmVendas.cdsVendaPedidoBase.Close;
dmVendas.cdsVendaPedidoItem.Close;
VENDAPEDIDOITEM.IDPEDIDO where VENDAPEDIDOBASE.CODIGOEMPRESA = :AUXEMP and VENDAPEDIDOITEM.DATAENTREGA between :dataini and :datafim';
dmVendas.cdsVendaPedidoItem.CommandText := 'SELECT * from VENDAPEDIDOITEM inner join VENDAPEDIDOBASE on VENDAPEDIDOBASE.IDPEDIDOBASE = VENDAPEDIDOITEM.IDPEDIDO where VENDAPEDIDOBASE.CODIGOEMPRESA = :AUXEMP and VENDAPEDIDOITEM.DATAENTREGA between :DATAINI and :DATAFIM';
dmVendas.cdsVendaPedidoBase.Open;
dmVendas.cdsVendaPedidoItem.Open;
Responder

Gostei + 0

13/12/2014

Carlos Cabral

Obrigado. Montei e deu certo. Valeu
. Mas tem um porém colocando com os campos propriamente dito deu certo, mas preciso colocar com as variaveis que serão solicitadas em tempo de execução estou colocando o fonte aqui:

var AUXEMP : Integer;
var DATAINI : String;
var DATAFIM : String;
var Contador : Integer;
begin
AUXEMP := codigoempresa;
DATAINI := FormatDateTime('dd.mm.yyyy',StrToDate(mkdataini.Text));
DATAFIM := FormatDateTime('dd.mm.yyyy',StrToDate(mkdatafim.Text));
dmVendas.cdsVendaPedidoBase.Close;
dmVendas.cdsVendaPedidoItem.Close;
VENDAPEDIDOITEM.IDPEDIDO where VENDAPEDIDOBASE.CODIGOEMPRESA = :AUXEMP and VENDAPEDIDOITEM.DATAENTREGA between :dataini and :datafim';
dmVendas.cdsVendaPedidoItem.CommandText := 'SELECT * from VENDAPEDIDOITEM inner join VENDAPEDIDOBASE on VENDAPEDIDOBASE.IDPEDIDOBASE = VENDAPEDIDOITEM.IDPEDIDO where VENDAPEDIDOBASE.CODIGOEMPRESA = :AUXEMP and VENDAPEDIDOITEM.DATAENTREGA between :DATAINI and :DATAFIM';
dmVendas.cdsVendaPedidoBase.Open;
dmVendas.cdsVendaPedidoItem.Open;
Responder

Gostei + 0

13/12/2014

Carlos Cabral

Obrigado. Montei e deu certo. Valeu
. Mas tem um porém colocando com os campos propriamente dito deu certo, mas preciso colocar com as variaveis que serão solicitadas em tempo de execução estou colocando o fonte aqui:

var AUXEMP : Integer;
var DATAINI : String;
var DATAFIM : String;
var Contador : Integer;
begin
AUXEMP := codigoempresa;
DATAINI := FormatDateTime('dd.mm.yyyy',StrToDate(mkdataini.Text));
DATAFIM := FormatDateTime('dd.mm.yyyy',StrToDate(mkdatafim.Text));
dmVendas.cdsVendaPedidoBase.Close;
dmVendas.cdsVendaPedidoItem.Close;
VENDAPEDIDOITEM.IDPEDIDO where VENDAPEDIDOBASE.CODIGOEMPRESA = :AUXEMP and VENDAPEDIDOITEM.DATAENTREGA between :dataini and :datafim';
dmVendas.cdsVendaPedidoItem.CommandText := 'SELECT * from VENDAPEDIDOITEM inner join VENDAPEDIDOBASE on VENDAPEDIDOBASE.IDPEDIDOBASE = VENDAPEDIDOITEM.IDPEDIDO where VENDAPEDIDOBASE.CODIGOEMPRESA = :AUXEMP and VENDAPEDIDOITEM.DATAENTREGA between :DATAINI and :DATAFIM';
dmVendas.cdsVendaPedidoBase.Open;
dmVendas.cdsVendaPedidoItem.Open;
Responder

Gostei + 0

19/12/2014

Renato Rubinho

Veja se do jeito que você colocou se está mandando o parâmetro sem as aspas.
Se for isso, assim resolve:

DATAINI := QuotedStr(FormatDateTime('dd.mm.yyyy',StrToDate(mkdataini.Text)));


Ou, passando como parâmetro mesmo, pode passar direto como data:

dmVendas.cdsVendaPedidoItem.Params.ParamByName('DATAINI').AsDate := StrToDate(mkdataini.Text);


Abraççç,
rrubinho
Responder

Gostei + 0

19/12/2014

Carlos Cabral

Veja se do jeito que você colocou se está mandando o parâmetro sem as aspas.
Se for isso, assim resolve:

DATAINI := QuotedStr(FormatDateTime('dd.mm.yyyy',StrToDate(mkdataini.Text)));


Ou, passando como parâmetro mesmo, pode passar direto como data:

dmVendas.cdsVendaPedidoItem.Params.ParamByName('DATAINI').AsDate := StrToDate(mkdataini.Text);


Abraççç,
rrubinho


Ola Rubinho

O que esta acontecendo, não é problemas com as variaveis, mas sim, o comando esta vinculando a variavel criada como sendo da propria tabela quando na verdade não é, ai da o erro.

De repente eu estou fazendo muito errado. Nas minhas rotinas normais eu sempre uso o Params e ParamByName, para selecionar exatamente o item que quero. Essa é a primeira vez que tento colocar uma SELECT para 2 bases de uma vez. Tenho certeza que deve existir uma saida para esta situacao, só nao consegui me encontrar ainda. Também não sei se consegui explicar exatamente o porque preciso deste comando mediante as 2 tabelas que tenho. Mas acredito que deva existir uma forma, já que as 2 tabelas estão relacionadas entre si. Fico aguardando, muito obrigado.

Abraços

Cabral
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar