01 Out 2013 16:02
01 Out 2013 17:04
#include "Dbstruct.ch"
FUNCTION Main()
CriarTabela()
ConverterTabela()
RETURN NIL
//----------------------------------------------------------------------------------
FUNCTION CriarTabela()
// Cria uma tabela para testes
LOCAL aStru := {}
LOCAL nPos
AAdd( aStru, {"Codigo", "C", 50, 0 } )
AAdd( aStru, {"Nome", "C", 20, 0 } )
DbCreate( "Teste", aStru )
USE Teste EXCLUSIVE NEW
FOR nPos := 1 TO 100
Teste->( DbAppend() )
Teste->codigo := nPos
Teste->nome := "Nome " + LTrim( Str( nPos )
NEXT
Teste->( DbCloseArea() )
RETURN NIL
//----------------------------------------------------------------------------------
FUNCTION ConverterTabela()
LOCAL aStru := {}
LOCAL nPos
LOCAL nLen
// Abre a tabela teste e...
USE Teste EXCLUSIVE NEW
// captura seu layout
aStru := Teste->( DbStruct() )
// Quantidade de campos
nLen := Len( aStru )
// Altera o tamanho do campo "Nome" de 20 para 50 bytes
FOR nPos := 1 TO nLen
IF aStru[ nPos, F_NAME ] == "Nome"
aStru[ nPos, F_SIZE ] := 50
ENDIF
NEXT
// Acrescenta o campo "Cidade" com 20 bytes na nova estrutura
AAdd( aStru, {"Cidade", "C", 20, 0 } )
// ria uma tabela temporária com o novo layout
DbCreate( "_Teste", aStru )
// abre a tabela temporária (vazia)
USE _Teste EXCLUSIVE NEW
// importa os dados da tabela existente para a nova tabela, já no novo layout
APPEND FROM Teste
// fecha a temporária
_Teste->( DbCloseArea() )
// deleta a tabela original
Ferase( "Teste.DBF" )
// renomeia a nova tabela para o nome da original
IF FRENAME("_Teste.DBF", "Teste.DBF") == -1
Alert( "Erro ao renomear arquivo convertido (_Test.DBF)." )
ELSE
Alert( "Arquivo convertido com sucesso." )
ENDIF
RETURN NIL
//----------------------------------------------------------------------------------
01 Out 2013 17:08
01 Out 2013 17:19
02 Out 2013 12:47
02 Out 2013 13:36
02 Out 2013 19:45
#include "Dbstruct.ch"
FUNCTION Main()
AltD()
CriarTabela()
ConverterTabela()
RETURN NIL
//----------------------------------------------------------------------------------
FUNCTION CriarTabela()
// Cria uma tabela para testes
LOCAL aStru := {}
LOCAL nPos
AAdd( aStru, {"Codigo", "N", 5, 0 } )
AAdd( aStru, {"Nome", "C", 20, 0 } )
DbCreate( "Teste", aStru )
USE Teste EXCLUSIVE NEW
FOR nPos := 1 TO 100
Teste->( DbAppend() )
Teste->codigo := nPos
Teste->nome := "Nome " + LTrim( Str( nPos ) )
NEXT
Teste->( DbCloseArea() )
RETURN NIL
//----------------------------------------------------------------------------------
FUNCTION ConverterTabela()
LOCAL aStru := {}
LOCAL nPos
LOCAL nLen
// Abre a tabela teste e...
USE Teste EXCLUSIVE NEW
// captura seu layout
aStru := Teste->( DbStruct() )
Teste->( DbCloseArea() )
// Quantidade de campos
nLen := Len( aStru )
// Altera o tamanho do campo "Nome" de 20 para 50 bytes
FOR nPos := 1 TO nLen
IF aStru[ nPos, DBS_NAME ] == "NOME"
aStru[ nPos, DBS_LEN ] := 50
ENDIF
NEXT
// Acrescenta o campo "Cidade" com 20 bytes na nova estrutura
AAdd( aStru, {"Cidade", "C", 20, 0 } )
// Cria uma tabela temporária com o novo layout
DbCreate( "_Teste", aStru )
// abre a tabela temporária (vazia)
USE _Teste EXCLUSIVE NEW
// importa os dados da tabela existente para a nova tabela, já no novo layout
APPEND FROM Teste
// fecha a temporária
_Teste->( DbCloseArea() )
// deleta a tabela original
FErase( "Teste.DBF" )
// renomeia a nova tabela para o nome da original
IF FRename("_Teste.DBF", "Teste.DBF") == -1
Alert( "Erro ao renomear arquivo convertido (_Test.DBF)." )
ELSE
Alert( "Arquivo convertido com sucesso." )
ENDIF
RETURN NIL
//----------------------------------------------------------------------------------
02 Out 2013 20:44