| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Diego F Invitado
|
Publicado: Lun 12 Ene, 2004 11:45 pm Asunto: ir directamente a un registro... |
|
|
Hola
Tengo una base de datos (paradox) con una tabla, la cual tiene dos campos
codigo
nombre
ahora, cuando quiero recorrer la tabla registro por registro desde mi
aplicacion lo hago mediante los metodos next y prior, pero como hago para ir
directamente al registro x donde el codigo sea por ejemplo 3150 pero sin
utilizar un query.
Gracias |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Mar 13 Ene, 2004 12:19 am Asunto: |
|
|
Puedes utilizar el método Locate para buscar un registro en una tabla o consulta. Si utilizas una tabla y tienes un índice por el campo que estas buscando, puedes usar el método FindKey que será mucho más rápido ya que el campo está indexado.
Busca estos métodos en la ayuda y si no sabes cómo funcionan, dímelo y te pondré un ejemplo.
Un saludo. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 13 Ene, 2004 9:03 am Asunto: |
|
|
Un ejemplo puede ser este
| Código: |
DataModule1->TCLIENTES->Locate("RFC",Edit1->Text, TLocateOptions()); |
donde
"RFC", es el campo donde quieres buscar
Edit1->Text es lo que quieres buscar
TLocateOptions() es la manera de buscarlo
Saludos... _________________
 |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Mar 13 Ene, 2004 2:10 pm Asunto: |
|
|
Si tu tabla esta indexada por codigo y nombre, podrias usar esto
Tabla->SetKey();
Tabla->FieldValues["Codigo"] = 12;
Tabla->FieldValues["Nombre"] = "Juan";
MainForm->HoursTable->GotoKey();
En otro caso podrías usar un filtro de esta manera
Tabla->Filtered = true;
Tabla->Filter = "Codigo=12 AND Nombre = 'Juan'"
luego de hacer lo q desees debes sacar el filtro, ya q este reduce tu DataSet, haciendo visible solo a los registros q cumplen la condición. |
|
| Volver arriba |
|
 |
Marky Master

Registrado: 28 Dic 2002Mensajes: 251Ubicación: Las Rozas - Madrid (España)
|
Publicado: Mar 13 Ene, 2004 3:40 pm Asunto: |
|
|
Bueno, no puedo aportar nada nuevo a lo que ya te hayan dicho pero bueno... aquí lo que uso yo para "saltar" a registros rápidamente. Pones un TEdit que valdrá como casilla para introducir la "palabra clave":
| Código: |
TLocateOptions Opts;
Opts.Clear();
Opts << loPartialKey << loCaseInsensitive;
//PartialKey: si pones "as" te saltará al primer registro que
// contenga esas letras P.ej: "casa" ó "masa" :D
// loCaseInsensitive para que no diferencie entre mayúsculas y minúsculas
Variant locvalues= Variant(Edit->Text);
MD->Table->Locate(campo_a_buscar, locvalues, Opts);
|
Nos vemos! |
|
| Volver arriba |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Mar 13 Ene, 2004 4:53 pm Asunto: |
|
|
HOLA:
Tambien tienes una solucion mas rapida en cuanto a saltar registros
Table1 ->MoveBy(3500);
Esto salta 3500 regs, si los tienes secuenciales y no hay saltos entre lineas se posicionara en el 3500.
By. |
|
| Volver arriba |
|
 |
Diego F Invitado
|
Publicado: Jue 15 Ene, 2004 5:36 am Asunto: |
|
|
Gracias a todos por su colaboracion, ya que me ha servido de maravilla.
pero ahora me surge otra duda, y es la siguiente
Cuando ejecuto un query y luego quiero ir a un registro especifico uso la
funcion Locate, asi:
TLocateOptions opcion;
opcion.Clear();
opcions << loPartialKey;
Query1->Locate("codigo", "3058", Opts);
con esto iria al registro x el cual tenga como codigo 3058.
Pero ahora, si quiero hacer lo mismo pero con dos campos, por ejemplo, que
el sexo sea "H" y el nombre tenga los caracteres "ana" (por ejemplo diana,
mariana, ...).
Como podria lograr esto
Espero haberme hecho comprender
Gracias |
|
| Volver arriba |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Jue 15 Ene, 2004 5:20 pm Asunto: |
|
|
HOLA:
TLocateOptions op;
op.Clear();
op << loCaseInsensitive ;
Variant Variables[2];
Variables[0] = Variant("M");
Variables[1] = Variant("ANA");
if (!Query1->Locate("SEXO,NOMBRE", VarArrayOf(Variables, 1), op))
ShowMessage("El reg no se encontro... ¿Aplico filtro?");
By. |
|
| Volver arriba |
|
 |
|