Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Chave Primária - Visivel ou não...
Message
From
27/10/2003 09:22:11
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivia
 
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
00842006
Message ID:
00842911
Views:
26
>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)
	* Search in another table. This function solves certain problems with VFP-relations
	* (the problem is that the user only sees new values after a TableUpdate()).
	* The parameter tcReturnValue should be passed as a string that will be evaluated
	* in the function.
	* If the fifth parameter is .T., the function returns an empty field (rather than null)
	*   if the record is not found.
	* For fast re-opening, the table is opened with a special alias, and remains open.

	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)	&& This will assign correct type, even if not found
										&& (and final result is NULL)
	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)
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform