Página 1 de 1

DBF temporário

Enviado: 19 Abr 2005 21:57
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

Enviado: 19 Abr 2005 22:58
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.

Enviado: 21 Abr 2005 08:19
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

Enviado: 21 Abr 2005 09:16
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.

Enviado: 21 Abr 2005 13:12
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

Enviado: 21 Abr 2005 14:03
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