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

Consulta SQL


Eder

Pergunta

Bom Dia!

Pessoal, estou com problemas numa consulta que roda em cima do OnPrint de um QrLabel do Quireport, é um filtro verificador.

Funciona perfeito assim:

procedure TFormComAgencia.QrCom1Print(sender: TObject; var Value: String);

Var

vfrete, vfrete2, vTde, valorTDE : real;

begin

ValorTDE:=StrToFLoat(Query1TDE.AsString);

If (Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit1.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit2.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit3.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit4.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit5.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit6.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit7.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit8.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit9.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit10.text) and (ValorTDE >= 1.00) then

begin

Vfrete:=StrToFloat(Query1Valor_Frete.asstring);

VTDE:=StrToFloat(Query1TDE.asstring);

VFrete2:=(Vfrete - VTde);

PercVen := PercVenCapaNormal;

QrCom1.Font.Style:=[fsbold]+[fsitalic]+[fsunderline];

QrCom1.Font.Color:=clred;

Value:=FloatToStr((VFrete2 * percVen)/100);

Value := FormatFloat('#,###,##0.00',StrToFloat(Value));

end

else

begin

PercVen := PercVenCapaNormal;

QrCom1.Font.Style:=[];

QrCom1.Font.Color:=clblack;

Value:=FloatToStr((Query1Valor_Frete.asFloat * percVen)/100);

end;

SubTotal1:=SubTotal1 + StrToFloat(value);

Value := FormatFloat('#,###,##0.00',StrToFloat(Value));

end;

Só que não gostei desta parte abaixo pelo seguinte>

If (Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit1.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit2.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit3.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit4.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit5.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit6.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit7.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit8.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit9.text) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit10.text) and (ValorTDE >= 1.00) then

note que é10 campos, e eu não queria, eu gostaria que a verificação fom em cima de uma tabela aonde fosse gravados os registro de maneira infinita ou quase infinita, no caso acima esta no máximo 10 registros, ela é limitada.

Tentei substituir estes codigos acima por este:

If (Query1REMETENTE_Cnpj.AsString = QueryCliTdeCNPJ.AsString) and (ValorTDE >= 1.00) then

mas ele só valida o primeiro registro que gravei deste tabela CLITDE.DB.

alguém teria uma idéia de como fazer para não precisar usar aqueles monte de DbEdits? e tornar uma tabela infinita ou quase infinita.

uso Parafox.

Muito Grato

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

tente assim:

var i : Integer;
begin
   for i := 0 to ComponentCount -1 do
    begin
       if Components[i] is TDBEdit then
         begin
            If (Query1REMETENTE_Cnpj.AsString = FormClisp.TDBEdit(Components[i]).text) and (ValorTDE >= 1.00) then
               begin
                  Vfrete:=StrToFloat(Query1Valor_Frete.asstring);
                  VTDE:=StrToFloat(Query1TDE.asstring);
                  VFrete2:=(Vfrete - VTde);
                  PercVen := PercVenCapaNormal;
                  QrCom1.Font.Style:=[fsbold]+[fsitalic]+[fsunderline];
                  QrCom1.Font.Color:=clred;
                  Value:=FloatToStr((VFrete2 * percVen)/100);
                  Value := FormatFloat('#,###,##0.00',StrToFloat(Value));
               end
            else
               begin
                  PercVen := PercVenCapaNormal;
                  QrCom1.Font.Style:=[];
                  QrCom1.Font.Color:=clblack;
                  Value:=FloatToStr((Query1Valor_Frete.asFloat * percVen)/100);
               end;

            SubTotal1:=SubTotal1 + StrToFloat(value);
            Value := FormatFloat('#,###,##0.00',StrToFloat(Value));
         end;
    end;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
consulta que roda em cima do OnPrint de um QrLabel do Quireport

te dei uma sugestão usando o TComponent.Components

para que a rotina que esta no QR possa enxergar os componentes de seu form precisa algo mais

veja o exemplo do delphi

The following code sets the Datasource for a DBGrid component in Form2 to the currently selected data source in a list provided in Form1.  This allows users to specify the desired information in form1, and then move to Form2 to view the information.

procedure TForm2.FormActivate(Sender: TObject);

begin
  DBGrid1.DataSource := 
    Form1.ListBox1.Objects[Form1.ListBox1.ItemIndex] as TDataSource;

end;

Here is the code on Form1 that fills the list box:

procedure TForm1.FormCreate(Sender.TObject);

var
  integer I;
begin
  for I := 0 to DataModule2.ComponentCount - 1 do
  begin
    if (DataModule2.Components[I] is TDataSource) then
      ListBox1.Items.AddObject(DataModule2.Components[I].Name,
        DataModule2.Components[I] as TObject);
  end;

end;

OBS: veja se consegue entender o esquema ...

outra sugestão é fazer o controle externo e jogar o resultado no QR

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

o raciocinio é o seguinte

porque testar um valor referenciado num componente ( no caso o DbEdit ) quando voce pode testar o valor do campo na propria tabela ?

If (Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit1.text) and (ValorTDE >= 1.00) or

perceba que em cada DBedit existe um valor que corresponde a um campo de sua tabela e neste caso fica mais facil testar o proprio valor no campo na tabela do que testar o valor pela referencia do componente

experimente usar o sql builder do componente Query para montar e testar as suas queries, facilita muito o serviço

obs: clique com o botão direito do mouse sobre o componente TQuery e clique na opção SQL Builder...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
o raciocinio é o seguinte

porque testar um valor referenciado num componente ( no caso o DbEdit ) quando voce pode testar o valor do campo na propria tabela ?

QUOTE

If (Query1REMETENTE_Cnpj.AsString = FormClisp.DbEdit1.text) and (ValorTDE >= 1.00) or

perceba que em cada DBedit existe um valor que corresponde a um campo de sua tabela e neste caso fica mais facil testar o proprio valor no campo na tabela do que testar o valor pela referencia do componente

Ok, neste caso acima entendi, não sei porque não havia feito assim!!
If (Query1REMETENTE_Cnpj.AsString = FormClisp.QueryConsultaCNPJ1.AsString) and (ValorTDE >= 1.00) or

(Query1REMETENTE_Cnpj.AsString = FormClisp.QueryConsultaCNPJ2.AsString) and (ValorTDE >= 1.00) or

....................

experimente usar o sql builder do componente Query para montar e testar as suas queries, facilita muito o serviço

obs: clique com o botão direito do mouse sobre o componente TQuery e clique na opção SQL Builder...

R.: clikei com o lado direito do mouse mas não apareceu a opção SQL BUILDER, uso DELPHI 4 ainda!! deve ser por isto.

Mesmo assim, valeu das dicas.

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0
R.: clikei com o lado direito do mouse mas não apareceu a opção SQL BUILDER, uso DELPHI 4 ainda!! deve ser por isto.

deveria aparecer, pois no delphi 3, 5 e 7 aparece ... tenho tambem o delphi 4 mas não o utilizo, então não sei te dizer qual seria o problema

no entanto esses varios if pode ser reduzidos atraves de um For ou com mudança na lógica da pesquisa

abraço

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,3k
×
×
  • Criar Novo...