Select Firebird no Delphi7
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
Curtidas 0
Respostas
Renato Rubinho
10/12/2014
Buenos,
Segue exemplo de comando com join para o seu resultado:
Abraççç,
rrubinho
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
GOSTEI 0
Carlos Cabral
10/12/2014
Obrigado. Montei e deu certo. Valeu
GOSTEI 0
Carlos Cabral
10/12/2014
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;
GOSTEI 0
Carlos Cabral
10/12/2014
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;
GOSTEI 0
Carlos Cabral
10/12/2014
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;
GOSTEI 0
Renato Rubinho
10/12/2014
Veja se do jeito que você colocou se está mandando o parâmetro sem as aspas.
Se for isso, assim resolve:
Ou, passando como parâmetro mesmo, pode passar direto como data:
Abraççç,
rrubinho
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
GOSTEI 0
Carlos Cabral
10/12/2014
Veja se do jeito que você colocou se está mandando o parâmetro sem as aspas.
Se for isso, assim resolve:
Ou, passando como parâmetro mesmo, pode passar direto como data:
Abraççç,
rrubinho
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
GOSTEI 0