| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
jose rojas Ens


Registrado: 10 Jun 2003Mensajes: 38Ubicación: BOLIVIA - ORURO
|
Publicado: Mar 28 Oct, 2003 11:10 pm Asunto: problema con indices en interbase |
|
|
| hola a todo el mundo, no entiendo que estoy haciento mal, tengo un servidor con interbase 6.0 y una base de datos con 6 tablas. Necesito realizar busquedas en cada una de estas tablas, pero al ejecutar estas busquedas el sistema se cuelga. Use las sentencias Locate y Lookup, Que Puedo Hacer?, es urgente. Gracias Por las orientaciones |
|
| Volver arriba |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Mie 29 Oct, 2003 10:51 pm Asunto: Indices |
|
|
Saludos:
Aunque los indices no son necesarios para una busqueda en IB, son recomendables.
Crea un indice sobre un campo unico o casi unico con la sentencia:
Create index NombreDeMiIndice on NombreTabla (Campo1,Campo2...)
Respecto a la busqueda en si, me extraña que se cuelge...
Aqui te pongo un trozo de codigo que utilizo con una grid alimentada por una consulta cualquiera, utiliza Locate y LocateNext y se activa al hacer click sobre el titulo de la columna o pulsar F3 | Código: | void __fastcall TfLibros::DBGrid1TitleClick(TColumn *Column)
{
String Columna1="Buscar hacia abajo en Columna "+Column->Field->FieldName;
if (InputQuery(Columna1, "¿Valor a Buscar?", Valor))
{
TLocateOptions Opts;
Opts.Clear();
Opts << loCaseInsensitive;
Variant locvalues;
locvalues = Variant(Valor);
Columna = Column->Field->FieldName;
DBGrid1->SelectedIndex=Column->Index;
if(!Query->Locate(Columna, locvalues, Opts))
ShowMessage("No se localizo "+Valor+" En la Columna "+Columna);
else
ShowMessage(Valor+" Localizado, Pulse F3 para buscar Siguente");
}
//-------------------------------------------------------------------- |
Pon el KeyPreview del form a true y en el evento OnKeyDown escribe:
| Código: | void __fastcall TfLibros::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Valor!=""&&Key==VK_F3)
{
TLocateOptions Opts;
Opts.Clear();
Opts << loCaseInsensitive;
Variant locvalues;
locvalues = Variant(Valor);
if(!Query->LocateNext(Columna, locvalues, Opts))
{
String Mensaje="No hay mas "+Valor+" en Columna "+Columna;
if(InputQuery(Mensaje,"¿Buscar desde el principio?",Valor))
{
locvalues = Variant(Valor);
Query->Locate(Columna, locvalues, Opts);
}
}
}
//------------------------------------------------------------------------ |
Tal vez se pueda mejorar el codigo pero de momento espero te sea util, cualquier duda postea en este mismo hilo y con gusto te respondo.
Ahh... casi lo olvido Valor es una variable publica tipo AnsiString. |
|
| Volver arriba |
|
 |
jose rojas Ens


Registrado: 10 Jun 2003Mensajes: 38Ubicación: BOLIVIA - ORURO
|
Publicado: Vie 14 Nov, 2003 3:52 pm Asunto: |
|
|
Muchas gracias Alfredo,
Los codigos que me muestras como ejemplo me sirvieron de gran manera.
Quizas comentar mas estos temas en nuestros correos. el mio es:
e-mail: jcrparedes@yahoo.es.
Nos hablamos luego. |
|
| Volver arriba |
|
 |
Cruiz Ens


Registrado: 29 Oct 2003Mensajes: 30Ubicación: Granada, España.
|
Publicado: Sab 15 Nov, 2003 9:19 pm Asunto: No me funciona |
|
|
Hola.
He intentado hacer el ejemplo que ponias para buscar en un DBGrid pero no hace nada cuando doy click o doble click en el titulo.
Que tengo que hacer ? He mirado las propiedades de la DBGrid y no encuentro nada.
Para que compruebes si está en el metodo seguro te pongo la cabecera:
| Código: | void __fastcall TPrincipal::DBGrid1TitleClick(TColumn *Column)
{
String Columna1="Buscar hacia abajo en Columna "+Column->Field->FieldName;
if (InputQuery(Columna1, "¿Valor a Buscar?", sBusca)) |
Un saludo cordial. _________________ == No !! al fin de c++ Buider. == |
|
| Volver arriba |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Lun 17 Nov, 2003 5:50 pm Asunto: mnnn... |
|
|
| A ver, dices que no hace nada al dar Click en el titulo? no da algun menaje de error? debe pedirte al menos el valor a buscar. |
|
| Volver arriba |
|
 |
Cruiz Ens


Registrado: 29 Oct 2003Mensajes: 30Ubicación: Granada, España.
|
Publicado: Lun 17 Nov, 2003 8:38 pm Asunto: respuesta |
|
|
Hola
Pues no, no hace nada. Como si el metodo no existiera.
Que puede ser ?
Lo unico es que esta la tabla dentro de un GroupBox.
Será eso ?
un saludo. _________________ == No !! al fin de c++ Buider. == |
|
| Volver arriba |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Mar 18 Nov, 2003 11:19 pm Asunto: A Ver |
|
|
Vamos a ver, ponle un ShowMessage("ALGO"); dentro del codigo... y dime si sale al menos  |
|
| Volver arriba |
|
 |
Cruiz Ens


Registrado: 29 Oct 2003Mensajes: 30Ubicación: Granada, España.
|
Publicado: Mar 18 Nov, 2003 11:41 pm Asunto: No sale nada. |
|
|
Est muy raro.
No sale nada de nada.
mira el codigo que he puesto:
| Código: | void __fastcall TPrincipal::DBGrid1TitleClick(TColumn *Column)
{
ShowMessage("Algo a ver si funciona.");
..sigue el resto de tu código.
|
_________________ == No !! al fin de c++ Buider. == |
|
| Volver arriba |
|
 |
|