A onde esta o erro neste bloco?

Delphi

26/07/2011

Pessoal, alguém consegue localizar neste bloco aqui, o pq quando seleciono o checked "RbVendaCliente" faz o update certinho, mais quando cai nesta condição
"RbVendaProfissional" por mais que ja debuguei, olhei a instrução do Update, verifiquei o campo, quando entra nesta condição ai, atualiza os dois campos
"PRECO_DE_VENDA" e o "PRECO_PARA_REVENDA", aonde deveria apenas atualizar o campo "PRECO_PARA_REVENDA"

procedure TF_Ajuste_Preco.ConfirmarPrecos;
  function GetExecuteUpdate(sTable, sField: String): String;
  begin
    Result := ' UPDATE '+ sTable +' SET '+ sField +' = '
  end;
begin
  if CdsAtualiza.Active then
  begin
    Screen.Cursor := crHourGlass;
    PrBar.Max      := CdsAtualiza.RecordCount;
    PrBar.Position := 0;
    try
      CdsAtualiza.DisableControls;
      CdsAtualiza.First;
      if not  IBTrUpDate.InTransaction then
        IBTrUpDate.StartTransaction;
      DecimalSeparator := '.';
      while not CdsAtualiza.Eof do
      begin       
        if CdsAtualizaIC_NOVO_VALOR.Ascurrency <> 0 then
        begin
          IbUpdate.Close;          
          if RbVendaCliente.Checked then
          begin
            if RbProdutos.checked then
              IbUpDate.SQL.Text := GetExecuteUpdate('PRODUTOS','PRECO_DE_VENDA')    +
                QuotedStr(FormatFloat('#0.00',CdsAtualizaIC_NOVO_VALOR.AsCurrency)) +
                ' where CODIGO = '+QuotedStr(CdsAtualizaCODIGO.AsString)+''
            else
            if RbServicos.Checked then
              IbUpDate.SQL.Text := GetExecuteUpdate('SERVICOS','PRECO_DE_VENDA')    +
                QuotedStr(FormatFloat('#0.00',CdsAtualizaIC_NOVO_VALOR.AsCurrency)) +
                ' where CODIGO = '+QuotedStr(CdsAtualizaCODIGO.AsString)+''            
          end
          else
          if RbVendaProfissional.Checked then
          begin
            if RbProdutos.checked then
              IbUpDate.SQL.Text := GetExecuteUpdate('PRODUTOS','PRECO_PARA_REVENDA') +
                QuotedStr(FormatFloat('#0.00',CdsAtualizaIC_NOVO_VALOR.AsCurrency))  +
                ' where CODIGO = '+QuotedStr(CdsAtualizaCODIGO.AsString)+''
            else
            if RbServicos.Checked then
              IbUpDate.SQL.Text := GetExecuteUpdate('SERVICOS','PRECO_PARA_REVENDA') +
                QuotedStr(FormatFloat('#0.00',CdsAtualizaIC_NOVO_VALOR.AsCurrency))  +
                ' where CODIGO = '+QuotedStr(CdsAtualizaCODIGO.AsString)+''
          end;

          IbUpDate.ExecSQL;
        end;        
        CdsAtualiza.Next;
        PrBar.Position := PrBar.Position +1;
      end;
      CdsAtualiza.EnableControls;
      IBTrUpDate.Commit;
      Screen.Cursor := CrDefault;
      Confirmou := True;
      Limpar;
    except
      begin
        IBTrUpDate.Rollback;
        Screen.Cursor := CrDefault;
        Confirmou := true;
      end;
    end;
  end;
  PrBar.Position := 0;
  DecimalSeparator := ',';
end;


Obrigado
Adriano Dolce

Adriano Dolce

Curtidas 0

Respostas

Adriano Dolce

Adriano Dolce

26/07/2011

Achei o problema, é uma trigger que esta disparando aqui

Mais como arrumo esta trigger para ela funcionar de acordo com o que selecionar

CREATE TRIGGER AJUSTE_PRECO_HISTORICO_AI FOR AJUSTE_PRECO_HISTORICO
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN

  IF (NEW.TIPO_PEDIDO = 'Serviço') THEN
  BEGIN
    UPDATE SERVICOS
       SET PRECO_DE_VENDA = NEW.VALOR_POSTERIOR
     WHERE CODIGO = NEW.CODIGO_PEDIDO;
  END
  ELSE
  IF (NEW.TIPO_PEDIDO = 'Produto') THEN
  BEGIN
    UPDATE PRODUTOS
       SET PRECO_DE_VENDA = NEW.VALOR_POSTERIOR
     WHERE CODIGO = NEW.CODIGO_PEDIDO;
  END
  ELSE
  IF (NEW.TIPO_PEDIDO = 'Pacotes') THEN
  BEGIN
    UPDATE ESTETICA_PACOTES
       SET PRECO_DE_VENDA = NEW.VALOR_POSTERIOR
     WHERE CODIGO = NEW.CODIGO_PEDIDO;
  END

END


Uso firebird 1.5

Obrigado
GOSTEI 0
Adriano Dolce

Adriano Dolce

26/07/2011

Esquece pessoal, ja resolvi, criando um novo campo na tabela Historico aonde posso criar mais uma condição no IF

Obrigado a todos.
GOSTEI 0
POSTAR