Tenho um arquivo dbf e quero adicionar um campo novo no arquivo.
Alguem pode me auxiliar
Locio
Adicionar um campo em um arquivo dbf via sw.
Moderador: Moderadores
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Adicionar um campo em um arquivo dbf via sw.
Olá!
Não testei...
Não testei...
Código: Selecionar todos
Function Main()
LOCAL aStru
Use OldDbf Exclusive New
aStru := OldDbf->( DbStruct() )
AAdd( aStru, { "NovoCampo", "C", 10, 0 } )
DbCreate( "NewDbf", aStru )
OldDbf->( DbCloseArea() )
Use NewDbf Exclusive new
Append from OldDbf
NewDbf->( DbCloseArea() )
Return NIL[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Re: Adicionar um campo em um arquivo dbf via sw.
Perfeito Alexandre, mas como faria para verificar primeiro se o campo existe?
Marcos Roberto.
Marcos Roberto.
Marcos Roberto
NetService Software
NetService Software
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Adicionar um campo em um arquivo dbf via sw.
Olá Marcos.
Acrescentei ao código do Alexandre, exemplo abaixo:
Acrescentei ao código do Alexandre, exemplo abaixo:
Código: Selecionar todos
Function Main()
LOCAL aStru
Use OldDbf Exclusive New
aStru := OldDbf->( DbStruct() )
// ADICIONANDO CAMPO
IF AScan( aStru,{|a| UPPER(a[1]) == "NOVOCAMPO" } ) = 0 // se não achar ele acresenta
AAdd( aStru, { "NOVOCAMPO", "C", 10, 0 } )
ENDIF
// ALTERANDO CAMPO EXISTENTE
nPOS:= AScan( aStru,{|a| UPPER(a[1]) == "NOMECAMPO" } )
IF nPOS > O
aStru[nPOS,3] := 20 // AUMENTOU O TAMANHO
ENDIF
DbCreate( "NewDbf", aStru )
OldDbf->( DbCloseArea() )
Use NewDbf Exclusive new
Append from OldDbf
NewDbf->( DbCloseArea() )
Return NILLeonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
marcos.gurupi
- Usuário Nível 4

- Mensagens: 939
- Registrado em: 06 Jul 2004 11:53
- Localização: Gurupi-TO
Re: Adicionar um campo em um arquivo dbf via sw.
Show amigo. Obrigado!
Marcos Roberto.
Marcos Roberto.
Marcos Roberto
NetService Software
NetService Software
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Adicionar um campo em um arquivo dbf via sw.
Olá!
Ótima intervenção Leo!
Para ficar perfeito e mais claro, só mesmo acrescentando informações do arquivo de cabeçalho DBStruct.ch:
Ficaria assim:
Como informação adicional, pode-se inserir um campo entre outros dois através da função AIns().
Ótima intervenção Leo!
Para ficar perfeito e mais claro, só mesmo acrescentando informações do arquivo de cabeçalho DBStruct.ch:
Código: Selecionar todos
#ifndef _DBSTRUCT_CH
#define _DBSTRUCT_CH
/* Positions for field structure array */
#define DBS_NAME 1
#define DBS_TYPE 2
#define DBS_LEN 3
#define DBS_DEC 4
/* Length of the field structure array */
#define DBS_ALEN 4
#endif /* _DBSTRUCT_CH */Código: Selecionar todos
#include "dbstruct.ch"
Function Main()
LOCAL aStru
Use OldDbf Exclusive New
aStru := OldDbf->( DbStruct() )
// ADICIONANDO CAMPO
IF AScan( aStru,{|a| UPPER(a[DBS_NAME]) == "NOVOCAMPO" } ) = 0 // se não achar ele acresenta
AAdd( aStru, { "NOVOCAMPO", "C", 10, 0 } )
ENDIF
// ALTERANDO CAMPO EXISTENTE
nPOS:= AScan( aStru,{|a| UPPER(a[DBS_NAME]) == "NOMECAMPO" } )
IF nPOS > O
aStru[nPOS,DBS_LEN] := 20 // AUMENTOU O TAMANHO
ENDIF
DbCreate( "NewDbf", aStru )
OldDbf->( DbCloseArea() )
Use NewDbf Exclusive new
Append from OldDbf
NewDbf->( DbCloseArea() )
Return NIL[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
