DBF temporário

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

DBF temporário

Mensagem por janio »

Olá a Todos!

Alguém pode postar aki como se cria um DBF temporário e depois se copia o conteúdo desse DBF para outro DEFINITIVO?

Além disso, tenho as seguintes dúvidas:

1-) Qual é mesmo a diferença entre o COPY TO e o APPEND FROM?

2-) Se eu criar um campo no DBF temporário chamado CODPED e, utilizando o COPY TO ou APPEND FROM, quiser copiar o conteúdo desse campo para o campo PEDIDO no DBF DEFINITIVO... como faço?

Um Abraço,

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
evolver
Membro Master
Membro Master
Mensagens: 189
Registrado em: 28 Ago 2004 01:02
Localização: Cruz Alta - RS
Contato:

Mensagem por evolver »

Bem copy to é copiar o banco de dados para outro ou seja ele vai copiar os dados para outro, append from é adicionar de ou seja ele adiciona ao banco de dados atual os dados de um banco de dados externo.

Quanto a segunda pergunta apenas com o copy to que tu vai poder copiar os dados para outra mas para retornar é bom criar uma rotina para evitar que os dados dupliquem.
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
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Valeu Evolver!


Agora preciso de um exemplo de criação de DBF temporário e cópia deste para o definitivo.

Um Abraço,

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
supgaroto
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 19 Ago 2003 14:24
Localização: Rua Aristotoles Fernandes Valdares, 1190

Mensagem por supgaroto »

Código: Selecionar todos

NINX=0
DO WHILE .T.
   IF !FILE("SET_"+STRZERO(NINX,2)+".TMP")
      WGDEST:="SET_"+STRZERO(NINX,2)
      Private astru
      astru := {;
                       {"CODIGO","C",08,00},;
                       {"CLIENTE","C",39,00}}
      DBCREATE(WGDEST+".TMP",aSTRU)
      EXIT
   ENDIF
   NINX++
ENDDO
wgdbf:="SET_"+STRZERO(NINX,2)+".TMP"
select 2
use  &wgdbf
aqui vc salva as informações
select 1
use cliente
select 2
go top
do while !eof()
     select 1
     append blank
     replace cod_cli with codigo
     replace nome   with cliente
     commit
     select 2
     skip
enddo
select 2
close
delete file(Wgdbf)
Ao meu ver este é o modo mais seguro pra fazer isso.
evolver
Membro Master
Membro Master
Mensagens: 189
Registrado em: 28 Ago 2004 01:02
Localização: Cruz Alta - RS
Contato:

Mensagem por evolver »

O código do garoto tá muito bom mas não preve alteração dos dados, apenas a inserção similar ao apend blank e copia similar ao copy to.

Vamos a umas pequenas modificações no código.

Código: Selecionar todos

procedure cptotemp()
public wgdbf:=""
NINX=0
DO WHILE .T.
   IF !FILE("SET_"+STRZERO(NINX,2)+".TMP")
      EXIT
   ENDIF
   NINX++
ENDDO
wgdbf:="SET_"+STRZERO(NINX,2)+".TMP"
use cliente index cli001 //cli001 - strzero(codigo,4)
copy to &wgdbf for cep = "98050000" //coloque qualquer condicao aqui
return

procedure rtfromtemp()
use cliente index cli001 alias cliente
use &wgdbf alias temp new
go top
do while !eof()
     v_codigo=codigo
     select client
     seek strzero(v_codigo,4)
     if eof()
         append blank
    endif
    replace codigo with temp->codigo
    replace cliente with temp->cliente
    ...
    ...
    commit
    select temp
    skip
enddo
select temp // so pra garantir mas nao é necessário
use
ferase(wgdbf) 
select cliente
return
Outra forma de fazer o replace de um pro outro sem se preocupar com o nome dos campos seria

Código: Selecionar todos

procedure rtfromtemp()
...
...
...
    if eof()
        append blank
    endif
    for i = 1 to fcount()
        cliente->(fieldname(i)):=temp->(fieldname(i))
    next
...
...
return
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
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Boa tarde a todos!

Agradeço ao Evolver e ao SupGaroto pelas respostas.

Coloquei este post pq eu estava e ainda estou fazendo uso de uma matriz pra guardar os itens de cada venda (produtos)... prar depois repassar pro DBF na hora de salvar a venda.

Só que eu estava encontrando dificuldade quando necessitava manipular esses dados em execução... tipo ter que excluir algum produto...

Talvez com um DBF temporário esta operação se torne mais fácil... vou tentar jogar os produtos da venda num DBF temporário e no final da venda repasso pro definitivo.

Obrigado a todos

Um Abraço

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder