Dbedit - Como saber em que campo estou ?

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Dbedit - Como saber em que campo estou ?

Mensagem 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
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem 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...
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem 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
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

Mensagem 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
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem 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
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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
Avatar do usuário
Clipper
Colaborador
Colaborador
Mensagens: 1334
Registrado em: 23 Ago 2004 00:04
Localização: Recife/PE

Mensagem por Clipper »

Valeu !!!!

Obrigado ao colgegas, em especial ao Andril e ao Maligno (benigno)....

Vou testar amanhã....hoje eu tô de ressaca... :lol:

Marcelo
Responder