Página 1 de 1

3 em 1 com alias

Enviado: 14 Jun 2022 15:20
por Itamar M. Lins Jr.
Olá!

Código: Selecionar todos

clientes->(dbSetOrder(1), dbGoTop(), dbSeek(cChave))
Saudações,
Itamar M. Lins Jr.

3 em 1 com alias

Enviado: 15 Jun 2022 14:55
por alxsts
Olá!

É um recurso bem antigo (vem desde o Clipper 5) e bem útil (para quem usa DBF (especialmente dentro de code blocks). Mas é bom divulgar pois muitos o desconhecem. Lembro-me de ter usado isto em 2006...

No tópico Coluna RowVersion em Tabela DBF, onde nós dois interagimos, tem um exemplo:

Código: Selecionar todos

135	   tbState->( DbGoTop(), ;
136	              Browse(), ;
137	              DbEval( { || tbState->nmEstado := Upper( tbState->nmEstado ) } ), ;
138	              DbGoTop(), ;
139	              Browse(), ;
140	              DbCloseArea() ;
141	            )
O valor da última expressão é retornado. Por exemplo:

Código: Selecionar todos

LOCAL cCustName, nCust := 1024

   cCustName := Cust->( DbSetOrder( 2 ), DbSeek( nCust ), CustName ) --> retorna o nome do cliente

3 em 1 com alias

Enviado: 15 Jun 2022 15:18
por JoséQuintas
E isso também pode ser usado em classes, pra facilitar o INLINE, uma vez que é codeblock.

Código: Selecionar todos

METHOD Soma( nValue ) INLINE ::nSoma += nValue, ::nSoma

3 em 1 com alias

Enviado: 15 Jun 2022 15:20
por JoséQuintas
Ou num VALID:

Código: Selecionar todos

.... GET nAliIcms picture "999" VALID nValIcms := nValor * nAliIcms / 100, .T.

3 em 1 com alias

Enviado: 15 Jun 2022 15:23
por JoséQuintas
Mas ainda prefiro minha função, fica mais claro do que se trata, e desfaz as mudanças.
Mais ou menos isto, como resumo:

Código: Selecionar todos

Encontra( nCodigo, "clientes", "nome" )
...

FUNCTION Encontra( xChave, cAlias, cOrder )
LOCAL nSelect, xOrder, lEof
nSelect := Select()
SELECT   ( Select( cAlias ) )
xOrder := OrdSetFocus( cOrder )
SEEK xChave
lEof := Eof()
OrdSetFocus( xOrder )
SELECT ( nSelect )
RETURN lEof

3 em 1 com alias

Enviado: 18 Jun 2022 10:06
por Itamar M. Lins Jr.
Olá!
prefiro minha função,
Com uso do alias, select é redundância.
Toda vez que uso DbSeek() eu coloco (MeuAlias)->(OrderSetFocus() ), (MeuAlias)->(DbSeek("xyz")).

Saudações,
Itamar M. Lins Jr.

3 em 1 com alias

Enviado: 18 Jun 2022 11:33
por JoséQuintas
Itamar M. Lins Jr. escreveu:Com uso do alias, select é redundância.
Toda vez que uso DbSeek() eu coloco (MeuAlias)->(OrderSetFocus() ), (MeuAlias)->(DbSeek("xyz")).
Dependendo da situação, isso pode significar mudar o índice original e possibilidade de problemas.
Aliás.... tá aí uma boa aplicação de multithread.