Página 1 de 1
Campos do DBF
Enviado: 06 Jul 2004 08:48
por Edmo
Como posso verificar a estrutura de um Campo Numérico em um DBF ?
Por exemplo: no DBF a estrutra é : CODPRO , N , 16 , 0
Como posso verificar pelo meu programa que o campo CODPRO é númerico e possui 16 posições e 0 decimal ?
Obrigado
Edmo
Enviado: 06 Jul 2004 09:21
por Toledo
Edmo,
Utilize a função DBSTRUCT() para verificar a estrutura do DBF e depois mostrar os itens do campo.
Veja um exemplo:
Código: Selecionar todos
SELECT 1
USE PRODUTOS
aStruc:=DBSTRUCT()
FOR i=1 TO LEN(aStruc)
IF aStruc[i,1]="CODPRO"
? aStruc[i,1]+", "+aStruc[i,2]+", "+STR(aStruc[i,3],3,0)+", "+STR(aStruc[i,4],2,0)
ENDIF
NEXT
Não testei, mas acho que funciona.
Abraços,
Toledo
Enviado: 15 Fev 2008 13:34
por gvc
Só para ser do contra e não deixar o Toledo com a última palavra (Eh! Eh! Eh!)
astruc := dbstruct()
i := ascan(astruc, {|x| x[1] = "CODPRO"})
if i # 0
? astruc[i, 1] + ", " + astruc[i, 2] + ", " + str(astruc[i, 3], 3) + ", " + str(astruc[i, 4], 2)
end
:xau
Enviado: 18 Fev 2008 09:35
por Pablo César
gvc escreveu:Só para ser do contra e não deixar o Toledo com a última palavra (Eh! Eh! Eh!)
Talvez você não fique com a ultima palavra... hihihi (ou talvez nem eu... hihihi). No entanto eu decidí postar um exemplo no qual faz a "verificação" no próprio programa e com isto designar alguma função e não listar a estrutura apenas para o usuário ver. Ja que acredito que o colega precisa resolver isso no próprio programa dele. Mas enfim, só para exemplificar melhor, nada que venha atribuir grandiosamente algo... ja que Toledo e GVC deram o caminho das pedras.
Agora se quiser fazer um utilitário para tal finalidade, pode compilar este ou até mesmo insirir parte dele no seu sistema:
Código: Selecionar todos
PARAMETERS VDBF
CLS
IF VDBF=NIL
? "Deve informar o parametro com o nome do DBF."
QUIT
ELSE
IF "." $ VDBF
IF "DBF" $ VDBF
IF !FILE(VDBF)
? "arquivo nao encontrado !"
QUIT
ENDIF
ELSE
? "O arquivo deve ser um DBF" // Tire esta opcao caso seu DBF esteja com outra extensao
ENDIF
ELSE
IF !FILE(VDBF+".DBF")
? "arquivo nao encontrado !"
QUIT
ENDIF
ENDIF
ENDIF
USE (VDBF) SHARE
CAMPOS=DBSTRUCT()
CLOSE DATABASES
ELEMENTO:=ASCAN(CAMPOS, {|aVal| aVal[1] == "CODPRO"})
IF ELEMENTO>1
IF CAMPOS[ELEMENTO,2]="N" .AND. CAMPOS[ELEMENTO,3]=16 .AND. CAMPOS[ELEMENTO,4]=0
ALERT("O campo CODPRO, possue a estrutura esperada.")
ELSE
ALERT("O campo CODPRO, possue a seguinte estrutura:;;Tipo: "+CAMPOS[ELEMENTO,2]+";Tamanho: "+ALLTRIM(STR(CAMPOS[ELEMENTO,3]))+";Decimal: "+ALLTRIM(STR(CAMPOS[ELEMENTO,4])) )
ENDIF
ELSE
ALERT("Nao existe o campo CODPRO no "+VDBF)
ENDIF
Claro que se implementar este código no seu sistema, não precisará do parâmetro externo nem a verificação/tratamento da variável VDBF. É só retirar.