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