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 

DBGrid - Seleccionar fila al pulsar tecla

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: DBGrid - Seleccionar fila al pulsar tecla Responder citando

Tengo un DBGrid que me muestra una lista bastante extensa de resultados, me gustaria saber como hacer que se mostrara/señalara una determinada fila pulsando la tecla de la inicial de un valor de unos de sus campos.

Gracias.
Volver arriba
Mensaje    Asunto: Presionando una tecla Responder citando

Puedes utilizar los eventos
OnKeyPress o OnKeyDown
para que capturado el valor de la
tecla que tipea el usuario el programa
vaya buscando en la tabla segun
las teclas que se van pulsando.
Volver arriba
Mensaje    Asunto: Responder citando

y como hacer para ordenar el dbgrid segun la tecla?
Volver arriba
Mensaje    Asunto: Responder citando

Ordenar ¿En qué sentido? ¿Qyuieres decir que si pulsa la tecla 1 te lo ordene por la primera columna, si es la 2 por la segunda, etc.?
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No, que si pulso "C" se me muestren solamente los registros en los que un determinado campo empiece con C sin tener que realizar mas consultas a la base de datos
Volver arriba
Mensaje    Asunto: Presionando una tecla Responder citando

Supongamos que quieres seleccionar por el nombre,
dentro del OnKeyDown haces

Table1->Filter = Table1->Filter + tecla_que_apretaste;
Table1->Filtered = true;

Eventualmente usando el mismo OnKeyDown y chequeando
si es que se mueve con las flechas o algo por el estilo,
deberas poner en vacio el AnsiString ->Filter

Lo que yo utilizo, segun el caso es un DBGrid con un TEdit
en el cual a medida que el usuario va escribiendo le voy
mostrando datos que concuerden con lo que el usuario tipea.
Por ejemplo una tabla de clientes en un grid y 3 edit,
uno por numero de documento, otro por nombre del cliente y
el ultimo por zona de residencia. Pero para esto debo tener
previstos y existentes indices sobre cada uno de estos campos.

Dependiendo del tamaño del archivo donde buscas y del tipo
de base de datos que estes usando, lo puedes hacer con un SQL.
Volver arriba
Mensaje    Asunto: Responder citando

Una alternativa que tienes es emplear consultas SQL con el comando LIKE. Yo haría algo así; la primera vez haz una consulta de toda la tabla por el campo que te interese:
Código:
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT * FROM 'MiTabla' ORDER BY Campo");
Query1->Prepare();
Query1->Open();

Cuando pulse una tecla, en el evento OnKeyPress, la consulta puede quedar así:
Código:
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT * FROM 'MiTabla' WHERE Campo LIKE '" + AnsiString(Key) + "%' ORDER BY Campo");
Query1->Prepare();
Query1->Open();

Puedes refinarlo un poc para que no se te escape ningún dato:
Código:
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT * FROM 'MiTabla' WHERE UPPER(Campo) LIKE '" + UpperCase(AnsiString(Key)) + "%' ORDER BY Campo");
Query1->Prepare();
Query1->Open();

Con esto siemrpe compararás mayúsculas y evitaras las posibles difernecias entra mayúsculas y minúsculas.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)


Ultima edición por Angel el Mar 21 Dic, 2004 6:22 pm, editado 1 vez
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

La opción del lenguaje SQL combinada con un TQuery es la más común y utilizada por los programadores ya que sin ser muy complicada resulta tremendamente eficaz. Ahora bien, si ya tienes el DBGrid enlazado a un TTable y vas a utilizar sentencias SQL para hacer búsquedas vas a tener que "desenlazar" el DBGrid de su TTable inicial y enlazarlo con el TQuery con el que realizamos la búsqueda en SQL, que tampoco es que sea nada complicado pero bueno, lo que intento explicar es que existe otra forma de hacer una búsqueda en un DataSet sin necesidad del SQl y TQuery:
Código:

void __fastcall TForm1::DBGrid1KeyPress(TObject *Sender, char &Key)
{
    AnsiString letra = Key;
    TLocateOptions opciones;
    opciones <<loCaseInsensitive<<loPartialKey;
    Table1->Locate("Titulo",letra,opciones);
}

En el primer parámetro de la función Locate() le damos con un AnsiString el nombre del campo de la tabla en el que vamos a realizar la búsqueda, el segundo parámetro es un AnsiString que representa el texto que vamos a buscar y el último de los parámetros contiene las opciones de búsqueda que hemos definido previamente, loCaseInsensitive para que funcione tanto con mayúsculas como con minúsculas y loPartialKey para que se realice la búsqueda independientemente del número de letras que tenga la cadena de texto que buscamos.
Tal vez el inconveniente de este código en tu caso es que no filtra los resultados como un sentencia SQL, si no que lo único que hace es marcar en el DBGrid la primera coincidencia de la búsqueda, por eso y según lo que quieras hacer es más aconsejable que uses SQL con un TQuery tal y como te han apuntado los compañeros del foro. Saludos.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

gracias a todos.
Volver arriba
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.