Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cual es la diferencia entre Find Key y Goto Key? (https://www.clubdelphi.com/foros/showthread.php?t=78291)

Jere_84 05-04-2012 21:46:19

¿Cual es la diferencia entre Find Key y Goto Key?
 
Quiero saber cual es al diferencia entre estas técnicas de búsqueda que tienen los ClientDataSet. Lo mismo con Find Nearest que diferencia tienen con Goto Nearest?

Saludos y gracias

ecfisa 05-04-2012 23:15:22

Hola.

FindKey busca un valor sobre el índice activo; se posiciona y devuelve verdadero si lo encuentra de otro modo devuelve falso.
Código Delphi [-]
  if ClientDataSet1.FindKey([Edit1.Text])  then
  ...

Del mismo modo GotoKey devuelve verdadero si halla el dato y falso si no.
En conjunto con SetKey se usa cuando nos encontramos ante un índice de expresiones de dBase. Por ejemplo para buscar un artículo por codigo + marca, no servirá hacer:
Código Delphi [-]
  ClientDataSet1.FindKey([Edit1.Text, Edit2.Text]);
En su lugar:
Código Delphi [-]
  ClientDataSet1.SetKey;
  ClientDataSet1['CODIGO']:= Edit1.Text;
  ClientDataSet1['MARCA']:= Edit2.Text;
  ClientDataSet1.GotoKey; // o GotoNearest
En la ayuda de Delphi y en La cara oculta de Delphi 4 que podés descargar del [FTP de Club Delphi] encontrarás información más detallada.

También te podría interesar revisar el metodo Locate.

Un saludo.

Jere_84 05-04-2012 23:21:01

Gracias sigo sin entender la diferencia, los dos se basan en indices? de que caso me sirve utilizar uno u otro?

Voy a leer la cara oculta.

ecfisa 05-04-2012 23:36:14

Cita:

Empezado por Jere_84 (Mensaje 429425)
Gracias sigo sin entender la diferencia, los dos se basan en indices? de que caso me sirve utilizar uno u otro?

Si, los dos se basan en índices.
Como te dije anteriormente en el caso de los índices de expresiones no te sirve utilizar FindKey.

Saludos.

Jere_84 09-04-2012 14:19:35

Bueno entonces la diferencia seria que GotoKey y GotoNearest pueden utilizarse en indices basados en expresión dBase. En este tipo de indices FindKey y FindNearest se niegan rotundamente a trabajar lanzando una excepción. ¿Estoy en lo correcto?

ecfisa 09-04-2012 18:32:52

Hola Jere_84.

Así es. Creo que este fragmento de La cara oculta de Delphi 4 lo explica más claramente:

Cita:

(Pag. 406)

¿ Por qué existe SetKey ?
Además de cualquier motivo filosófico o espiritual que puedan alegar ciertos libros de Delphi que circulan por ahí, Setkey existe por que existen los índices de expresiones de dBase; de no ser por esta razón, SetKey pudiera quedar como un método interno de la implementación de la VCL.

En este tipo de índices, FindKey y FindNearest se niegan rotundamente a trabajar: el primer paso de estos métodos es "repartir" los valores de lista pasada como parámetro entre los campos que forman el índice. per en un índice de expresiones no es sencillo determinar cuáles son los campos que forman el índice; en realidad es algo que no se intenta en absoluto.

Por ejemplo, tomemos una tabla que tenga los campos Nombre y Apellidos, y cuyo índice activo sea un índice basado en la expresion Nombre + Apellidos. Hay dos campos involucrados en el índice, y un programador inocente puede verse tentado a programar algo así:

Table1.FindKey(['Howard', 'Lovecraft']); // No funciona

¿ Cuál es el valor que debe tomarse como nombre y cuál debe tomarse como apellido ? Delphi no lo sabe. Y tanto FindKey como FindNearest están programados para lanzar una excepción si el índice activo es un índice de expresiones.
...
Saludos.


La franja horaria es GMT +2. Ahora son las 04:28:20.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi