Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

ir directamente a un registro...

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: ir directamente a un registro... Responder citando

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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...
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.