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
Campos do DBF
Moderador: Moderadores
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Edmo,
Utilize a função DBSTRUCT() para verificar a estrutura do DBF e depois mostrar os itens do campo.
Veja um exemplo:
Não testei, mas acho que funciona.
Abraços,
Toledo
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
NEXTAbraços,
Toledo
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
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
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
{POG - Programação Orientada a Gambiarra}
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
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.gvc escreveu:Só para ser do contra e não deixar o Toledo com a última palavra (Eh! Eh! Eh!)
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)
ENDIFUm clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.

