Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
Eder

Consulta Cnpj Raiz

Question

Ola Boa noite

não estou conseguindo rodar esta consulta retorna todos os campos da tabela e não filtra O cnpj raiz cadastrado na tabela CLIDIFE.CNPJ_CPF_RAIZ

SELECT * FROM CTRCT, CLIDIFE
WHERE (CTRCT.DEST_CNPJ LIKE CLIDIFE.CNPJ_CPF_RAIZ+'%')       //CLIDIFE.CNPJ_CPF_RAIZ ARMAZENA CNPJ RAIZ
ORDER BY CTRCT.NUMERO_CTRC

mas se eu faço desta forma funciona perfeitamente:

SELECT * FROM CTRCT
WHERE CTRCT.DEST_CNPJ LIKE '53.258.117'+'%'
ORDER BY NUMERO_CTRC

estou usando o comando errado?? tentei like = mas nada..

Obrigado,

 

Edited by Eder

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 0

ERRO:

SELECT * FROM CTRCT, CLIDIFE
WHERE (CTRCT.DEST_CNPJ LIKE CLIDIFE.CNPJ_CPF_RAIZ+'%')       //CLIDIFE.CNPJ_CPF_RAIZ ARMAZENA CNPJ RAIZ
ORDER BY CTRCT.NUMERO_CTRC

OBS: Voce esta usando um campo da sua propria tabela que não terá valor algum quando o Select for executado

==========================================================

mas se eu faço desta forma funciona perfeitamente:

SELECT * FROM CTRCT
WHERE CTRCT.DEST_CNPJ LIKE '53.258.117'+'%'
ORDER BY NUMERO_CTRC

Veja que voce usou apostrofes para separar o numero ( string ) , então se no lugar do numero voce quer usar uma variavel ou um parametro, deve ser feito a mesma coisa.

======================================================

usando uma variável que receberá o valor do numero

CNPJ : string;

CNPJ := '53.258.117'

'SELECT * FROM CTRCT
WHERE CTRCT.DEST_CNPJ LIKE  '+ ''''+ CNPJ + '''' + '%'
ORDER BY NUMERO_CTRC

usando um parametro que receberá o valor do numero

'SELECT * FROM CTRCT
WHERE CTRCT.DEST_CNPJ LIKE  :CNPJ  '+ '%'
ORDER BY NUMERO_CTRC

Obs: Se voce usar parametro, o mesmo deve estar definido no componente ( TQuery ou ClientDataSet )  e deve receber o valor antes de executar o Select

abraço

 

 

Share this post


Link to post
Share on other sites
  • 0

Ola, Jonas, Boa Tarde, Obrigado por ajudar

fiz um pequeno deste mas não funcionou, veja

procedure TForm1.Button1Click(Sender: TObject);
var
Txt1, CNPJ : string;
begin
CNPJ := '53.258.117';
Query1Cnpj.AsString:=Cnpj;
Txt1 := 'SELECT * FROM CTRCT WHERE CTRCT.DEST_CNPJ LIKE :cnpj+"%"';
   Query1.Close;
   Query1.SQL.Text := Txt1;
   Query1.Open;
end;

erro: query1 dataset not in edit or insert mod😉

Share this post


Link to post
Share on other sites
  • 0

O erro é que o dataset não está em modo de edição ou inserção.

voce não pode fazer isso

Query1Cnpj.AsString:=Cnpj;
procedure TForm1.Button1Click(Sender: TObject);
var
Txt1, CNPJ : string;
begin
   CNPJ := '53.258.117';

   Query1.Close;
   Txt1 := 'SELECT * FROM CTRCT WHERE CTRCT.DEST_CNPJ LIKE :cnpj+"%"';
   Query1.SQL.Clear;
   Query1.SQL.Text := Txt1;
   Query1.Open;
end;

Obs: Faça o teste e poste o resultado

abraço

Share this post


Link to post
Share on other sites
  • 0

verdade...fiz o exemplo mas deu erro: image.png.99d90a97638232df6b48171b51787493.png


Mas Jonas o que eu precisava não é bem isto que você deve estar achando e sim trazer todos os dados da tabela Ctrct.DB a qual foi  cadastrado o cnpj raiz na tabela Clidife.
Tipo na CtrcT.db esta assim cadastrado o cnpj 77.777.777/0001-00 e na tabela Clidife.db assim 77.777.777 somente
como esta abaixo porem logico não da certo.

CTRCT.DEST_CNPJ LIKE CLIDIFE.CNPJ_CPF_RAIZ+'%'

Share this post


Link to post
Share on other sites
  • 0

Tente assim

procedure TForm1.Button1Click(Sender: TObject);
var
Txt1, CNPJ : string;
begin
   CNPJ := '53.258.117';

   Query1.Active := false;;
   Txt1 := 'SELECT * FROM CTRCT WHERE CTRCT.DEST_CNPJ LIKE :cnp';
   Query1.SQL.Clear;
   Query1.SQL.Text := Txt1;
   Query1.Params(0).AsString := CNPJ + '%'; 
   Query1.Active := true;
end;

OBS: voce definiu o parametro ( cnp ) tipo string no componente Query ?

 

Share this post


Link to post
Share on other sites
  • 0

Ok Jonas deu certo:

procedure TForm1.Button1Click(Sender: TObject);
var
Txt1, vCNPJ : string;
begin
   vCNPJ := '53.258.117';
   Query1.Active := false;;
   Txt1 := 'SELECT * FROM CTRCT WHERE CTRCT.DEST_CNPJ LIKE :Pcnp';
   Query1.SQL.Clear;
   Query1.SQL.Text := Txt1;
   Query1.ParamByName('Pcnp').AsString := vCNPJ + '%';
   Query1.Active := true;
end;

Mas ai voltei naquela situação que comentei ali em cima e baixo agora, como buscar a informação da tabela CLIDIFE aonde esta cadastradas os cnpj raiz?

" trazer todos os dados da tabela Ctrct.DB a qual foi  cadastrado o cnpj raiz na tabela Clidife.
Tipo na CtrcT.db esta assim cadastrado o cnpj 77.777.777/0001-00 e na tabela Clidife.db assim 77.777.777 somente
como esta abaixo porem lógico não da certo."

CTRCT.DEST_CNPJ LIKE CLIDIFE.CNPJ_CPF_RAIZ+'%'

Share this post


Link to post
Share on other sites
  • 0

Tente dessa maneira

procedure TForm1.Button1Click(Sender: TObject);
var
Txt1, vCNPJ : string;
begin
   vCNPJ := '53.258.117';
   Query1.Active := false;;
   Txt1 := 'SELECT * FROM CTRCT WHERE CTRCT.DEST_CNPJ LIKE :Pcnp';
   Query1.SQL.Clear;
   Query1.SQL.Text := Txt1;
   Query1.ParamByName('Pcnp').AsString := '%' + vCNPJ;
   Query1.Active := true;
end;

Obs: Dessa maneira voce vai inverter a busca pelos primeiros numeros do CNPJ

E se voce quiser buscar outros valores, faça isso:

vCNPJ := Edit1.Text

Dessa maneira, joga o CNPJ em um Edit, e passa o valor para a variavel  vCNPJ

exemplo: se voce digitar somente o numero 7, a busca na tabela será em cima de todos os CNPJs que começam com o numero 7

--------------------------------------------------------------

trazer todos os dados da tabela Ctrct.DB a qual foi  cadastrado o cnpj raiz na tabela Clidife.
Tipo na CtrcT.db esta assim cadastrado o cnpj 77.777.777/0001-00 e na tabela Clidife.db assim 77.777.777 somente

Não sei porque voce está usando 2 tabelas com os mesmos dados ( duplicidade de informação ).... voce pode buscar os CNPJs pelos numeros iniciais e se não quiser o valor restante depois da barra, voce pode tirar

abraço

Share this post


Link to post
Share on other sites
  • 0

Jonas, respondendo a sua pergunta até para você entender, talvez foi erro meu não ter colocado:

trazer todos os dados da tabela Ctrct.DB a qual foi  cadastrado o cnpj raiz na tabela Clidife.
Tipo na CtrcT.db esta assim cadastrado o cnpj 77.777.777/0001-00 e na tabela Clidife.db assim 77.777.777 somente

sua resposta: Não sei porque voce está usando 2 tabelas com os mesmos dados ( duplicidade de informação ).... voce pode buscar os CNPJs pelos numeros iniciais e se não quiser o valor restante depois da barra, voce pode tirar

explicação:

criei outra tabela justamente CLIDIFE.db PARA dizer que aqueles clientes cadastrados com cnpj raiz são para gerar uma condição tipo pagar um percentual de comissão diferenciado, inclusive nesta tabela tem o campo: CNPJ_CPF_RAIZ, PERCENTUAL etc...
cada cnpj raiz cadastrado e o percentual diferenciado para cada um deles cadastrado, então na consulta na tabela CTRCT-DB faz a busca de todos os faturamentos por cliente analisando os cnpj_cif_raiz cadastrado na tabela CLIDIFE.db

Não sei se fui claro, mas este é o objetivo principal e explicação de ter duas tabelas e fazer esta consulta, não sei se fui claro.

Poderia até usar a sua dica acima, mas toda vez que precisaria pagar uma condição especial para um cnpj_raiz teria que alterar o código fonte, assim para facilitar criei a tabela clidife.db e ai o próprio usuário cadastra nela os cnpj_raiz sem precisar que  eu altere o código.

se tiver uma ideia de como fazer ...

Obrigado, Eder


 

Share this post


Link to post
Share on other sites
  • 0

Poderia até usar a sua dica acima, mas toda vez que precisaria pagar uma condição especial para um cnpj_raiz teria que alterar o código fonte, assim para facilitar criei a tabela clidife.db e ai o próprio usuário cadastra nela os cnpj_raiz sem precisar que  eu altere o código.

então na consulta na tabela CTRCT-DB faz a busca de todos os faturamentos por cliente analisando os cnpj_cif_raiz cadastrado na tabela CLIDIFE.db

se tiver uma ideia de como fazer ...

amigo, para facilitar, voce pode criar um campo a mais na sua tabela ( CTRCT ), que passaria a ser o seu controle ( condição especial ) ... aí no seu select bastaria apenas voce informar o valor desse controle para trazer todos os CNPJs nessa condição e pronto. ( Isso vai fazer voce eliminar boa parte do código )

Voce pode fazer o que está querendo, usando apenas uma tabela...basta apenas criar campos de controle.

Se o seu programa já está rodando em algum lugar, voce pode implementar um código ( em algum lugar do programa ... tipo no evento OnDblClick de um Label para que o usuário clique nele apenas uma unica vez para alterar a tabela ) para adicionar os campos que voce quer na sua tabela, sem alterar os dados existentes que estão nela. Depois voce modifica o seu código fonte e pouca coisa no seu formulário e envia o executável para o seu cliente.

Isso pode até dar um pouco de trabalho, mas no fim compensa.

abraço

 

Share this post


Link to post
Share on other sites
  • 0

Ok. Jonas, na próxima semana vou pensar nisto então.
Obrigado pelas dicas.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148593
    • Total Posts
      644162
×
×
  • Create New...