Trocar campo MEMO por arquivo TEXTO

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Zima
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 06 Jul 2004 19:39
Localização: Santo André

Trocar campo MEMO por arquivo TEXTO

Mensagem 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
evolver
Membro Master
Membro Master
Mensagens: 189
Registrado em: 28 Ago 2004 01:02
Localização: Cruz Alta - RS
Contato:

Mensagem 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.
Sergio "Evolver" Fagundes

CURVE-SE DIANTE DE MIM SER INSIGNIFICANTE, POIS EU SOU ROOT
Só respondo em PVT perguntas relativas ao que eu faço. Qualquer outra dúvida favor postar no fórum.
Peço aos veteranos que antes de responder a uma pergunta repetida dêem uma pesquisada e instruam a quem perguntou a fazer o mesmo.
Avatar do usuário
Zima
Usuário Nível 2
Usuário Nível 2
Mensagens: 87
Registrado em: 06 Jul 2004 19:39
Localização: Santo André

Mensagem 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
evolver
Membro Master
Membro Master
Mensagens: 189
Registrado em: 28 Ago 2004 01:02
Localização: Cruz Alta - RS
Contato:

Mensagem 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.
Sergio "Evolver" Fagundes

CURVE-SE DIANTE DE MIM SER INSIGNIFICANTE, POIS EU SOU ROOT
Só respondo em PVT perguntas relativas ao que eu faço. Qualquer outra dúvida favor postar no fórum.
Peço aos veteranos que antes de responder a uma pergunta repetida dêem uma pesquisada e instruam a quem perguntou a fazer o mesmo.
Responder