PDA

Ver la Versión Completa : ClientDataset - Locatenext


StartKill
17-06-2008, 15:46:52
Saludos desde Perú, tierra de Incas.

Estoy trabajando con Delphi 2006 con una base de Datos SQLServer 2000, tengo algo de experiencia en Interbase y Delphi 7.0

Cuando trabajaba con Interbase/Firebird he estado utilizando IBDataSet y en este componente utilizaba el metodo Locate y LocateNext.

Ahora que estoy trabajando con SQL Server 2000 estoy trabajando con DBExpress, a si mismo utilizo el ClientDataSet y no encuentro el metodo LocateNext

Duda: No existe?, por que?, o hay algun equivalente?.

A la espera de su ayuda.

Your friend,

StartKill
Lima-Perú

santus
17-06-2008, 18:48:42
Holas.

Si lo que quieres es filtrar una serie de registros, deberías usar "ClientDataset.filter".

Aquí tienes la explicación completa de como funciona. (http://dn.codegear.com/article/29271)


Saludos!

hibero
17-06-2008, 19:07:53
puedes cambiar el commandtext del clientDataset para traerte solo los registros que necesitas

StartKill
17-06-2008, 23:01:39
Holas, gracias por responder, no deseo filtrar registros. (pero me va a servir para otro requerimiento)

Mi requerimiento:

Tengo una grilla maximo unos 100 registros..
Para buscar dentro de la grilla utilizo un edit y dos botones.

El primer boton ubica la primera coincidencia dela busqueda del tedit1
****ClientDataset1.Locate('fapellidos', 'Ramirez',[loPartialKey]);

El segundo boton deberia buscar la siguientes coincidencias, antes utilizaba el componente ibDataset, asi:
****IBDataset1.LocateNEXT('fapellidos', 'Ramirez',[loPartialKey]);
Saludos

Your friend

StartKill
Lima-Perú

santus
18-06-2008, 03:19:20
Hola.

No se me ocurre cómo podrías sustituir el locateNEXT.. Viendo en internet tampoco hay muchas ideas al respecto. Nunca use componentes de InterBase, asi que tampoco te podría decir que resultado.

Capaz que haciendo una busqueda uno a uno, podrias suplantar el locateNext, aunque seria algo medio "horrible" a nivel código y en cuanto a la performance.

En el botón 2, luego de hacer el locate, escribe el siguiente código:


while not clientdataset1.eof do
begin
if (clientdataset1.fieldbyname('fapellidos').value = 'Ramirez') then exit;
next;
end;




Sino insisto con el filter. Creo que sería los mas facil y conveniente:

En el botón 1:

ClientDataset1.Filter := 'fapellidos='+QuotedStr('Ramirez');
ClientDataset1.Filtered := True;


y en el botón 2:

ClientDataset1.FindNext;


y luego para sacar el filtro:

ClientDataset1.Filtered := False;


La verdad que otra solución no se me ocurre. Si ninguna de estas te sirve, esperemos a ver si algún otro usuario se le ocurre algo mas acertado.

Saludos, y espero haberte sido de ayuda.

StartKill
18-06-2008, 04:02:32
Gracias Santus, voly a seguir la recomendacion de susplantar el locatenext,
por un momento pense que mi Delphi 2006 estaba mal ó que tenia que aplicarle un parche...

Gracias a todos.

Saludos

StartKill
Lima-Perú