Página 1 de 1

Trocar campo MEMO por arquivo TEXTO

Enviado: 16 Mar 2005 11:02
por Zima
Olá,

Estava fazendo uma pesquisa aqui no fórum, mas não encontrei a solução.

Gostaria de trocar um campo MEMO (OBSERVAÇÃO), que tenho em um banco de dados (CLIENTES.DBF), por um arquivo texto ... É possível isso dentro do CLIPPER ?

Por exemplo: gravar um texto para determinado cliente e depois salvar em um arquivo texto. Mais tarde o usuário vai querer alterar esse texto ... vai no cliente, abre esse arquivo, modifica o texto e salva novamente ...

Sds,
Zima

Enviado: 16 Mar 2005 16:14
por evolver
Isso depende muito Zima.

Se for um arquivo separado por cliente funciona perfeito é só gravar o arquivo com um nome relativo por exemplo ao código do cliente (tipo cl000001.txt) usando o memowrit(). Depois pra ler usa o memoread().

Se for um único TXT para todos os clientes ai a coisa aperta pois tu vai ter que criar algo similar ao modo que é usado internamente ao clipper para ler arquivos memo. Para cada registro ele guarda internamente (não vísivel) a posição dentro do arquivo onde se encontra o texto para ele.

Enviado: 17 Mar 2005 10:33
por Zima
Olá Sergio,

Valeu mesmo pela dica. Agora vou ver se me livro dessa campo MEMO !

Estou trabalhando com sua primeira hipótese (1 arquivo por cliente).

Funcionou quse perfeitamente, a não ser por um detalhe que ainda não consegui entender: preciso teclar duas vezes CTRL+W para gravar no arquivo e sair da tela de edição do arquivo TXT. Veja abaixo minha rotina, e se notar onde devo alterar para resolver esse problema (teclar apenas uma vez CTRL+W), te agradeço.

Código: Selecionar todos

SAVE SCREEN
              SET COLOR TO
              @ 24,00 CLEAR
              @ 23,01 SAY REPLICATE(CHR(205),78)
              @ 10,01 SAY REPLICATE(CHR(205),78)
              FOR j=8 TO 22
                  @ j,79 SAY CHR(186)
              NEXT j
              SET COLOR TO W+/RB
              @ 24,50 SAY "<Ctrl>+W: Grava   <Esc> Aborta"
              SET COLOR TO BG+
              @ 07,01 SAY "   Código Filial              Nome do Cliente                   CNPJ/CPF"
              DO Aviso WITH 23,"Dados Complementares do Cliente"
              SET COLOR TO
              cString = MEMOREAD("Teste.txt")
              KEYBOARD CHR(30)
              SET CURSOR ON
              MEMOWRIT("Teste.txt",MEMOEDIT(cString,11,02,22,77,.T.,"Mfunc"))
              SET CURSOR OFF
              RESTORE SCREEN



FUNCTION Mfunc
***************************************************************************
* Sintaxe...: Mfunc(modo,lin,col)
* Objetivo..: Auxiliar a edição de campos memo, mostrando a linha e a coluna
*             onde está  posicionado o cursor através da função MEMOEDIT().
* Parâmetros: modo: o modo de operação da função MEMOEDIT()
*             lin : a linha onde est  posicionado o cursor
*             col : a coluna onde est  posicionado o cursor
***************************************************************************
PARAMETERS modo, lin, col
ret_val = 0
IF modo = 0
   * idle
   SET COLOR TO W+
   @ 24,00 SAY "Linha:"+STR(lin,3)
   @ 24,10 SAY "Coluna:"+STR(col,3)
   SET COLOR TO
ENDIF
RETURN ret_val
Um abraço,
Marcelo

Enviado: 17 Mar 2005 13:19
por evolver
O detalhe é que o memoedit exige confirmação do CTRL+W para gravar o arquivo e sair.

Tente o seguinte

Código: Selecionar todos

FUNCTION Mfunc
PARAMETERS modo, lin, col
ret_val = 0
// alterado aqui
if lastkey() = K_F2
    return 27
endif
//fim da alteração
IF modo = 0
   * idle
   SET COLOR TO W+
   @ 24,00 SAY "Linha:"+STR(lin,3)
   @ 24,10 SAY "Coluna:"+STR(col,3)
   SET COLOR TO
ENDIF
RETURN ret_val 
Quando apertar F2 ele vai dar retorno 27 que é a tecla CTRl+W forçando o fechamento com salvamento.