>Olá Hilmar...
>
>
Eu acho que as chaves invisíveis para o ussuario tem mais coisas boas, que malas. Porem, devo repeter que não todos os programadores estaríam de acordo.>
>Pensei, pensei, pensei e acho que estou começando a concordar com você! ;-)
>
>A única coisa que ainda me causa alguma resitência é a dificuldade de tratar essa mudança entre a chave primária da tabela com o campo código que o cliente vai visualizar no vídeo... Teoricamente a coisa não é complicada...
>
>Pensei em padronizar os campos, isso já facilitaria. Por exemplo, todas as tabelas teriam o campo iPK (integer) que seria a chave primária e o campo cPK (Caracter) que seria o código utilizado pelo cliente. - Para todas as relações, eu usaria o iPK, mas o usuário visualizaria o campo cPK.
Isto não é necessario. Pode ter uma função de búsca que aceita, como parámetros, os nomes dos campos.
É melhor que os campos sejam descriptivos do conteúdo.
Aquí tem a minha função de busca:
FUNCTION MyLookup(tcAlias, tcOrder, txSeekValue, tcReturnValue, tlEmptyValues)
local lnSelect, llFound, lcAlias
lnSelect = select()
lcAlias = tcAlias + "_mylookup"
if not used(lcAlias)
use (tcAlias) again alias (lcAlias) in 0
endif
select (lcAlias)
set order to (tcOrder)
llFound = iif(isnull(txSeekValue), .F., seek(txSeekValue))
local lxReturnValue
lxReturnValue = eval(tcReturnValue)
if not (llFound or tlEmptyValues)
lxReturnValue = NULL
endif
select (lnSelect)
return lxReturnValue
ENDFUNC
Porem, é bom ter uma classe para o usuario fazer o "Pick". Por exemplo, a classe pick do VFX é assim:
_____ ... ____________
Primeiro, a chave que vé o usuario (por exemplo, código do produto). Logo, um CommandButton que faiz aparecer um formulario com um grid genérico. Finalmente, a descripção, por exemplo, do produto.
A classe PickField (contenedor) precissa diversas propriedades: com qué tabela trabalha, os campos da izquierda e direita, os campos que serão usados no grid genérico, o campo "interno" (não vissível para o ussuario) que está editando, etc.
Bom, ter que fazer isto é o principal problema com chaves não visíveis.
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)