Obrigado a todos
Campo Memo
Moderador: Moderadores
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Campo Memo
Boa tarde a todos, gostaria de saber se o xHarbour trabalha também com o campo "Memo" e se trabalha, gostaria também de obter unformações se alguem ao migrar algum sistema do Clipper para o mesmo, tiveram algum problema. Isso porque comigo no Clipper sempre rodou bem, mas ao migrar para o xHarbour, estou tendo problemas, pois, não está gravando as informações !e não foi alterado nada. Do jeito que veio, foi linkado pelo hbmake...
Obrigado a todos

Obrigado a todos
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Campo Memo
Olá!
Os campos Memo independem do compilador. Estão diretamente ligados ao RDD ativo. Se no Clipper você utilizava DBFNTX e no Harbour está usando DBFCDX, vai dar problema. Teria que converter os arquivos .DBT para os do DBFCDX. Não sei se é o caso, é só um exemplo...
Os campos Memo independem do compilador. Estão diretamente ligados ao RDD ativo. Se no Clipper você utilizava DBFNTX e no Harbour está usando DBFCDX, vai dar problema. Teria que converter os arquivos .DBT para os do DBFCDX. Não sei se é o caso, é só um exemplo...
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Campo Memo
Josmar, por quê não tenta substituir o campo memo do DBF por arquivos .TXT ? Eu ja tive problemas com BD por causa do campo memo. Veja neste tópico como faço: viewtopic.php?f=1&t=4398#p17337
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Campo Memo
Ola!
No harbour uso campo memo, convertido do DBT->FPT sem problemas no Harbour, tanto faz no linux ou windows.
Saudações,
Itamar M. Lins Jr.
No harbour uso campo memo, convertido do DBT->FPT sem problemas no Harbour, tanto faz no linux ou windows.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Re: Campo Memo
Ola Itamar, FPT faz parte do CDX creio eu, no entanto eu uso NTX em meus arquivos. Ja tentei colocar cdx no meu sistema, mas não deu muito certo, teria q mudar toda a estrutura do sistema. Até consegui aplicar o cdx em meu aplicativo, mas quando chegou na hora de gerar o código automático, aí enroscou ! Não consegui mudar essa estrutura. E uma observação, o campo do código automático é caracter. Agora se vc tiver um pequeno programinha que rode em rede com cdx e que gere código automático após o cadastro, eu agradeceria muito se vc me enviasse, nem q seja so de um cadastro para ver como funciona, É claro se não for encomodo !
Pablo, em uma ocasião atraz eu tive um problema com campo memo estourado e vc ja tinha me dado um toque sobre esse assunto de mudar o campo memo para txt...mas consegui driblar esse problema com um programinha que encontrei aqui mesmo no fórum que te confesso nem me lembro mais qual era ! agora eu te pergunto: será que vale a pena mudar para ntx um programa que ja tem 14 anos com milhares de registros . Eu concordo q seria uma ótima opção, mas o usuário está tão abtuado com essa situação. Mas é claro q quero aprender, até porque ntx são arquivos mais versátil e seguro. Agora, vamos supor q eu mude para ntx, e os aquivos ja registrados no memo, tem como transferí-los nesse novo procedimento
E os colegas não estranhe o horário em q enviei essa mensagem, é que chego tarde do serviço .
sem mais ...josmar
Obrigado
:xau
Pablo, em uma ocasião atraz eu tive um problema com campo memo estourado e vc ja tinha me dado um toque sobre esse assunto de mudar o campo memo para txt...mas consegui driblar esse problema com um programinha que encontrei aqui mesmo no fórum que te confesso nem me lembro mais qual era ! agora eu te pergunto: será que vale a pena mudar para ntx um programa que ja tem 14 anos com milhares de registros . Eu concordo q seria uma ótima opção, mas o usuário está tão abtuado com essa situação. Mas é claro q quero aprender, até porque ntx são arquivos mais versátil e seguro. Agora, vamos supor q eu mude para ntx, e os aquivos ja registrados no memo, tem como transferí-los nesse novo procedimento
E os colegas não estranhe o horário em q enviei essa mensagem, é que chego tarde do serviço .
sem mais ...josmar
Obrigado
:xau
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Campo Memo
Meus programas funcionam em rede iguais ao de qualquer um aqui do forum que usa [x]Harbour....enroscou ! Não consegui mudar essa estrutura. E uma observação, o campo do código automático é caracter. Agora se vc tiver um pequeno programinha que rode em rede com cdx e que gere código automático após o cadastro, eu agradeceria muito se vc me enviasse, nem q seja so de um cadastro para ver como funciona, É claro se não for encomodo !
Agora não entendi que código automático é esse?
Pelo que sei mudar de NTX para CDX é muito simples.
E converter DBT para FPT é mais fácil ainda basta um append.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Campo Memo
Pegou na veia essa. De repente o problema está aí.Itamar M. Lins Jr. escreveu:E converter DBT para FPT é mais fácil ainda basta um append.
As tabelas usadas no Clipper são, se não engano, do DBase III. No xHarbour é DBASE IV.
Talvez uma conversão (cópia com append) de todas as tabelas resolva.
Outra coisa Josmar, como você faz para pegar/ler o conteúdo do campo memo ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Re: Campo Memo
Boa tarde Itamar, desconsidere o assunto sobre o código automático, depois eu vejo isso. Mas se vc puder me colocar uma rotina aqui mesmo no forum de como indexar através do cdx em rede...agradeceria muito, mas se não puder, agradeço do mesmo jeito, só o fato de vc estar aqui expondo as suas idéias é mais do q suficiente !
Josmar
:xau
Josmar
:xau
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Re: Campo Memo
Ola!
Fragmentos de códigos usados aqui por mim.
Com esses exemplos podemos indexar, importar, modificar as estruturas em tempo de execução, inclusive em rede.
De quebra algumas ideias usando o LetoDB.
Saudações,
Itamar M. Lins Jr.
Fragmentos de códigos usados aqui por mim.
Com esses exemplos podemos indexar, importar, modificar as estruturas em tempo de execução, inclusive em rede.
De quebra algumas ideias usando o LetoDB.
Saudações,
Itamar M. Lins Jr.
Código: Selecionar todos
#include "ord.ch"
#include "hwgui.ch"
#include "rddleto.ch"
REQUEST HB_GT_GUI_DEFAULT
REQUEST HB_GT_WIN
REQUEST DBFCDX,DBFFPT,DBFDBT,LETO
REQUEST HB_LANG_PT,HB_CODEPAGE_PTISO,HB_CODEPAGE_PT850
*---------------------------------------------------------------------------------------
Function Main
*---------------------------------------------------------------------------------------
RDDSetDefault("DBFCDX")
set autopen on
set optimize on
Chk_DBF()
Check_indices()
**********************
Function check_indices
**********************
*
*
ordena_grupos()
****************
Function chk_dbf
****************
*
*
Private DRIVER := iif(lRddLeto,'LETO','DBFCDX')
CriaStruGrupos()
***********************
Function CriaStruGrupos // Grupos
***********************
*
*
aStru := EstruturaGrupos()
If lRddLeto
Else
If !file(dDados+'grupos.dbf')
rodape(oDlg,1,'Criando Estrutura grupos.dbf')
dbcreate(dDados+'grupos.dbf',astru,DRIVER)
Else
ChecaEstrutura("grupos.dbf",astru)
EndIf
EndIf
************************
Function EstruturaGrupos
************************
*
*
Return {{'cod_grupo','c',06,0},;
{'grupo' ,'c',25,0},;
{'tipo' ,'c',01,0},;
{'diamod' ,'d',08,0},;
{'digital' ,'c',01,0},;
{"enviado" ,"l",01,0}}
**********************
Function ordena_grupos
**********************
*
If !file(dDados+"grupos.cdx")
AbreDb('grupos.dbf','gr',.f.)
nIni:=1; tReg:=gr->(RecCount())
@ 10,10 say "Criando Indices dos Grupos -- Total: "+transf(treg,'999,999,999') of oDlg size 400,30
index on cod_grupo tag gr01 to grupos.cdx eval {||oBar:Set(,Recno()),.t.}
index on grupo tag gr02 to grupos.cdx eval {||oBar:Set(,Recno()),.t.}
close gr
EndIf
*****************************
Function AbreDb(db,Apel,lMod)
*****************************
*
*
lRet := .t.
if select(apel) > 0
FechaDb(apel)
endif
if lMod
BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
If lRddLeto
If Leto_File(dServidor+Db)
DbUseArea(.t.,"LETO",dServidor+DB,apel,.T.,.F.,'PTISO')
Else
MsgStop('Arquivo Não Foi Localizado: '+dServidor+Db)
lRet := .f.
EndIf
Else
DbUseArea(.t.,'DBFCDX',dDados+db,apel,.T.,.F.,'PTISO')
EndIf
//use ( dDados+Db ) New Alias apel SHARED
Recover
msginfo('Erro, abrindo Arquivo: '+dDados+Db+' Compartilhado')
lRet := .f.
End Sequence
if Neterr()
MsgInfo('Usado de Forma Exclusiva, Em Outro Lugar.')
lRet := .f.
endif
else
BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
If lRddLeto
If Leto_File(dServidor+Db)
DbUseArea(.t.,"LETO",dServidor+DB,apel,.F.,.F.,'PTISO')
Else
MsgStop('Arquivo Não Foi Localizado: '+dServidor+Db)
lRet := .f.
EndIf
Else
DbUseArea(.t.,'DBFCDX',dDados+db,apel,.F.,.F.,'PTISO')
EndIf
Recover
msginfo('Erro, abrindo Arquivo: '+dDados+Db,'Exclusivo')
lRet := .f.
End Sequence
if Neterr()
MsgInfo('Arquivo Aberto, Em Outro Lugar.')
lRet := .f.
endif
EndIf
If lRet
If lRddLeto
cFileCDX := dServidor+strtran(db,"dbf","cdx")
//cFIleCDX := strtran(db,"\","/")
If Leto_file(cFileCDX)
OrdSetFocus(1) //Set Index to &cFileCDX
Else
// Msginfo('Sem Indice: '+cFileCDX)
EndIf
Else
ind := dDados+substr(db,1,at('.',db))+'cdx'
if file(ind)
set index to &ind
endif
EndIf
EndIf
Return lRet
*********************************************
Function ChecaEstrutura(cDbf,aStruAtual,dAno)
*********************************************
*
*
local lMudou := .f., barra := iif (lLinux,"/","\")
dbt := substr(cDbf,1,at(".",cDbf))+'dbt'
if dAno == Nil
else
cDbf := dAno+barra+cDbf
endif
While !AbreDb(cDbf,"dbchk",.T.) ; Enddo
aStruAnt := dbStruct()
if Len(aStruAnt) != Len(aStruAtual)
lMudou := .t.
else
for nCont := 1 to Len(aStruAtual) // Compara cada campo
for nCont2 := 1 to 4 // Compara nome, tipo, tamanho e decimais
if nCont2 <= 2
aStruAtual[nCont,nCont2] := upper(aStruAtual[nCont,nCont2])
endif
If aStruAtual[nCont,nCont2] == aStruAnt[nCont,nCont2]
Else
//MsgInfo('mudou: '+cDbf+" -- "+aStruAtual[nCont,nCont2]+" <> "+aStruAnt[nCont,nCont2])
lMudou := .t.
exit
endif
next
if lMudou // Achou diferença já encerra
exit
endif
next
endif
DbChk->(DbCloseArea())
if lMudou
cdx := substr(cDbf,1,at(".",cDbf))+'cdx'
arq := substr(cDbf,rat("\",cDbf)+1,len(cDbf) ) // )+'dbf'
//msginfo(arq)
nDir := substr(cDbf,1,rat("\",cDbf))
If lRddLeto
if len(nDir) > 0
nDir := dServidor+nDir
else
nDir := dServidor
endif
Else
if len(nDir) > 0
nDir := dDados+nDir
else
nDir := dDados
endif
EndIf
//msginfo('ndir:'+nDir)
If lRddLeto
If Leto_File(nDir+cdx)
If Leto_fErase(nDir+cdx) > 0
MsgInfo('Erro ao Apagar o Arquivo: '+nDir+CDX)
close all
cancel
EndIf
EndIf
Else
if file(nDir+cdx)
if ferase(nDir+cdx) > 0
MsgInfo('Erro ao Apagar o Arquivo cdx')
close all
cancel
endif
endif
EndIF
// rodape(oDlg,1,"Importando "+cDbf)
If lRddLeto
/*
If Leto_File(nDir+"arqvelho")
Else
MsgInfo('Pasta: '+nDir+"arqvelho não existe.")
Return .f.
EndIf
*/
Else
If hb_DirExists(nDir+"arqvelho")
Else
If (makedir(nDir+"arqvelho")==0)
Else
MsgInfo('Sem Permissão de Criar a Pasta.')
close all
cancel
Endif
EndIf
EndIf
dbCreate(nDir+"temp.dbf",aStruAtual, iif(lRddLeto,"LETO","DBFCDX") )
nTemp := nDir+"temp.dbf"
Begin Sequence
DbUseArea(.t., iif(lRddLeto,"LETO","DBFCDX") , nTemp , "dbc" ,.f.,.f.,'PTISO')
// use (nTemp) new alias dbc exclusive via iif(lRddLeto,"LETO","DBFCDX")
recover
MsgInfo('Não Abriu o Arquivo: '+nTemp)
close all
cancel
End Sequence
If lRddLeto
string := dServidor+cDbf
Else
string := dDados+cDbf
EndIf
Append from &string via iif(lRddLeto,"LETO","DBFCDX")
/*
if file(dbt)
append from &string //via 'DBFDBT'
else
append from &string //via 'DBFCDX'
endif
*/
dbc->(DbCloseArea())
//rodape(oDlg,1,barra+curdir()+barra+cDBF+","+barra+curdir()+barra+"arqvelho"+barra+cDBF,0)
If lRddLeto
if Leto_ferase(nDir+"arqvelho\"+Arq) > 0
MsgInfo('Não Apagou o Arquivo')
close all
cancel
endif
Else
if ferase(nDir+"arqvelho\"+Arq) > 0
MsgInfo('Não Apagou o Arquivo')
close all
cancel
endif
EndIf
cLocal := nDir+Arq
cNome := nDir+strtran(Arq,'dbf','old')
msginfo(cLocal+" "+cNome)
If lRddLeto
erro := Leto_fRename(cLocal,cNome)
Else
erro := FileMove(cLocal,nDir+"arqvelho"+barra+Arq)
EndIf
if erro = 0
else
msgstop("Não moveu o arquivo, erro: "+str(erro)+CrLf+"O Sistema Será Cancelado.")
close all
PostQuitMessage( 0 )
endif
if fRename(nDir+"temp.dbf",dDados+cDbf)>0
MsgInfo('Erro ao Renomear o Arquivo: '+cdbf)
close all
cancel
endif
if file(nDir+"temp.fpt")
cDbf := substr(cDbf,1,at('.',cDbf))+'fpt'
if fRename(nDir+"temp.fpt",nDir+cDbf) > 0
MsgInfo('Erro ao renomear o Arquivo: '+cdbf)
close all
cancel
endif
endif
//rodape(oDlg,1,'')
endif
//dbchk->(DbCloseArea())
return lMudou
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
Josmar dos Santos
- Usuário Nível 3

- Mensagens: 277
- Registrado em: 11 Jan 2006 18:36
- Localização: Botucatu-SP
Re: Campo Memo
Ola Itamar, show de bola essa sua rotina, ja anotei e prometo que irei usa-la ...ok
Mais uma vez, orbrigado pela sau gentileza...
Josmar

Mais uma vez, orbrigado pela sau gentileza...
Josmar