[quote]
Para o tamanho do campo, use: 
[code]FieldLen( <nFieldPos> ) --> nFieldLength[/code]

Para o nmero de decimais, use:
[code]FieldDec( <nFieldPos> ) --> nDecimalPlaces[/code]

Agora  s ajustar de acordo com as suas necessidades...

 
[/quote]


[quote]
Fala Kapiaba...

Ento, o que voc pode fazer por exemplo :

[code]
// Uma coisa que voc ter que saber de antemo  a posio do campo que
//quer pegar o tamanho

nTam:= FieldLen( <nFieldPos> )
nDec:= FieldDec( <nFieldPos> )

IF FieldType( <nFieldPos> ) == "C"
   aGETS[1]:= SPACE( nTam ) // Para CHAR, sem maiores problemas
ELSEIF FieldType( <nFieldPos> ) == "N"
   aGETS[1]:= VAL(REPL("9",nTam))
   cMask:= "@E "
   // Para a mscara de Numrico, d um pouco mais de trabalho se for fazer na unha
   For i = nTam to 1 STEP - 1
      cMask+= IF((nTam-i)%3==0,",","")+"9"
   NEXT
   cMask+= "."+REPL("9",nDec) // Parte decimal da mascara
ELSEIF FieldType( <nFieldPos> ) == "D"
   aGETS[1]:= CTOD("99/99/9999")
ENDIF
[/code]

Bom, acho que a rotina seria mais ou menos assim, s no testei... talvez (e muito provavelmente) o FOR precise de algum ajuste...

Quando o campo for C, s setando a varivel com SPACE( tamanho ) o GET estar OK. No numrico, o problemas  na criao da mscara... veja se isso funciona...

 
[/quote]



[quote]

No serviria o DbStruct() ?
Ele retorna um array com o nome dos campos, tipo, tamanho e decimal...

Com ele voc poderia fazer uma funo mais ou menos assim:

Function DadosCampo(cCampo)

[code]
Local aBanco := DbStruct()

If Empty(cCampo)
   Alert("Erro")
   Return Nil
end

nPos := aScan(aBanco,{ |x| x[1] = cCampo})   

Return aBanco[nPos]

****************************************************************************
function MascaraPreco(nDigito,nDecimais)
****************************************************************************
local Result

default nDigito := 14

   //-- formata a mscara de acordo com o nmero desejado

   if nDigito == 14
          Result := " 99,999,999.99"
   elseif nDigito == 13
          Result := " 9,999,999.99"
   elseif nDigito == 12
          Result := "  999,999.99"
   elseif nDigito == 11
          Result := " 999,999.99"
   elseif nDigito == 10
          Result := " 99,999.99"
   elseif nDigito == 09
          Result := " 9,999.99"
   elseif nDigito == 08
          Result := "  999.99"
   elseif nDigito == 07
          Result := " 999.99"
   elseif nDigito == 06
          Result := " 99.99"
   end

      //-- Verifica se a quantidade de casas decimais do produto  3

      if nDecimais == 3

         //-- formata a mscara de acordo com o nmero desejado

         if nDigito == 14
                Result := "99,999,999.999"
         elseif nDigito == 13
                Result := "9,999,999.999"
         elseif nDigito == 12
                Result := " 999,999.999"
         elseif nDigito == 11
                Result := "999,999.999"
         elseif nDigito == 10
                Result := "99,999.999"
         elseif nDigito == 09
                Result := "9,999.999"
         elseif nDigito == 08
                Result := " 999.999"
         elseif nDigito == 07
                Result := "999.999"
         elseif nDigito == 06
                Result := "99.999"
         end
      end
   end 
Return Result

/*------------------------------------------------------------------------*/
[/code]
MSN: samirabreu@hotmail.com
Skype: SamirAbreu
xHarbour 1.1.0 + FwXh 8.02

Editado por - sambomb on 02/02/2009  11:00:13
[/quote]



[quote]
Bom, quanto  mscara do numrico... que acho que era o X da questo, tente assim:

[code]
cMask:= "@E "   
For i = 1 to ntam
   cMask+= "9"+IF((nTam-i)%3==0,",","")
NEXT
cMask:= LEFT(cMask,LEN(cMask)-1) // Tira uma virgula indesejada
cMask+= if(nDec>0,"."+REPL("9",nDec),"")
[/code]

 para funcionar agora!


 
[/quote]



[quote="FranciscoA"][quote="karinha"]Tamao del Campo do Banco de Datos.

Buen dia, seores!  Ayuda por favor

Preciso saber, como pegar el TAMAO del CAMPO(Width) del BANCO DE DATOS.

Por Ejemplo:

Se el CAMPO for C -> Caracter, e tuver 30 caracteres, preciso retornar al GET, la mascara:


aGet[1] := SPACE(30)

Se for NUMERICO:

aGet[2] := o TAMAO DEL CAMPO, para a mascara tipo: "@E 9,999.99"

Se for FECHA:

aGet[3] := CTOD( "99/99/9999")

Gracias de  antemano.

Abrazos.[/quote]


A ver si entend:

aGet[1] := SPACE(len(cDBF->cCampo))
aGet[2] := Replicate("9",len(str(cDBF->nCampo))) PICTURE "999,999.99"

SET DATE BRITISH
SET CENTURY ON
aGet[3] := DTOC(cDBF->dCampo)

Saludos.[/quote]


[quote]
[quote]
S uma duvida Simples.

Qual a funao q eu poderia usar pra retornar o Tipo do campo do DBF eu uso??
[/quote]


pra que escrever codigo se existem funes especificas pra isto????

// retorna o tipo do campo
FieldType(FieldPos('NOME'))

......

fieldpos(<cCampo>)  => retorna a posio do campo no arquivo

fieldlen(<nPos>) => retorna o tamanho do campo da ensima posio

fieldname(<nPOs>) => retorna o nome do campo da ensima posio

fieldtype(<nPOs>) => retorna o tipo do campo da ensima posio



[b]Marllon Figueiredo[/b]
Analista de Sistemas ERP/CRM
Porto Alegre - RS
siscatsoftware@hotmail.com
FWH for (x)Harbour, xMate, Clipper, MsSQL, Oracle, Postgres, MySQL, TopConnect, ADS
Verses: FWH 2.6 e 2.7 - xHarbour 0.99.4 - 0.99.60
[/quote]
