Página 1 de 1
Dbedit - Como saber em que campo estou ?
Enviado: 21 Out 2004 11:39
por Clipper
Prezados Colegas
Como eu posso saber em que campo estou posicionado dentro de um DBEDIT() ? Pode ser o nome ou o número do campo, para mim tanto faz...
Agradeço desde já...
Até logo.
Marcelo
Enviado: 21 Out 2004 21:55
por Augusto
Amigo Marcelo,
Até onde eu sei vc só consegue saber em que registro do DBF vc está posicionado no DBEDIT() através do RECNO() agora... em que campo vc está... eu acho difícil prq o DBEDIT() mostra os campos de um determinado registro...
Enviado: 22 Out 2004 00:20
por ANDRIL
Ola Marcelo!
Utilize a função FIELDNAME(<nExp>) assim:
priv ar1[3]
// campos do seu DBF por exemplo:
ar1[1]="Nome"
ar1[2]="Codigo"
ar1[3]="Estado"
dbedit(00,00,24,79,ar1,"minhaudf")
function minhaudf
parameters modo, campo
? fieldName(campo) //informa o campo atual do dbedit
ou tente assim
? ar1[campo]
do case
case lastkey()=27
return 0
... coloque outros Cases aqui
otherwise
return 1
endcase
Abraços
Enviado: 22 Out 2004 07:17
por Clipper
Obrigado pelas respostas, porém nenhuma das soluções apresentadas servem.
A Função Fieldname() não serve porque eu precisaria passar o nome do campo, estou precisando pegar o nome ou o número do campo justamente para usar a função FIELDNAME() ou FIELDPOS(). Vou explicar exatamente o que eu quero :
Tenho minhas consultas e gostaria que ela fizesse uma busca relativa no campo em que o cursor estivesse posicionado, exemplo :
Código: Selecionar todos
CampoPosicionado=FIELDNAME(sei lá o que) ou FIELDPOS(sei lá o que)
IF CampoPosicionado="NOME"
LOCATE PROCURA$NOME
ELSEIF CampoPosicionado="ENDERECO"
LOCATE PROCURA$ENDERECO
ELSEIF CampoPosicionado="TELEFONE"
LOCATE PROCURA$TELEFONE
ENDIF
Essa busca é relativa, não usa indices, ou seja se eu quiser procurar a sequencia "ELO", o sistema me retornará todos os registros que tenham "ELO" no conteúdo, essa função já funciona perfeitamente para um único campo, mas gostaria de dar a opção de busca em vários campos.
Até logo.
Marcelo
Enviado: 22 Out 2004 17:28
por ANDRIL
Clipper escreveu:Obrigado pelas respostas, porém nenhuma das soluções apresentadas servem.
A Função Fieldname() não serve porque eu precisaria passar o nome do campo, estou precisando pegar o nome ou o número do campo justamente para usar a função FIELDNAME() ou FIELDPOS(). Vou explicar exatamente o que eu quero :
Tenho minhas consultas e gostaria que ela fizesse uma busca relativa no campo em que o cursor estivesse posicionado, exemplo :
Código: Selecionar todos
CampoPosicionado=FIELDNAME(sei lá o que) ou FIELDPOS(sei lá o que)
IF CampoPosicionado="NOME"
LOCATE PROCURA$NOME
ELSEIF CampoPosicionado="ENDERECO"
LOCATE PROCURA$ENDERECO
ELSEIF CampoPosicionado="TELEFONE"
LOCATE PROCURA$TELEFONE
ENDIF
Essa busca é relativa, não usa indices, ou seja se eu quiser procurar a sequencia "ELO", o sistema me retornará todos os registros que tenham "ELO" no conteúdo, essa função já funciona perfeitamente para um único campo, mas gostaria de dar a opção de busca em vários campos.
Até logo.
Marcelo
Ola,
No exemplo que citei acima consigo normalmente saber qual o nome do campo em que o usuario esta no momento e nao sei se vc entendeu meu
exemplo. Veja estas linhas:
function minhaudf
parameters modo, campo
? fieldName(
campo) //informa o campo atual do dbedit
OBSERVACAO: a palavra campo acima é um PARAMETRO no qual o proprio DBEDIT informa o numero do campo em que o cliente esta no momento, pelo menos declaranto o array da forma que eu citei acima.
Abracos
Enviado: 23 Out 2004 06:15
por Clipper
Prezado colega
Vamos a bronca...
Eu até entendi... e digamos que desta forma funcione, mas se o cara teclar seta para esquerda ou direita ou end ou home ? E aí ?
Agradeço a sua postagem mas acho que vou ter que partir pro TBrowse() mesmo...
Até logo.
Marcelo
Enviado: 23 Out 2004 11:20
por Maligno
A resposta do colega Andril está correta. E resolve seu problema totalmente. Acho que você só não entendeu a explicação dele.
Observe um detalhe: a própria função dbEdit() informa sua função de usuário qual é o número de ordem do campo atualmente focalizado, dentro da array de nomes de campos que você lhe passar,
mesmo que você se movimente com as setas de navegação.
Agora, se você não tiver matriz alguma, este número de ordem representará a exata ordem do campo dentro do arquivo, já que neste caso dbEdit() usará (internamente) como matriz de colunas todos os campos existentes no DBF, na mesma ordem.
Um código exemplo:
Código: Selecionar todos
priva aNomes := {}
AEval(dbStruct(),{|a|AAdd(aNomes,a[1])}) // apenas para ilustrar
use arquivo.dbf
dbedit(0,0,23,79,aNomes,"MyFunc")
--------------------------------------------------------------------------------
function MyFunc(nMode,nCol) // o segundo parâmetro é o seu número
@ 24,00 say "Nome do campo: "+aNomes[nCol] // no caso de existir uma matriz
@ 24,00 say "Nome do campo: "+Str(nCol,3) // no caso dela não existir
A função MyFunc() (dá erro de run-time) serve apenas para ilustrar como você poderá obter os nomes dos campos nas duas situações: informando ou não a matriz de nomes de campos.
[]'s
Maligno
http://www.buzinello.com/prg
Enviado: 24 Out 2004 07:58
por Clipper
Valeu !!!!
Obrigado ao colgegas, em especial ao Andril e ao Maligno (benigno)....
Vou testar amanhã....hoje eu tô de ressaca...
Marcelo