Campos do DBF

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Edmo
Usuário Nível 2
Usuário Nível 2
Mensagens: 67
Registrado em: 18 Ago 2003 17:41

Campos do DBF

Mensagem 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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem 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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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
"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}
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem 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.
Um 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.
Responder