Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marostegan

formatação de campo

Recommended Posts

olá pessoal...

 

aqui no sistema eu tenho um campo que é o "codprod" esse campo esta definido como texto (BD Access)

 

eu defini como texto pois preciso que os numeros salvos nele fique dessa forma: 000123 , 000124 e assim sucessivamente!

 

antes esse campo estava definido como numero entao ele tirava esses 000 da frente...

 

 

só que esse numero era digitado manualmente, agora o sistema gera ele... gera usando o seguinte:

 

var
Numero : Integer;
begin
dm.q_loja.Insert;
with dm.q_contagem do begin
close;
SQL.Text:='select contagem from tbl_contagem';
Open;
Numero := dm.q_contagem.FieldbyName('contagem').AsInteger;
f_incluir_imoveis.numero.Text := IntToStr(Numero);
close;
SQL.Text:='update tbl_contagem set contagem =:contagem';
Parameters.ParamByName('contagem').Value := Numero + 1;
ExecSQL;

só que o problema é que preciso que ao gerar o numero o mesmo já seja formatado, por ex: gero o numero 27 entao automaticamente o sistema formate para 0000027.

 

tentei fazer o seguinte: (mas nao foi... rsss...)

 


  StrToFloat(DBEdit1.Text);
  DBEdit1.Text := FormatFloat('000000', StrToFloat(DBEdit1.Text));

 

 

* anteriormente estava usando o campo na tabela como numerico, e formatava o campo em tempo real

 

DBEdit1.Text := FormatFloat('000000', StrToFloat(DBEdit1.Text));

funcionava certinho, só que quando esses dados eram exibidos em um DBGrid, ficava sem formatação, na hroa de imprimir um relatorio tambem saia sem formatação... por isso pensei em deixar o campo como text, gerar o numero formatado e gravar desse jeito (com a formatação) no BD.

 

mas... como fazer isso?

 

obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

De boa amigo, campos numéricos são melhor gerenciados gravando eles como numeros mesmo... você está tendo trabalho dobrado para criar seu código no braço quando poderia usar as propriedades de formatação para exibir estes zeros tanto nos dbgrids quanto nos relatórios, e pior... está correndo o risco de ter violação de chaves primarias caso seu programa rode em rede, pois se dois usuários forem fazer um cadastro ao mesmo tempo, provavelmente o código que virá da sua rotina será o mesmo, enquanto que se fosse um campo autoincremento isso não daria problemas... Sugiro que dê uma repensada nisto.

 

Quanto a gravação... se o seu campo é um tipo texto, o que você jogar nele vai gravar... se você gravar '0000298' vai ficar no campo texto '0000298', se por um 'A' vai gravar 'A', e assim por diante.... Agora, se você vai querer atualizar isto, tem que montar um select para pegar os campos não formatados e fazer um update neles para gravar o valor novamente...

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

De boa amigo, campos numéricos são melhor gerenciados gravando eles como numeros mesmo... você está tendo trabalho dobrado para criar seu código no braço quando poderia usar as propriedades de formatação para exibir estes zeros tanto nos dbgrids quanto nos relatórios, e pior... está correndo o risco de ter violação de chaves primarias caso seu programa rode em rede, pois se dois usuários forem fazer um cadastro ao mesmo tempo, provavelmente o código que virá da sua rotina será o mesmo, enquanto que se fosse um campo autoincremento isso não daria problemas... Sugiro que dê uma repensada nisto.

 

Quanto a gravação... se o seu campo é um tipo texto, o que você jogar nele vai gravar... se você gravar '0000298' vai ficar no campo texto '0000298', se por um 'A' vai gravar 'A', e assim por diante.... Agora, se você vai querer atualizar isto, tem que montar um select para pegar os campos não formatados e fazer um update neles para gravar o valor novamente...

 

[]'s

 

entendi...

 

entao, vou voltar aqui numérico mesmo...

 

mas me ajuda no seguinte... como configurar esses 0000 ai no DBGrid igual eu configuro nos DBEdit?

 

quantos aos relatórios tranquilo, consegui aqui.... o que tá pegando mesmo é os DBGrid da vida...rs...

 

 

como formatar esse dito?? rsss....

 

valews... abraçoss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não vejo muita necessidade em formatar um campo numérico num dbgrid só para por zeros a esquerda, já que o que vale no fim das contas é o valor sem zeros... mas em todo caso, tem um jeito, mas para isso talvez tenha que criar uma query específica para a tela onde tenha o grid. O esquema é o seguinte: monte sua sql normalmente de forma que possa dar um active nela sem ser em runtime (algo como select * from tabela) ... assim, você vai poder fazer o seguinte:

 

1) Se a query está ativada no seu form em tempo de projeto, dê um duplo clique na query.

2) Dentro da janela que vai abrir, clique com o botão auxiliar do mouse e dê um ADD ALL FIELDS.

3) Selecione o campo que você quer formatar a exibição na lista carregada e vá até a opção DisplayFormat e coloque lá quantos zeros quiser que sejam exibidos no grid.

4)Salve e execute seu programa... se tudo correu bem, vai aparecer o total de zeros que você adicionou no dbgrid, sendo que onde tiver um valor vindo da consulta o zero da posição será substituido por ele.

 

[]'s

 

 

Ps.: montei a linha de desenvolvimento necessária usando o TQuery da aba BDE como base.

Ps1.: faz muito tempo que não uso essa forma, mas acho que dá para incluir uma coluna e ligar a ela o campo que será exibido e formatar seu display, o que mudaria o passo 2 em diante nesse caso... é questão de sentar e testar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha... não sei qual banco de dados você tah usando, se for o MySQL ele tem uma opção chamada ZEROFILL que toda vez que você adiciona um registro ele completa com zeros a esquerda até da o limite de caracteres... aih na hora de chamar pra por na DBEdit é soh usar .AsString ao inves de .Value...

 

Espero ter ajudado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.