[Resolvido] Alinha dados no banco de dados

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

[Resolvido] Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Ola a todos.
Estou precisando alinhar a direita e centralizar os dados no banco de dados (dbf).

Alguem poderia me dar uma luz?


---
Nota da Moderação (Maligno):
O presente tópico, apesar do assunto tratar de manipulação de banco de dados, teve de ser movido da seção "Banco de dados", uma vez que, na realidade, o âmago da questão está relacionado apenas à aplicação da linguagem XBase, supostamente vinculada à ferramenta Clipper.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Alinha dados no banco de dados

Mensagem por Maligno »

Não entendi exatamente o que você pretende. Poderia explicar melhor? Alinhar onde? Algum relatório? Textos dentro do banco de dados?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Dentro do banco, ao gravar os dados eles devem ficar alinhado a diretira.

É que estou fazendo uma rotina de conversão de um sistema clipper para outro sistema, e os dados tem que estar alinhados a direita no banco de dados.

Os campos são caracateres, por padrão ficam alinhados a esquerda.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Alinha dados no banco de dados

Mensagem por Maligno »

Entendi. Nesse caso você só precisa de uma rotina simples que "varra" todo o banco de dados para a troca das strings. Um exemplo simples:

Código: Selecionar todos

dbEval(||<nome_campo> := PadL(RTrim(<nome_campo>),<tamanho_campo>)})
Sendo <nome_campo> e <tamanho_campo> dados conhecidos, fica bem fácil: primeiro ele remove os espaços à direita e em seguida, preenche a string com espaços à esqueda, até a largura do campo. Se não for exatamente o que quer, ainda assim o conceito é esse. Basta ajustar para suas necessidades.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Ok, Vou testar. Muito Obrigado.
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Maligno, testei com sua função mas não deu certo.

Vai um trecho do código:

Código: Selecionar todos

select fornec
go top

do while .not. eof()
   select forbas
   go top
   seek fornec->cgc
   if found()
      if rlock()
         forbas->nr_cgcpf:=   strtran(strtran(strtran(fornec->cgc,"."),"-"),"/")
         bla bla bla
         unlock
      endif
   else
      append blank
      if rlock()
         forbas->nr_cgcpf:=   strtran(strtran(strtran(fornec->cgc,"."),"-"),"/")
         bla bla bla
         unlock
      endif
   endif
   select fornec
   skip
enddo
Editado pela última vez por gilsonpaulo em 30 Out 2009 18:23, em um total de 1 vez.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Alinha dados no banco de dados

Mensagem por Maligno »

Só com esse código não dá pra entender nada.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Ja arrumado, falha humana.

Fiz assim para teste com sua função.

Código: Selecionar todos

select forbas
do while .not. eof()
   dbEval({||forbas->nr_cgcpf := PadL(RTrim(forbas->nr_cgcpf),15)})
enddo
Mas não funcionou
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Alinha dados no banco de dados

Mensagem por Maligno »

E qual o efeito do teste que fez? O que exatamente deu errado?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Continua alinhado a esquerda.
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Resolvido,

Código: Selecionar todos

select fornec
go top

do while .not. eof()
   select forbas
   go top
   seek fornec->cgc
   if found()
      if rlock()
         forbas->nr_cgcpf:=   pdal(strtran(strtran(strtran(fornec->cgc,"."),"-"),"/"),15," ")
         bla bla bla
         unlock
      endif
   else
      append blank
      if rlock()
         forbas->nr_cgcpf:=   pdal(strtran(strtran(strtran(fornec->cgc,"."),"-"),"/"),15," ")
         bla bla bla
         unlock
      endif
   endif
   select fornec
   skip
enddo

Se não fosse pelos caracteres ".", "/" e "-" que estou retirando pelo strtran ficaria assim.:

Código: Selecionar todos

select fornec
go top

do while .not. eof()
   select forbas
   go top
   seek fornec->cgc
   if found()
      if rlock()
         forbas->nr_cgcpf:=   pdal(fornec->cgc),15," ")
         bla bla bla
         unlock
      endif
   else
      append blank
      if rlock()
         forbas->nr_cgcpf:=   pdal(fornec->cgc),15," ")
         bla bla bla
         unlock
      endif
   endif
   select fornec
   skip
enddo
Para funcionar com o seu exemplo Maligno, ficaria assim.:

Código: Selecionar todos

select forbas
go top

do while .not. eof()
   dbEval({||forbas->nr_cgcpf := PadL(RTrim(forbas->nr_cgcpf),15," ")})
enddo
help do vfp 5

Retorna uma seqüência de uma expressão preenchida com espaços ou caracteres até o comprimento especificado no lado direito, esquerdo ou nos dois lados.

Sintaxe

PADL(eExpressão, nTamanhoResultado [, cCaracterePreenchimento])
– Ou –
PADR(eExpressão, nTamanhoResultado [, cCaracterePreenchimento])
– Ou –
PADC(eExpressão, nTamanhoResultado [, cCaracterePreenchimento])

Tipos de retorno

Caractere

Argumentos

eExpressão Especifica a expressão a ser preenchida. Esta expressão pode ser de qualquer tipo, exceto expressão lógica ou um campo de figura ou geral.

nTamanhoResultado Especifica o número total de caracteres na expressão depois que ela foi preenchida.

cCaracterePreenchimento Especifica o valor a ser utilizado no preenchimento. Este valor é repetido, de acordo com a necessidade, para preencher a expressão até o número especificado de caracteres.

Se você omitir cCaracterePreenchimento, espaços (caractere ASCII 32) serão utilizados no preenchimento.

Comentários

PADL( ) insere preenchimento à esquerda, PADR( ) insere preenchimento à direita e PADC( ) insere preenchimento nos dois lados.

Exemplo.:

Código: Selecionar todos

m.campo = ' 1'
m.campo = padl(alltrim(campo),8,'0')
campo ficara assim '00000001'

Fonte.: http://www.vfpbrasil.com.br/modules/new ... ic_id=1926

Valeu Maligno pela ajuda
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Alinha dados no banco de dados

Mensagem por Toledo »

Tenta desta forma:

Código: Selecionar todos

dbEval({||forbas->nr_cgcpf := PadL(RTrim(forbas->nr_cgcpf),15," ")})
Abraços
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Re: Alinha dados no banco de dados

Mensagem por gilsonpaulo »

Obrigado Toledo, mas ja resolvi.

Valeu a juda de todos.

Tem como colocar resolvido no topíco?
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Re: Alinha dados no banco de dados

Mensagem por Toledo »

Postamos ao mesmo tempo... 18:26
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: [Resolvido] Alinha dados no banco de dados

Mensagem por Maligno »

O código que fez com DBEval() está certo. Fiz até um teste aqui, bem semelhante:

Código: Selecionar todos

use ("d:\nome.dbf") exclusive
dbEval({||field->nome := PadL(RTrim(field->nome),35)})
Usei um arquivo de clientes qualquer, com um campo NOME. Alinhou os nomes à direita perfeitamente, como esperado.

A única coisa que vejo errada no seu código é essa malha DO. Ela é desnecessário, e se mantida, ficará num loop infinito. Se testou, deve ter travado.

Curiosidade: porque alinhar à direita um campo de CNPJ se esse número é muito mais útil alinhado à esquerda?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder