Preencher RICHEDIT com dados do dbf

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Preencher RICHEDIT com dados do dbf

Mensagem por marcos.gurupi »

Caros tenho um banco de dados de visita para clientes, nele o vendedor diz o q
fez no cliente e etc... a estrutura do dbf eh:

visita01:=Space(250) ateh visita10:=Space(250)

Como eu faco para preencher o RICHEDIT com os dados do dbf ?

Marcos Roberto.

@ 19,334 RICHEDIT oRichedit1 TEXT vRichedit1 SIZE 967,293 STYLE ES_MULTILINE
+ES_WANTRETURN +WS_BORDER+ES_AUTOVSCROLL +WS_VSCROLL
Marcos Roberto
NetService Software
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Re: Preencher RICHEDIT com dados do dbf

Mensagem por Itamar M. Lins Jr. »

Ola!

Código: Selecionar todos

vCl21 := cl->observacao //Campo Memo.
 
   @ 005,335 say "Observação:" Size 80,20 Transparent
   @ 075,330 Get oCl21 Var vCl21 size 320,100 STYLE ES_MULTILINE +ES_AUTOVSCROLL +WS_VSCROLL +ES_WANTRETURN ; 
																TOOLTIP "Observação sobre o cliente."
//ou
@ 19,334 RICHEDIT  oCl21 TEXT vCl21 SIZE 967,293 STYLE ES_MULTILINE+;
                                      ES_WANTRETURN +WS_BORDER+ES_AUTOVSCROLL +WS_VSCROLL

Alias depois analizando é mais economico usar da forma como esta ai em cima mas ser for da sua maneira é:

Código: Selecionar todos

xTexto := fieldObs01+FieldObs02+...
// até a 10. Seu DBF vai ficar enorme, porque cada uma tem 250 caracteres. Com o campo memo vai ficar menor e com limite de obervação maior.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Preencher RICHEDIT com dados do dbf

Mensagem por marcos.gurupi »

Primeiro Obrigado pela dica, mas eu nao optei pelo campo memo pela falta de confianca nele, jah tive experiencias negativas com esse campo. Ele nao eh de conficanca :)

Marcos Roberto.
Marcos Roberto
NetService Software
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Preencher RICHEDIT com dados do dbf

Mensagem por marcos.gurupi »

Pq quando tento gravar o campo RICHEDIT a var estah vindo vazia?

Estou usando assim:

Código: Selecionar todos

@ 8,319 RICHEDIT oDescrVisita TEXT vDescrVisita SIZE 692,269 ;                           
        STYLE ES_MULTILINE +ES_WANTRETURN +WS_BORDER+ES_AUTOVSCROLL +WS_VSCROLL    ;     
        FONT HFont():Add( 'Courier New',0,-13,400,,,)                                    

@ 715,550 BUTTON oButton7 CAPTION "Salvar Visita" ON CLICK {||SalvarVisita()} SIZE 150,30 STYLE WS_TABSTOP

Static Function SalvarVisita()                                        
                                                                      
                                                                      
                                                                      
Local Areant:=Select()                                                
Select 68                                                             
Do while .t.                                                          
   If travarqivo(5)                                                   
      dbappend()                                                      
      Replace CodVis    with LastRec()+1                              
      Replace CodCli    with Clientes->Codigo                         
      Replace NomCli    with Clientes->Nome                           
      Replace DataVis   with Date()                                   
      Replace Cod_Vend  with Clientes->CodVend                        
      Replace Nom_Vend  with Clientes->NomVend                        
      Replace Visita01  with SubStr(vDescrVisita,1,250)               
      Replace Visita02  with SubStr(vDescrVisita,251,250)             
      Replace Visita03  with SubStr(vDescrVisita,501,250)             
      Replace Visita04  with SubStr(vDescrVisita,751,250)             
      Replace Visita05  with SubStr(vDescrVisita,1001,250)            
      Replace Visita06  with SubStr(vDescrVisita,1251,250)            
      Replace Visita07  with SubStr(vDescrVisita,1501,250)            
      Replace Visita08  with SubStr(vDescrVisita,1751,250)            
      Replace Visita09  with SubStr(vDescrVisita,2001,250)            
      Replace Visita10  with SubStr(vDescrVisita,1251,250)            
      DbUnlock()                                                      
      MsgInfo("Visita salva com sucesso!!!")                          
   Else                                                               
      Loop                                                            
   Endif                                                              
   Exit                                                               
Enddo                                                                 
Return .T.                                                            

Marcos Roberto
NetService Software
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Preencher RICHEDIT com dados do dbf

Mensagem por marcos.gurupi »

Deu certo com a dica do Fernando segue a dica abaixo:

oDescrVisita:GetText()
vDescrVisita := oDescrVisita:GetText()

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Preencher RICHEDIT com dados do dbf

Mensagem por Luciano Bonfim »

pra ficar melhor ainda, vc poderia criar um outro DBF com
cod_cli
cod_vis
linha C 5 (00001, 00002, 00003) seuqincial para saber qual a posicao da linha
visita C 250

assim vc otimiza mais e ainda pode escrever quantas linhas quiser ...
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Re: Preencher RICHEDIT com dados do dbf

Mensagem por asimoes »

Olá,

Porque você não grava em um arquivo externo, texto identificado assim cccaaaammdd.txt onde ccc = código do cliente, aaaa = ano do cadastro, mm = mes do cadastro e dd = dia do cadastro.

Usa o fileseek para localizar o arquivo e memoread para ler o arquivo. A vantagem é que você vai ter somente os arquivos onde houverem observações.

Ex.

No seu dbf deve ter o código do cliente que é único:

cCod:=DBF->Cod_Cli

Localiza o arquivo:

Código: Selecionar todos

cFile:=FileSeek(cCod*.txt)
cObsCli:=Space(250)
if !empty(cFile)
   cObsCli:=Memoread(cFile)
Endif
 @ 8,319 RICHEDIT oDescrVisita TEXT cObsCli SIZE 692,269 ;                           
 STYLE ES_MULTILINE +ES_WANTRETURN +WS_BORDER+ES_AUTOVSCROLL +WS_VSCROLL    ;     
  FONT HFont():Add( 'Courier New',0,-13,400,,,)                            
   .
   .
   .
No final você gera o arquivo ou sobrepoe o existente.

Eu aconselho fortemente a não usar campo memo.

[]´s
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Preencher RICHEDIT com dados do dbf

Mensagem por Luciano Bonfim »

Eu tb sempre soube que campos memo davam problemas, mas na verdade nunca usei. Pra tirar a prova dos 9 fiz o seguinte: implementei um campo memo no meu sistema ontem para pode testar e ver se isso é verdade ou apenas lenda urbana...

estou usando dbf/cdx e o arquivo memo é um FPT...

já está em produçäo... assim que tiver os feedbacks vou postanto aqui

abcs
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Preencher RICHEDIT com dados do dbf

Mensagem por Luciano Bonfim »

Detectei um contra tempo que näo chega a ser um problema:

Estou com meus arquivos DBFs e meu FPT na pasta, se eu pegar apena os DBFs do meu cliente (näo o FPT) e copiar para a minha pasta de desenvolvimento, o xharbour acusa erro de índice corrompido quando tento ler o campo memo, ou seja, eu tenho que ter sempre o FPT correspondente ao DBF que estava sendo usado.

Só consegui fazer funcionar novamente o sistema apagando a coluna do campo memo e criando ela novamente, ai foi regenerado o meu FPT.

Acredito näo ser um grande problema, pois basta apenas tomarmos o cuidado de copiar o FPT juntamento com os DBFs

Continuarei testanto... espero näo perder o cliente por causa desse campo memo rsrsrs
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Responder