memo X txt
Moderador: Moderadores
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
memo X txt
ola amigos
tenho varios DBF com campos memos e estou querendo acabar com eles e passar a gravar em arquivos TXT so nao estou sabendo como fazer, por exemplo tenho o arquivo clientes.dbf dentro dele tenho 2 memos um chama-se NOTAS e o outro HISTORICOS, em notas é gravado todas as informacoes de usuarios ou seja o usuario digita qualquer informações sobre este cliente o outro campo o sistema grava automaticamente o que ocorreu com o cliente, exemplo quando é feito qualquer movimentação no cadastro de cliente o sistema grava..
O usuario FULANODETAL alterou o registro em 03/04/2011 as 08:00 (altercli 328 )
O usuario FULANODETAL inclui o registro em 01/04/2011 as 15:00 (inclucli 850 )
este é apenas um exemplo, repare que a odem de gravação é decrecente.
estava pensando em gerar um arquivo txt com o codigo ou o cnpj do cliente ficando +- assim 61419723000188.txt
so que dentro do arquivo queria separar o que é campo NOTAS de HISTORICOS e sempre gravar as mudanças recentes primeiro depois as mais antigas ficando mais ou menos assim quase igual a um arquivo *.ini
[NOTAS]
EM 03/04/11 O CLIENTE REPROVOU O ORÇAMENTO 10345 E FICOU DE PASSAR UM NOVO PEDIDOS
EM 22/02/11 O CLIENTE PEDIU PARA TROCAR O ITEM X PELO ITEM Y DO PEDIDO 10213
EM 15/02/11 O CLIENTE DEVOLVEU A MERCADORIA DO PEDIDO 10185 ALEGANDO ESTAR EM DESACORDO COM O SEU PEDIDO
[HISTORICOS]
O usuario FULANODETAL alterou o registro em 03/04/2011 as 08:00 (altercli 328 )
O usuario FULANODETAL inclui o registro em 01/04/2011 as 15:00 (inclucli 850 )
nao sei como e qual é a melhor forma para fazer, lembrando que o campo NOTAS deve ficar aberto na alteração ou inclusao para o usuario digitar.
qualquer sugestao é bem vinda.
abraços
tenho varios DBF com campos memos e estou querendo acabar com eles e passar a gravar em arquivos TXT so nao estou sabendo como fazer, por exemplo tenho o arquivo clientes.dbf dentro dele tenho 2 memos um chama-se NOTAS e o outro HISTORICOS, em notas é gravado todas as informacoes de usuarios ou seja o usuario digita qualquer informações sobre este cliente o outro campo o sistema grava automaticamente o que ocorreu com o cliente, exemplo quando é feito qualquer movimentação no cadastro de cliente o sistema grava..
O usuario FULANODETAL alterou o registro em 03/04/2011 as 08:00 (altercli 328 )
O usuario FULANODETAL inclui o registro em 01/04/2011 as 15:00 (inclucli 850 )
este é apenas um exemplo, repare que a odem de gravação é decrecente.
estava pensando em gerar um arquivo txt com o codigo ou o cnpj do cliente ficando +- assim 61419723000188.txt
so que dentro do arquivo queria separar o que é campo NOTAS de HISTORICOS e sempre gravar as mudanças recentes primeiro depois as mais antigas ficando mais ou menos assim quase igual a um arquivo *.ini
[NOTAS]
EM 03/04/11 O CLIENTE REPROVOU O ORÇAMENTO 10345 E FICOU DE PASSAR UM NOVO PEDIDOS
EM 22/02/11 O CLIENTE PEDIU PARA TROCAR O ITEM X PELO ITEM Y DO PEDIDO 10213
EM 15/02/11 O CLIENTE DEVOLVEU A MERCADORIA DO PEDIDO 10185 ALEGANDO ESTAR EM DESACORDO COM O SEU PEDIDO
[HISTORICOS]
O usuario FULANODETAL alterou o registro em 03/04/2011 as 08:00 (altercli 328 )
O usuario FULANODETAL inclui o registro em 01/04/2011 as 15:00 (inclucli 850 )
nao sei como e qual é a melhor forma para fazer, lembrando que o campo NOTAS deve ficar aberto na alteração ou inclusao para o usuario digitar.
qualquer sugestao é bem vinda.
abraços
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
memo X txt
Eu criaria dois arquivos.tenho 2 memos um chama-se NOTAS e o outro HISTORICOS
Sugiro você pegar o código do cliente que provavelmente deve ser menor que o cnpj. Pois o tamanho do arquivo seria melhor ser no padrão 8x3. Não sei se em Harbour na hora de criar ele cria com nomes longos.estava pensando em gerar um arquivo txt com o codigo ou o cnpj do cliente ficando +- assim 61419723000188.txt
Separar os arquivos pela sua nomenclatura seria mais fácil. Você até pode armazená-los separadamente em sub-pastas diferentes. Criaria N0000001.TXT para Notas e H0000001.TXT para os históricos. Ou C0000001.NOT para notas ou C0000001.HIS para históricos. E os histórico para que seja gravado em forma decrescente, você poderia fazer algo assim:so que dentro do arquivo queria separar o que é campo NOTAS de HISTORICOS
Código: Selecionar todos
cLog:="O usuario FULANODETAL alterou o registro em 03/04/2011 as 08:00 (altercli 328 )"+MEMOREAD("C0000001.HIS")
MEMOWRIT("C0000001.HIS",cLog)Com mais razão, eu separaria os arquivos. Daí quando o usuário queira inserir alguma observação, ele tecle F8 por exemplo e abra o MEMOREAD para edição do arquivo do cliente tal.lembrando que o campo NOTAS deve ficar aberto na alteração ou inclusao para o usuario digitar
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.
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
memo X txt
ola amigos
ja montei parte da minha rotina de gravação em arquivo TXT para substituir os CAMPOS MEMOS, agora estou com uma dificultade em mostrar este arquivo na execução do programa.
para criar o arquivo fiz desta forma, eu gravo e regravo o arquivo do jeito que necessito:
agora para mostrar quando estou executando meu programa ja nao da certo, a tela aparece em branco ja tentei colocar por exemplo ALERT( MEMOREAD(CPASTA+CARQUI) ) e mostra vazio, abaixo a rotina que fiz
se colocar macro em cMemo assim &cMemo da erro sintax, onde estou errando????
abraços
ja montei parte da minha rotina de gravação em arquivo TXT para substituir os CAMPOS MEMOS, agora estou com uma dificultade em mostrar este arquivo na execução do programa.
para criar o arquivo fiz desta forma, eu gravo e regravo o arquivo do jeito que necessito:
Código: Selecionar todos
TEXTO := 'Dia ' + DTOC(DATE()) + ' as ' + SUBS(TIME(),1,5) + ' o Usuario ' + cUser +' '+ RSIT + CRLF + MEMOREAD(CPASTA+CARQUI)
MEMOWRIT( CPASTA+CARQUI,TEXTO )
Código: Selecionar todos
PROCEDURE HISTORTXT( aLocal )
LOCAL SvScr := SaveScreen(1,,,)
LOCAL SvCur := SetCursor(0)
LOCAL cMemo
LOCAL CPASTA := UPPER( ALLTRIM( aSystem[ SYS_FILEDIR ] ) )
LOCAL CARQUI := aLocal[1] + ALLTRIM( STR( ( aLocal[1] )->( RECNO() ) ) ) + ".HIS"
DisableMenu()
AJan( 3, xc-37, yc+10, xc+37, B_NONE, aColor[ CL_NORMAL ], 8 )
MyFrame( 4, xc-37, yc+9, xc+37 )
@ 3, xc-37 SAY PadR( "HISTORICOS: " + aLocal[1], 75) COLOR aColor[ CL_LI00 ]
Li23("Historicos de Movimentacao. Esc: Fecha Tela")
SetKey( K_F10, { || Grava() } )
SetCursor(2)
ALERT( 'LINHA 647 ' + MEMOREAD(CPASTA+'NOTA3.HIS') ) //aqui salvei com outro nome menor nao funcionou
cMemo := ' ' + MEMOREAD(CPASTA+CARQUI)
ALERT( 'LINHA 649 ' + cMemo) //aqui pega o nome real mas nao funciona
cMemo := MemoEdit( cMemo, 5, xc-34, yc+8, xc+34, .F. ,,70 )
EnableMenu(1)
SET KEY K_F10 TO
SetCursor(SvCur)
RestScreen(1,,,,SvScr)
RETURN
abraços
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
memo X txt
Você não mostrou o conteúdo de cPasta. Provavelmente esteja faltando a "\" (barra invertida) entre cPasta e o nome do arquivo cArqui.
Outra coisa: depois do seu MEMOEDIT, não vejo rotina alguma para gravação. Depois do MEMOEDIT eu colocaria:A função VESI_GRAVA intersepta o pressionamento do ESC durante o MEMOEDIT para que force a gravação após fazer qualquer alteração do texto. Para o caso dos arquivos ".HIS" você não está precisando editar, talvez apenas exibir. Mas irá precisar para a edição dos arquivos .NOT
Outra coisa: depois do seu MEMOEDIT, não vejo rotina alguma para gravação. Depois do MEMOEDIT eu colocaria:
Código: Selecionar todos
SET KEY 27 TO VESI_GRAVA()
cMemo := MEMOEDIT(cMemo, 5, xc-34, yc+8, xc+34, .F. ,,70 )
IF !LASTKEY()=27
IF LEN(ALLTRIM(cMemo))<4
IF FILE(cPasta+"\"+cArqui)
DELETE FILE(cPasta+"\"+cArqui)
ENDIF
ELSE
MEMOWRIT(cPasta+"\"+cArqui,HARDCR(cMemo))
ENDIF
ENDIF
SET KEY 27 TO
FUNCTION VESI_GRAVA()
IF MODET=.T.
IF PERGUNTA("Gravar antes de sair ?")="S"
KBDEMULATE(CHR(23))
ELSE
IF LASTKEY()=28
// HELP()
ENDIF
SET KEY 27 TO
KBDEMULATE(CHR(27))
ENDIF
ELSE
SET KEY 27 TO
KBDEMULATE(CHR(27))
ENDIF
RETURNUm 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.
memo X txt
Olá Amparo,
Existe uma alternativa para campos memos que eu postei, veja se atende a sua necessidade.
https://pctoledo.org/forum/viewto ... 43&t=11757
[]´s
Existe uma alternativa para campos memos que eu postei, veja se atende a sua necessidade.
https://pctoledo.org/forum/viewto ... 43&t=11757
[]´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)
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)
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
memo X txt
ola amigos
alexandre sua rotina é muito interessante vou estudala com carinho, obrigado
pablo
o elemento aSystem[SYS_FILEDIR] recebe a informação do diretorio de arquivos de usuario configurado no sistema, neste diretorio fica gravado todos os arquivos dos usuarios arquivos em TXT em EXECEL (quando o usuario vai tirar um relatorio pode escolher em TXT ou impressora).
so que eu estou colocando o diretorio para gravar os arquivos *.HIS (HISTORICOS) e *.NOT (NOTAS E OBSERVAÇOES) em um diretorio fixo e esquici de passar esta linha ou seja logo apos declarar estas linha:
tenho que colocar estas:
agora funcionou.
abraços
alexandre sua rotina é muito interessante vou estudala com carinho, obrigado
pablo
repare que a variavel cPasta esta declarada no inicio da PROCEDURE HISTORTXTPablo César escreveu:Você não mostrou o conteúdo de cPasta. Provavelmente esteja faltando a "\" (barra invertida) entre cPasta e o nome do arquivo cArqui.
Código: Selecionar todos
LOCAL CPASTA := UPPER( ALLTRIM( aSystem[ SYS_FILEDIR ] ) )so que eu estou colocando o diretorio para gravar os arquivos *.HIS (HISTORICOS) e *.NOT (NOTAS E OBSERVAÇOES) em um diretorio fixo e esquici de passar esta linha ou seja logo apos declarar estas linha:
Código: Selecionar todos
LOCAL CPASTA := UPPER( ALLTRIM( aSystem[ SYS_FILEDIR ] ) )
LOCAL CARQUI := aLocal[1] + ALLTRIM( STR( ( aLocal[1] )->( RECNO() ) ) ) + ".HIS"Código: Selecionar todos
IF Right( CPASTA, 1 ) <> "\"
CPASTA += "\HISTORICOS\"
ELSE
CPASTA += "HISTORICOS\"
ENDIFesta rotina o usuario nao pode alterar, pois ela grava tudo o que ele fez, por isso setei memoedit como .f. para edição, vou fazer a rotina para o arquivo *.NOT e irei usar seu exemplo.Pablo César escreveu:Outra coisa: depois do seu MEMOEDIT, não vejo rotina alguma para gravação. Depois do MEMOEDIT eu colocaria:
abraços
- Amparo
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 20 Ago 2010 10:38
- Localização: caieiras / sao paulo
memo X txt
ola amigos
Pablo,
esta eu fazendo alguns testes na montagem dos arquivos é so peguei parte da tabela de CLIENTES e chegou a gerar +- 14.590 geristros, pegunto: o sistema vai ficar lento com tantos arquivos a manipular?, seu sistema trabalha e gera mais ou menos quantos arquivos TXT?
se fiz certo, eu anexei dois arquivos so como exemplo.
abraços
Pablo,
esta eu fazendo alguns testes na montagem dos arquivos é so peguei parte da tabela de CLIENTES e chegou a gerar +- 14.590 geristros, pegunto: o sistema vai ficar lento com tantos arquivos a manipular?, seu sistema trabalha e gera mais ou menos quantos arquivos TXT?
se fiz certo, eu anexei dois arquivos so como exemplo.
abraços
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
memo X txt
Visto que praticamente você está precisando criar um arquivo ou até mesmo dois para cada registro, o que pode chegar a saturar a capacidade do diretório de repositório. Mas isso é uma limitação do proprio SO, que no momento não lembro qual seria o número máximo tolerável. Pelo sim pelo não, sugiro você separar em pastas diferentes para os arquivos HIS e os NOT. Além disso também sugiro que armaze em sub-pastas que guardem tais arquivos de 100 em 100 (ou até mesmo de 1000 em 1000), criando assim nomenclaturas diferenciadas.
Exemplo:
cSubPasta:="C:\SISTEMA\NOTAS\N0000001\" // aqui gravaria as notas de 1 a 100
DirMake(cSubPasta)
MemoWrit(cSubPasta+cArqui)
Exemplo:
cSubPasta:="C:\SISTEMA\NOTAS\N0000001\" // aqui gravaria as notas de 1 a 100
DirMake(cSubPasta)
MemoWrit(cSubPasta+cArqui)
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.
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
memo X txt
Amparo, resolveu ? Adiantou a minha dica ?
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.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
memo X txt
Olá!
Também acho que ficaria muito mais fácil criar 2 DBFs, nos moldes que o Simões sugeriu. No layout que ele mostrou, eu apenas acrescentaria 2 campos para armazenar a data e hora da geração do registro e talvez alguns outros para gravar quem incluiu ou alterou cada registro.
Acho que fica mais seguro, apesar de ser DBF. Você permite ao usuário digitar uma linha e a inclui no arquivo. Permite que ele selecione uma linha e altere ou exclua. Com o TXT, quando você abre na Memoedit(), permite que ele altere qualquer coisa.
Além disso, o arquivo poderia ser indexado pela chave desejada.
Também acho que ficaria muito mais fácil criar 2 DBFs, nos moldes que o Simões sugeriu. No layout que ele mostrou, eu apenas acrescentaria 2 campos para armazenar a data e hora da geração do registro e talvez alguns outros para gravar quem incluiu ou alterou cada registro.
Acho que fica mais seguro, apesar de ser DBF. Você permite ao usuário digitar uma linha e a inclui no arquivo. Permite que ele selecione uma linha e altere ou exclua. Com o TXT, quando você abre na Memoedit(), permite que ele altere qualquer coisa.
Além disso, o arquivo poderia ser indexado pela chave desejada.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)