Esta rotina faz parte de um sistema beta para acesso a tabela DBF com driver DBFCDX, enfim vamos falar do módulo e não do sistema em si, o módulo faz a exportação da estrutura de uma tabela aberta e também de todos os seus registros, apartir de uma l
ista com os campos (fields) da tabela, vamos clicando e colando na grade ao lado a estrutura da nova tabela, podemos colocar campos em branco e também modificar nome atual de um campo para um novo nome, após todo este preenchimento, você apenas clica sobre o botão para exportar e o módulo gera a nova tabela com a nova estrutura e os dados da tabela anterior, abaixo o código fonte do botão exportar.
Espero que seja útil para vocês, ou pelo menos que dê para olhar o código e daí aproveitar algo nos programa que vocês estiverem fazendo.
#include "hmg.ch"
declare window export
Function export_button_export_action
LOCAL cFile, aStructCreate := {}, aStructExport := {}
cFile := ALLTRIM( GETPROPERTY("export","text_file","VALUE") )
IF EMPTY(cFile)
SETPROPERTY("export","text_file","SETFOCUS")
ENDIF
IF FILE(cFile)
MSGSTOP("File found, change file name!"+CHR(13)+CHR(10)+cFile,"DBF Editor")
SETPROPERTY("export","text_file","SETFOCUS")
ENDIF
nItemCount := GETPROPERTY("export","grid_export","ItemCount")
FOR nAux := 1 TO nItemCount
aExport := GETPROPERTY("export","grid_export","ITEM", nAux )
AADD( aStructCreate, { aExport[2], aExport[3], VAL(aExport[4]), VAL(aExport[5]) } )
AADD( aStructExport, aExport[1] )
NEXT
DBCREATE( cFile, aStructCreate )
DBUSEAREA(.t.,,cFile,"temp",.f.)
SELECT dbf
DBGOTOP()
SETPROPERTY("export","progressbar_export","rangemax",LASTREC())
WHILE !EOF()
SELECT temp
temp->( DBAPPEND() )
FOR nAux := 1 TO LEN(aStructExport)
IF !EMPTY(aStructExport[nAux]) .AND. !EMPTY(aStructCreate[nAux,1])
SELECT dbf
xVar := dbf->&(aStructExport[nAux])
SELECT temp
REPLACE temp->&(aStructCreate[nAux,1]) WITH xVar
temp->( DBCOMMIT() )
ENDIF
NEXT
SELECT dbf
SETPROPERTY("export","progressbar_export","VALUE",RECNO())
DBSKIP(+1)
ENDDO
SELECT temp
temp->( DBCLOSEAREA() )
MSGINFO("Table Struct anda Data exported!","DBF Editor")
DOMETHOD( "export","RELEASE" )
Return Nil
Esse código possui dependência do restante de um sistema, foi postado aqui a pedido de visitantes para fins apenas de estudo, (modelo) então é óbvio que não pode apenas ser compilado, pois não irá funcionar. Porém espero que sirva como base para algum projeto que você esteja fazendo.
Ate+
Daniel, onde faço o download deste interessante utilitário?
Obrigado.