Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido)Ajuda com Busca de Dados


robinhocne

Pergunta

Agora deu nó na minha cabeça.....as vezes seja a hora.....

Bom não estou conseguindo saber resolver......

Tenho duas Tabelas (Adm_Proced_Formularios) onde fica gravado o procedimento para o determinado formulário e tenho a tabela (Adm_Proced_Empresa) que são a liberação do procedimento que está no Adm_Proced_Formularios por empresa.

Ai to tentando fazer uma consulta nele assim....pegando o que tenho no Adm_Proced_Formularios filtrando somente de um formulario e empresa e fazendo um Inner Join com o Adm_Proced_Empresa, porque ai caso não tenha nesse o valor na coluna EpdValor do Adm_Proced_Empresa eu pego do campo PrfValor da tabela Adm_Proced_Formularios, porem mesmo eu colocando um filtro para pegar só daquele formulario e da empresa mostra tudo.....

aglém pode dar uma ajuda ?

o codigo que estava tentando é esse abaixo

Formulario := 'PESCAD001';

with Dtm.QryProcedimentos do
    begin
      close;
      sql.Clear;
      sql.Add('Select F.ProCodigo, F.PrfValor, F.PrfProcedimento, F.PrfFormulario, E.ProCodigo, E.EpdValor, E.EmpCodigo');
      sql.Add(' From Adm_Proced_Formularios F left Outer Join Adm_Proced_Empresa E ON F.ProCodigo = E.ProCodigo and');
      sql.Add('  F.PrfFormulario =:For and E.EmpCodigo =:Emp');
      ParamByName('For').AsString := Formulario;
      ParamByName('Emp').AsString := PRI_EmpCodigo;
      open;
    end;
o resultado traz assim
PROCODIGO    PRFVALOR  PRFPROCEDIMENTO      PRFFORMULARIO  PROCODIGO1    EPDVALOR  EMPCODIGO
           12                P          PRO_PES_TP_PRODUTO   PROPES001
           15                1          PRD_PRECO_PADRAO      PROPES001
           13                1          ADM_PAIS_PADRAO        INNCAD004
           17                            PRD_ESPECIE_PADRAO    PROCAD001
           18                N          ADM_EMPRESA_LOGADA   PROCAD001
           16              R;D        PRD_MOEDA_PADRAO     PROCAD001
           20                            PRD_EMPRESAS_PRD     PROPES001
           19              300       PRD_QTD_CARACT_DESC_ETIQ  PROCAD001
           21                            PRD_SEQ_CODBARRA     PROCAD001
            1               CLI       PES_TP_CAD_PESSOA       PESCAD001                 1                      1
            2                N         PES_OBG_DOCUMENTO     PESCAD001
            3                N         PES_OBG_CPF                  PESCAD001                 3                       S                   1
            4                N         PES_OBG_CNPJ                 PESCAD001
            5                N         PES_OBG_IE_REG             PESCAD001
            6                N         PES_OBG_END                  PESCAD001
           13                1         ADM_PAIS_PADRAO         PESCAD001                13                        1                   1
            7                 S         PRO_CON_TAM_COR        PROCAD001
            8                 S         PRO_BLOQ_TP_PRODUTO  PROCAD001
            9                N         PRO_FAT_SEM_ESTOQUE    PROCAD001
           10               Q         PRO_CON_QTD_METROS    PROCAD001
           11               P         PRO_TP_PRODUTO             PROCAD001
           12               P         PRO_PES_TP_PRODUTO      PROCAD001
e tinha que trazer assim
PROCODIGO    PRFVALOR  PRFPROCEDIMENTO      PRFFORMULARIO  PROCODIGO1    EPDVALOR  EMPCODIGO
            1                 CLI       PES_TP_CAD_PESSOA    PESCAD001                 1                      1
            2                  N         PES_OBG_DOCUMENTO  PESCAD001
            3                  N         PES_OBG_CPF               PESCAD001                 3                      S                   1
            4                  N         PES_OBG_CNPJ             PESCAD001
            5                  N         PES_OBG_IE_REG          PESCAD001
            6                  N         PES_OBG_END               PESCAD001
           13                 1         ADM_PAIS_PADRAO        PESCAD001                13                      1                   1

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
O select deve conter apenas os campos que voce deseja visualizar de uma ou outra tabela

abraço

Mas esses campos:

Select F.ProCodigo, F.PrfValor, F.PrfProcedimento, F.PrfFormulario, E.ProCodigo, E.EpdValor, E.EmpCodigo
eu preciso ver, só não estou conseguindo entender porq não respeita o filtro
sql.Add('  F.PrfFormulario =:For....');
      ParamByName('For').AsString := Formulario;

Link para o comentário
Compartilhar em outros sites

  • 0
pelo que percebi, o seu filtro não esta trazendo nenhum valor duplicado na linha, então o filtro esta correto.

está sim.....

Formulario := 'PESCAD001'; // Só Busca os Procedimentos do PESCAD001

with Dtm.QryProcedimentos do
    begin
      close;
      sql.Clear;
      sql.Add('Select F.ProCodigo, F.PrfValor, F.PrfProcedimento, F.PrfFormulario, E.ProCodigo, E.EpdValor, E.EmpCodigo');
      sql.Add(' From Adm_Proced_Formularios F left Outer Join Adm_Proced_Empresa E ON F.ProCodigo = E.ProCodigo and');
      sql.Add('  F.PrfFormulario =:For and E.EmpCodigo =:Emp');
      ParamByName('For').AsString := Formulario; << formulario só PESCAD001
      ParamByName('Emp').AsString := PRI_EmpCodigo; << Empresa Logada
      open;
    end;
e traz...
PROCODIGO    PRFVALOR  PRFPROCEDIMENTO      PRFFORMULARIO  PROCODIGO1    EPDVALOR  EMPCODIGO
           12                P          PRO_PES_TP_PRODUTO   PROPES001 << não é para trazer
           15                1          PRD_PRECO_PADRAO      PROPES001<< não é para trazer
           13                1          ADM_PAIS_PADRAO        INNCAD004<< não é para trazer
           17                            PRD_ESPECIE_PADRAO    PROCAD001<< não é para trazer
           18                N          ADM_EMPRESA_LOGADA   PROCAD001<< não é para trazer
           16              R;D        PRD_MOEDA_PADRAO     PROCAD001<< não é para trazer
           20                            PRD_EMPRESAS_PRD     PROPES001<< não é para trazer
           19              300       PRD_QTD_CARACT_DESC_ETIQ  PROCAD001<< não é para trazer
           21                            PRD_SEQ_CODBARRA     PROCAD001<< não é para trazer
            1               CLI       PES_TP_CAD_PESSOA       PESCAD001                 1                      1
            2                N         PES_OBG_DOCUMENTO     PESCAD001
            3                N         PES_OBG_CPF                  PESCAD001                 3                       S                   1
            4                N         PES_OBG_CNPJ                 PESCAD001
            5                N         PES_OBG_IE_REG             PESCAD001
            6                N         PES_OBG_END                  PESCAD001
           13                1         ADM_PAIS_PADRAO         PESCAD001                13                        1                   1
            7                 S         PRO_CON_TAM_COR        PROCAD001<< não é para trazer
................................
tem que trazer assim....só do PESCAD001
PROCODIGO    PRFVALOR  PRFPROCEDIMENTO      PRFFORMULARIO  PROCODIGO1    EPDVALOR  EMPCODIGO
            1                 CLI       PES_TP_CAD_PESSOA    PESCAD001                 1                      1
            2                  N         PES_OBG_DOCUMENTO  PESCAD001
            3                  N         PES_OBG_CPF               PESCAD001                 3                      S                   1
            4                  N         PES_OBG_CNPJ             PESCAD001
            5                  N         PES_OBG_IE_REG          PESCAD001
            6                  N         PES_OBG_END               PESCAD001
           13                 1         ADM_PAIS_PADRAO        PESCAD001                13                      1                   1

Link para o comentário
Compartilhar em outros sites

  • 0
então restrinja ainda mais o filtro

exemplo:

sql.Add(' F.PrfFormulario =:For and E.EmpCodigo =:Emp and PROCODIGO1 = PESCAD001');

abraço

Consegui resolver........ufa......

ficou assim:

with Dtm.QryProcedimentos do
    begin
      close;
      sql.Clear;
      sql.Add('Select F.ProCodigo, F.PrfValor, F.PrfProcedimento, F.PrfFormulario, E.ProCodigo, E.EpdValor, E.EmpCodigo');
      sql.Add(' From Adm_Proced_Formularios F left Outer Join Adm_Proced_Empresa E ON F.ProCodigo = E.ProCodigo  and E.EmpCodigo =:Emp');
      sql.Add(' where F.PrfFormulario =:For');
      ParamByName('For').AsString := Formulario;
      ParamByName('Emp').AsString := PRI_EmpCodigo;
      open;
    end;
valeu Jhonas pela ajuda Só Mais uma pergunta..........Queria saber qual processo pesa mais ? Eu consegui fazer essa consulta de duas maneiras....... 1ª Coloquei uma tabela temporária no DataModule e ai quando eu entrou no formulario pesquiso os Procedimentos e coloco na tabela temporaria, mas para que eu possa pesquisar o procedimento eu usei o Locate na Tabela temporária, abaixo como fica:
procedure TFPesCad001.Procedimentos;
begin

  Formulario := 'PESCAD001';

    with Dtm.QryProcedimentos do
    begin
      close;
      sql.Clear;
      sql.Add('Select F.ProCodigo, F.PrfValor, F.PrfProcedimento, F.PrfFormulario, E.ProCodigo, E.EpdValor, E.EmpCodigo');
      sql.Add(' From Adm_Proced_Formularios F left Outer Join Adm_Proced_Empresa E ON F.ProCodigo = E.ProCodigo  and E.EmpCodigo =:Emp');
      sql.Add(' where F.PrfFormulario =:For');
      ParamByName('For').AsString := Formulario;
      ParamByName('Emp').AsString := PRI_EmpCodigo;
      open;
    end;

  Dtm.TblProced.Close;
  Dtm.TblProced.Active := true;

  while not Dtm.QryProcedimentos.Eof do
    begin

      with Dtm.TblProced do
        begin
          insert;
          Dtm.TblProcedProCodigo.AsString    := Dtm.QryProcedimentos.FieldByName('ProCodigo').AsString;
          Dtm.TblProcedProcedimento.AsString := Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString;
          Dtm.TblProcedEmpresa.AsString      := Dtm.QryProcedimentos.FieldByName('EmpCodigo').AsString;
          Dtm.TblProcedPrfValor.AsString     := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
          Dtm.TblProcedEpdValor.AsString     := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
          post;
        end;

      Dtm.QryProcedimentos.Next;
    end;


  if Dtm.TblProced.Locate('Procedimento','PES_TP_CAD_PESSOA',[loPartialKey]) then
    begin
      if Dtm.TblProcedEpdValor.AsString <> '' then
        begin
          PES_TP_CAD_PESSOA := Dtm.TblProcedEpdValor.AsString;
        end
        else
        begin
          PES_TP_CAD_PESSOA := Dtm.TblProcedPrfValor.AsString;
        end;
    end;

  if Dtm.TblProced.Locate('Procedimento','PES_OBG_DOCUMENTO',[loPartialKey]) then
    begin
      if Dtm.TblProcedEpdValor.AsString <> '' then
        begin
          PES_OBG_DOCUMENTO := Dtm.TblProcedEpdValor.AsString;
        end
        else
        begin
          PES_OBG_DOCUMENTO := Dtm.TblProcedPrfValor.AsString;
        end;
    end;

  if Dtm.TblProced.Locate('Procedimento','PES_OBG_CPF',[loPartialKey]) then
    begin
      if Dtm.TblProcedEpdValor.AsString <> '' then
        begin
          PES_OBG_CPF := Dtm.TblProcedEpdValor.AsString;
        end
        else
        begin
          PES_OBG_CPF := Dtm.TblProcedPrfValor.AsString;
        end;
    end;


  if Dtm.TblProced.Locate('Procedimento','PES_OBG_CNPJ',[loPartialKey]) then
    begin
      if Dtm.TblProcedEpdValor.AsString <> '' then
        begin
          PES_OBG_CNPJ := Dtm.TblProcedEpdValor.AsString;
        end
        else
        begin
          PES_OBG_CNPJ := Dtm.TblProcedPrfValor.AsString;
        end;
    end;


  if Dtm.TblProced.Locate('Procedimento','PES_OBG_IE_REG',[loPartialKey]) then
    begin
      if Dtm.TblProcedEpdValor.AsString <> '' then
        begin
          PES_OBG_IE_REG := Dtm.TblProcedEpdValor.AsString;
        end
        else
        begin
          PES_OBG_IE_REG := Dtm.TblProcedPrfValor.AsString;
        end;
    end; 

  if Dtm.TblProced.Locate('Procedimento','PES_OBG_END',[loPartialKey]) then
    begin
      if Dtm.TblProcedEpdValor.AsString <> '' then
        begin
          PES_OBG_END := Dtm.TblProcedEpdValor.AsString;
        end
        else
        begin
          PES_OBG_END := Dtm.TblProcedPrfValor.AsString;
        end;
    end;

  if Dtm.TblProced.Locate('Procedimento','ADM_PAIS_PADRAO',[loPartialKey]) then
    begin
      if Dtm.TblProcedEpdValor.AsString <> '' then
        begin
          ADM_PAIS_PADRAO := Dtm.TblProcedEpdValor.AsString;
        end
        else
        begin
          ADM_PAIS_PADRAO := Dtm.TblProcedPrfValor.AsString;
        end;
    end;


end;
ou dessa maneira que deixei em outro formulario, pesquiso os procedimentos e verifico linha a linha do resultando dentro do while para pegar o resultado do PrfValor(Padrão) ou EpdValor(Configurado).
procedure TFProCad001.Procedimentos;
begin

  Formulario := 'PROCAD001';


  with Dtm.QryProcedimentos do
    begin
      close;
      sql.Clear;
      sql.Add('Select * From Adm_Proced_Formularios PF, Adm_Proced_Empresa PE where PF.ProCodigo = PE.ProCodigo');
      sql.Add('and PE.EmpCodigo =:Emp and PF.PrfFormulario =:For');
      ParamByName('Emp').AsString := PRI_EmpCodigo;
      ParamByName('For').AsString := Formulario;
      open;
    end;


  while not Dtm.QryProcedimentos.Eof do
    begin

      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRO_FAT_SEM_ESTOQUE' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRO_FAT_SEM_ESTOQUE := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              PRO_FAT_SEM_ESTOQUE := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRO_CON_QTD_METROS' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRO_CON_QTD_METROS := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              PRO_CON_QTD_METROS := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRO_TP_PRODUTO' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRO_TP_PRODUTO := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              PRO_TP_PRODUTO := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRO_BLOQ_TP_PRODUTO' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRO_BLOQ_TP_PRODUTO := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              PRO_BLOQ_TP_PRODUTO := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRD_MOEDA_PADRAO' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRD_MOEDA_PADRAO := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              MoedaPadrao      := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
              PRD_MOEDA_PADRAO := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;


        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRD_ESPECIE_PADRAO' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRD_ESPECIE_PADRAO := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              PRD_ESPECIE_PADRAO := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'ADM_EMPRESA_LOGADA' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              ADM_EMPRESA_LOGADA := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              ADM_EMPRESA_LOGADA := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRD_QTD_CARACT_DESC_ETIQ' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRD_QTD_CARACT_DESC_ETIQ := Dtm.QryProcedimentos.FieldByName('PrfValor').AsInteger;
            end
            else
            begin
              PRD_QTD_CARACT_DESC_ETIQ := Dtm.QryProcedimentos.FieldByName('EpdValor').AsInteger;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRD_EMPRESA_PRD' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRD_EMPRESA_PRD := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              PRD_EMPRESA_PRD := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end
        else
      if Dtm.QryProcedimentos.FieldByName('PrfProcedimento').AsString = 'PRD_SEQ_CODBARRA' then
        begin

          if Dtm.QryProcedimentos.FieldByName('EpdValor').AsString = '' then
            begin
              PRD_SEQ_CODBARRA := Dtm.QryProcedimentos.FieldByName('PrfValor').AsString;
            end
            else
            begin
              PRD_SEQ_CODBARRA := Dtm.QryProcedimentos.FieldByName('EpdValor').AsString;
            end;

        end;

      Dtm.QryProcedimentos.Next;
    end;

   Dtm.QryProcedimentos.Close;

end;

Qual fica melhor para usar no sistema em questão de desempenho ou de travar ?

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...