Arjona 0 Denunciar post Postado Março 3, 2009 Estou desenvolvendo um programa de banco de dados para fins de aprendizado e estou com dúvida na utilização da função POS. Meu objetivo é verificar se existe espaços em branco no campo “CPF” do formulário, antes de confirmar a entrada de dados. Minha primeira tentativa foi utilizar o seguinte código: procedure TFormClientes.TableClientesBeforePost(DataSet: TDataSet); var corrige_branco: string; Begin corrige_branco := TableClientesCGC_CPF.Text; If Pos(' ',corrige_branco) <> 0 then Begin MessageDlg ('O campo '+ LabelCGC_CPF.Caption + ' está incompleto!', mtWarning, [mbOK],0); DBEditCGC_CPF.SetFocus; abort; end; end;Eu fui testar o código acima deixando, propositalmente, espaços em branco e o retorno dava ‘0’. Testei novamente este código substituindo as aspas ‘ ’ por um número qualquer no meio da string e o retorno deu diferente de zero, ou seja, funcionou. Tentei usar outros artifícios como a procedure VAL e esta funcionou em partes, porque localizou os espaços em branco como eu queria só que quando o espaço em branco estava acima do décimo caractere este também não funcionou. Fui verificar o pq e contatei que a variável CODE não assume valores maiores que 10. Alguém tem alguma idéia de pq não deu certo o código acima? Alguma sugestão por favor. Compartilhar este post Link para o post Compartilhar em outros sites
manobr 0 Denunciar post Postado Março 3, 2009 Olá, Uma forma de contornar isso pode ser você validar o seu Edit ou DBEdit para aceitar somente esta máscara (000.000.000-00) números, ponto e vírgula: if not (Key in['0'..'9',Chr(8)]) and not (key = '.') and not (key = '-') then Key:= #0; Ou apenas números: if not (Key in['0'..'9',Chr(8)]) then Key:= #0; Espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Março 3, 2009 No caso você quer verificar se o campo foi preenchido ou se ele tem campos em branco entre os dados informados? Se for verificar se o mesmo tem algum dado, você pode testar o lenght dele, dando um trim no campo. Algo do tipo: if Length(trim(DBEditCGC_CPF.text)) = 0 then showmessage('Campo ainda não foi preenchido.'); []'s Compartilhar este post Link para o post Compartilhar em outros sites
Arjona 0 Denunciar post Postado Março 3, 2009 Obrigado manobr pela dica, mas eu já fiz algo parecido só que usando a propriedade EditMask, como abaixo. TableClientesCGC_CPF.EditMask := '99\.999\.999\/9999\-99;0;_'; Como você pode ver, só são aceitos números e o zero garante que somente os números serão armazenados na tabela (paradox). Eu até pensei que o caractere ‘_’ pudesse estar causando o problema mas ele é visualizado somente pelo usuário no DBedit e não é armazenado na tabela, logo não poderia afetar a busca por espaço vazio na string. Já tentei, sem sucesso também, trocar a linha Corrige_branco := TableClientesCGC_CPF.Text; por Corrige_branco := TableClientesCGC_CPF.AsString; mas deu na mesma. Um abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Arjona 0 Denunciar post Postado Março 3, 2009 Caro Chrnos, O meu problema não é com a verificação de campo preenchido, mas sim com a verificação de preenchimento correto. Por exemplo, digamos que eu quero digitar um CPF qualquer: “999.999.999 – 99”, mas por algum engano eu escreva : “999.9 9.999 – 99”. Tem um erro no quinto caracter e ele é salvo numa tabela paradox como “9999 999999” . Como eu falei antes, se eu substituo qualquer outro valor ao invés de espaço em branco o código funciona. Por que com ‘ ’ não funciona? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Março 4, 2009 Porque não tenta uma solução mais simples?? Antes de dar o comando para gravar no banco, chama uma rotina de validação e tenta converter este para um inteiro, usando um try except... provavelmente este campo em branco vai gerar um erro que você pode tratar dentro do sistema, por exemplo, forçando o usuário a digitar o valor corretamente. Outra coisa... no seu editmask, o espaço em branco seria o ' ' (com um espaço entre as aspas) provavelmente não? Estou num pc que não posso testar isso agora. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Arjona 0 Denunciar post Postado Março 4, 2009 Bah Chrnos, desculpe minha ignorância no assunto, mas eu tentei fazer o que você sugeriu mas não tá dando certo. O programa está sempre dando a mensagem de erro, mesmo qdo não há espaço em branco na string. Fiz um Debug e verifiquei o valor da variável “corrige_branco” e, teoricamente, estava correta (sem brancos). Na compilação aparece a seguinte mensagem “[hint]Cliente.pas(261): Value assign to ‘x’ never used”. De fato eu não estou usando mesmo a variável, a idéia é que ela fosse só para validar o bloco “try –exception”. Seria este o meu erro? procedure TFormClientes.TableClientesBeforePost(DataSet: TDataSet); var corrige_branco:string; x:integer; Begin x:=0; Try corrige_branco := TableClientesCGC_CPF.AsString; x:= StrToInt(corrige_branco); except on E: EConvertError do begin ShowMessage('O campo '+ LabelCGC_CPF.Caption + ' está incorreto!'); DBEditCGC_CPF.SetFocus; abort; end; end; end; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Março 5, 2009 Bom, é que só agora me atendei a um detalhe... você usa uma máscara certo? Então provavelmente você está passando junto com os valores os separadores neste teste do try, ai dá o erro mesmo.... Uma coisa que você pode mudar é por na sua máscara 0 no lugar do 9 onde os dados obrigatoriamente tem que ter um valor preenchido... o 0 exige o preenchimento de um valor numérico na posição enquanto o 9 só aceita números mas não obriga o seu preenchimento. Agora, eu peguei a sua máscara e joguei num maskedit e testei seu código inicial aqui desta forma: procedure TForm1.BitBtn1Click(Sender: TObject); var corrige_branco : String; begin corrige_branco := MaskEdit1.Text; If Pos(' ',corrige_branco) <> 0 then Begin MessageDlg ('O campo está incompleto!', mtWarning, [mbOK],0); end; end; E usando o teste acima a mensagem de erro foi retornada sempre que o campo estava vazio... talvez fosse interessante você debugar o seu código e ver como a variável corrige_branco está sendo carregada na hora que entra neste trecho do seu código, para ver se o valor que veio da TableClientesCGC_CPF.AsString possui um campo em branco ou se ela joga algum outro caracter nos espaços em branco... ou repensar a forma de validar isso (talvez montando uma rotina que copie apenas os números desta variável e faça um count pra ver se atentem ao que você espera). De todo modo, faça um debug e veja por onde seu programa está passando para ver essa questão. []'s Compartilhar este post Link para o post Compartilhar em outros sites