PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Não consigo pensar. Onde está o erro? #51270

09/06/2005

0

Amigos, tenho a seguinte procedure que varre o banco de dados atrás de especificações de um código do tipo, começando pelo número 2000, ex.: 000-AA-2000.
O problema é que não estou conseguindo preencher o grid com esta busca.

procedure TFrmFormulaOper.txtCodigoKeyPress(Sender: TObject;
  var Key: Char);

var i, vSeq, vQtde : Integer;
    SiglaCor       : String;
    //vCustoTemp : Currency;

begin

     // Testa se o usuario teclou ENTER.
     // Caso positivo, verifica se comprimento do código é 5 ou 9
     // Caso seja 5, é formula nova, buscar a proxima sequencia e completa o código
     // Em seguida, verifica se a fórmula existe.
     // - Caso exista, busca a revisao atual e respectivos valores
     // - Caso nao exista, marca revisao 1 e coloca valores padrão

     If Key = #13 then begin

       // Limpa a tela
       LimpaTela;

       // Habilita o menu de validação atual. Se for produto novo (5 caracteres),
       // ele será desabilitado, pois não existe produto atual, mesmo da revisão 1.
       mnuValidarAtual.Enabled := True;

       // Caso o código tenha 5 caracteres, devemos verificar a
       // primeira lacuna existente para o sequencial
       If Length(txtCodigo.Text) = 5 then begin

         // Se é produto novo, desabilita todas as validações
         // A validação atual será liberada após preencher a composição
         //mnuValidar.Enabled := False;
         mnuValidarAtual.Enabled := False;

         // Buscar sequencia da fórmula. O valor inicial é 1
         vSeq     := 1;
         with dm.qryGeral do begin
           SQL.Clear;
           SQL.Add(´SELECT COD_FORMULA FROM VW_COD_FORMULA_FORM_TEMP´);
           SQL.Add(´WHERE  SUBSTRING(COD_FORMULA,1,5) = ´´´ + txtCodigo.Text + ´´´´);
           SQL.Add(´ORDER  BY COD_FORMULA´);
           Open;
           // Caso não haja nenhum valor, ficará 1
           // Caso haja valor, faz um loop de 1 até o valor máximo
           // para descobrir se existe alguma lacuna
           If RecordCount > 0 then begin
             If Copy(FieldByName(´COD_FORMULA´).AsString,6,3) = ´2000´ then
               Next;
             Repeat
               If StrToInt(Copy(FieldByName(´COD_FORMULA´).AsString,6,3)) <> vSeq then
                 Break;
               Inc(vSeq);
               Next;
             Until Eof;
           end;

           // Une o texto com a sequencia para completar o código
           txtCodigo.Text := txtCodigo.Text + Right(´200´+IntToStr(vSeq),4);
         end;

       end;

       // Verifica se txtCodigo tem 8 caracteres,
       // Caso contrário, sai da função
       If Length(txtCodigo.Text) <> 9 then begin
         MessageBeep(MB_ICONERROR);
         txtCodigo.Text := ´´;
         txtCodigo.SetFocus;
         Exit;
       end;

       vCodigo := txtCodigo.Text;

       // Verifica na tabela FORMULA se esta fórmula existe
       // Caso não exista, preenche campos com os dados padrão
       // Caso exista, busca a revisao ativa e preeenche os campos
       with dm.qryGeral do begin
         SQL.Clear;
         SQL.Add(´SELECT COD_FORMULA FROM FORMULA´);
         SQL.Add(´WHERE COD_FORMULA = ´´´ + txtCodigo.Text + ´´´´);
         Open;
         vQtde := RecordCount;
       end;

       If vQtde = 0 then

         // Não existe a fórmula, coloca valores padrão
         with dm.qryGeral do begin

           // Preenche a data de hoje
           lblData.Caption := FormatDateTime(´dd/mm/yyyy´,dm.Hoje);

           // Formula nova é sempre revisão 1
           vRevisao := 1;

           // Preenche cboRevisao com a revisao 1
           with cboRevisao do begin
             Items.Add(´1´);
             ItemIndex := 0;
           end;

           // Preenche o campo Linha
           SQL.Clear;
           SQL.Add(´SELECT COD_LINHA,DESCRICAO FROM LINHA´);
           SQL.Add(´WHERE  COD_LINHA = ´ + Copy(vCodigo,1,3));
           Open;
           lblLinha.Caption := Right(´000´ + FieldByName(´COD_LINHA´).AsString,4)
                                  + ´ - ´ +  FieldByName(´DESCRICAO´).AsString;
           Close;

           // Preenche o campo Cor
           SiglaCor := Copy(vCodigo,4,2);

           // SO precisa ser verificado se é Solferino ou Solvente
           If SiglaCor = ´SO´ then
             with cboCor do
               If StrToInt(Copy(vCodigo,1,3)) < 500 then
                 ItemIndex := Items.IndexOf(´INCOLOR´)
               else
                 ItemIndex := Items.IndexOf(´SOLFERINO´)
           else begin
             SQL.Clear;
             SQL.Add(´SELECT DESCRICAO FROM COR´);
             SQL.Add(´WHERE  SIGLA = ´´´ + SiglaCor + ´´´´);
             Open;
             with cboCor do
               ItemIndex := Items.IndexOf(FieldByName(´DESCRICAO´).AsString);
             Close;
           end;

           // Coloca valor padrão em mmoEspecificação
           txtEspec1.Text := ´25 a 30 " ZHAN 2´;

           // Coloca o foco em Rendimento, se for CHIPS
           // Senão, coloca foco em Descrição
           If Copy(txtCodigo.Text,4,2) = ´CH´ then begin
             txtRendimento.SelectAll;
             txtRendimento.SetFocus;
           end else begin
             txtDescricao.SelectAll;
             txtDescricao.SetFocus;
           end;

         end

       else begin

         // A fórmula existe, verifica a revisao ativa e carrega-a
         with dm.qryGeral do begin

           // Verifica a revisao ativa
           SQL.Clear;
           SQL.Add(´SELECT REVISAO FROM SP_REVISAO_ATIVA(:COD_FORMULA,:DATA)´);
           ParamByName(´COD_FORMULA´).AsString := vCodigo;
           ParamByName(´DATA´).AsDate   := dm.Hoje;

           Open;
           Close;
           Open;
           vRevisao := FieldByName(´REVISAO´).AsInteger;
           Close;
         end;

         // Insere as revisoes existentes em cboRevisao
         with cboRevisao do begin
           Clear;
           For i := 1 to vRevisao do
             Items.Add(IntToStr(i));
         end;

         // Busca a formula em questão e carrega nos campos da tela
         CompletaTela(vCodigo,vRevisao);

         // Coloca o foco em grdComp
         with grdComp do begin
           Col := 1;
           Row := 1;
           SetFocus;
         end;

       end;  //   If vQtde = 0

       // VerificaTotais para liberar ou não o menu Validar



       VerificaTotais;

     end;    //   If Key = #13



end;


alguém poderia me ajudar?


Anarchybra

Anarchybra

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar