Página 1 de 1

Verificar se existe um campo

Enviado: 12 Mai 2006 08:54
por RenatoS2
durante a impressão, tenho que verificar se no arquivo existe um determinado campo

if ......='nome' (campo nome)
....
else
.....
endif

alguém sabe como faço esta pergunta?

Muito obrigado a todos pela atenção

Enviado: 12 Mai 2006 09:14
por Grings
Dê uma olhada na função FieldPos() no NG do Clipper.

Enviado: 12 Mai 2006 09:35
por Lopes
Acho que no caso a função que deve ser usada é a FIELDNAME(), que retorna o nome do campo.

Como não foi especificado muito do código onde essa verificação será empregada fica difícil poder ajudar mais.

Enviado: 12 Mai 2006 10:04
por RenatoS2
turma! valeu a atenção...
Caro Lopes,
Dependendo da estrutura do dbf eu mudo a impressão... ou seja:

verifico o campo....
se existir eu imprimo ele
se não
imprimo outro campo.

capito?

Enviado: 12 Mai 2006 21:36
por Augusto
Parceiro... (somente a título de ajuda)

A minha experiência me diz que o seu problema não está em achar uma função, rotina ou seja lá o que for para resolver sua questão...
Ela me diz que vc está equivocado na estrutura "lógica" que está usando para manipular sua base de dados...

O que me intriga é que, conforme vc mesmo diz...
durante a impressão, tenho que verificar se no arquivo existe um determinado campo

Não faz sentido... Como vc pode ter essa dúvida ??
Vc não sabe a estrutura da tabela DBF que está usando ??
Não sabe que campos a compõe ??

Do contrário, ainda que simples, sua dúvida não seria talvez...
Como saber se um determinado campo está preenchido ou não ??
Ou ainda...
Como saber se um determinado campo tem um determinado conteúdo ou outro ??

Talvez seja mais interessante vc rever a estrutura da sua base de dados na sua composição. Desta forma, talvez vc consiga diminuir e, ao mesmo tempo, otimizar a sua utilização/acesso...

Enviado: 13 Mai 2006 02:25
por Vander
Amigo Renato;

Enviei um exemplo de como verifivar se existe um determinado campo em vários DBF's para o seu E-mail (renato686@hotmail.com), talvez te ajude em algo.

Vander

Enviado: 15 Mai 2006 09:14
por Grings
Vander, desculpe lhe criticar mas esse tipo de postagem que vc fez é algo que não engrandece o fórum em absolutamente nada. Se vc já mandou por e-mail não faz sentido citar isso aquí, o mais lógico seria postar a rotina para que todos possam avaliar e quem sabe aprender mais alguma coisa.

Enviado: 15 Mai 2006 10:53
por kiko
durante a impressão, tenho que verificar se no arquivo existe um determinado campo
depende....
se ele usa um gerador de relatorio generico, entao ele precisa testar para saber se o campo q vai ser impresso existe no dbf em questao.
mas isso tb depende....
se for realmente um gerador de relatorio generico, eu imagino q seja uma funçao, portanto, poderiam ser passado os campos a serem impressos como parametros.....
mas isso eh complicado...se vc precisar de um relatorio mais detalhado, ja foge totalmente da logica inicial...
eu, particularmente, ao gerar relatorios, indico quais campos serao impressos, faço os filtros com operadores, sem nada de set filter nem coisas do tipo...acho mais pratico assim, aos meus olhos, deixa o codigo mais legivel...hehehehe
mas isso vai de cada um...

Enviado: 16 Mai 2006 14:36
por Vander
Amigo Grings;

Você tem toda razão, abaixo segue o mesmo código que enviei.


Vander

Código: Selecionar todos

set intensity on
set scoreboard off
IF !FILE("NOME_ARQ.NDS")
   create ARQ.TMP
   criacamp("A_R_Q_U_I ","C",12,0)
   commit
   create NOME_ARQ.NDS from ARQ.TMP
   erase ARQ.TMP
   close databases
ENDIF
IF !FILE("POSI_CAM.NDS")
   create ARQ.TMP
   criacamp("ARQUIVO_","C",12,0)
   criacamp("POSICAO_","C",03,0)
   criacamp("NOMEDOC_","C",12,0)
   commit
   create POSI_CAM.NDS from ARQ.TMP
   erase ARQ.TMP
   close databases
ENDIF
_total=0
a_campo=0
_campo1=""
set color to N/BGR
cls
@ 00,00 say PADC("LOCALIZADOR DE CAMPO - VersÆo 1.0",80) COLOR "N/BGR"
@ 02,28 TO 23,79
@ 03,30 SAY "NOTAS"
@ 05,31 SAY 'Fun‡Æo "temcampo" fornecida por Rochinha'
@ 07,31 SAY "Se for informado apenas a parte inicial do campo"
@ 08,29 SAY "e houver mais de um campo que satisfa‡a a condi‡Æo"
@ 09,29 say "em algum arquivo, apenas ser   mostrado o primeiro"
@ 10,29 say "campo encontrado."
@ 12,31 say "Ser  analizado apenas o diretorio corrente."
@ 02,00 SAY REPLICATE("Ä",28)+CHR(194)
@ 23,00 SAY REPLICATE("Ä",28)+CHR(193)
do while .t.
   @ 03,00 clear to 22,27
   run ("dir *.dbf/b > dbfs.txt")
   _ccamp=space(10)
   @ 01,00 say PADR(" Campo :            ³ Informe o nome do campo ou a parte inicial a localizar",80) COLOR "N/BGR"
   @ 24,00 say PADC(" ESC - Finalizar",80) COLOR "N/BGR"
   set color to W/N,GR+/R,,,W+/B
   @ 01,09 get _ccamp pict "@!"
   read
   if lastkey()=27
      exit
   endif
   _ccampo=alltrim(_ccamp)
   sele 1
   use NOME_ARQ.NDS  alias N_O_M_EA
 ZAP
   appe from DBFS sdf all
   arqu=A_R_Q_U_I
   SELE 2
   USE &ARQU alias neutro
 ZAP
   SELE 3
   USE POSI_CAM.NDS ALIAS P_O_S_IC
 ZAP
   SELE N_O_M_EA
   go top
   do while !eof()
      arqu=A_R_Q_U_I
      sele 2
      USE &ARQU alias neutro
      IF temcampo(_ccampo)
         SELE P_O_S_IC
         APPE BLAN
         REPLA ARQUIVO_ WITH arqu
         REPLA POSICAO_ WITH strzero(a_campo,3)
         REPLA NOMEDOC_ WITH _campo1
         _total=_total+1
      endif
     sele N_O_M_EA
     skip
   enddo
   SELE P_O_S_IC
   GO TOP
   DECLARE CAMP[1],KOME[1]
   CAMP[1]="ARQUIVO_+'³'+POSICAO_+'³'+NOMEDOC_"
   KOME[1]=" ARQUIVO    ³POS³NOME CAMPO"
   @ 24,00 say PADC("ENTER - Voltar",80) COLOR "N/BGR"
   SET COLOR TO W+/BGR
   @ 20,00 TO 20,27
   @ 21,02 SAY strzero(_total,4)+" Arquivos"
   @ 22,02 SAY "Com o campo "+_ccampo
   DBEDIT(03,00,19,27,CAMP,"NOS1",,KOME,chr(254))
   SELE P_O_S_IC
   ZAP
ENDDO
set color to
cls
erase dbfs.txt
erase NOME_ARQ.NDS
erase POSI_CAM.NDS
*
FUNC NOS1
PARA MODE,OPC
DO CASE
   CASE MODE=0
       RETURN 1
   CASE MODE=1
        RETURN 1
   CASE MODE=2
        RETURN 1
   CASE MODE=3
        @ 07,00 say "NÆo localozado arquivos com"
        @ 08,00 say "o campo "+_ccampo
        tone(1500,2)
        inkey(3)
        return 0
   CASE LASTKEY()=13
        RETURN 0
ENDCASE
*
Function temcampo(campo)
for i=1 to fcount()
    if alltrim(field(i))=alltrim(campo)
       a_campo=i
       _campo1=FIELDNAME(I)
      return .t.
   endif
next
return .f.
*
procedure CRIACAMP
parameters nome,tipo,tam,dec
append blank
replace field_name with nome
replace field_type with tipo
replace field_len with tam
replace field_dec with dec