Não consigo pensar. Onde está o erro?
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.
alguém poderia me ajudar?
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
Curtidas 0