Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Demora en consulta de tabla (https://www.clubdelphi.com/foros/showthread.php?t=84487)

GustavoCruz 24-10-2013 19:48:13

Demora en consulta de tabla
 
Hola amigos del foro, tengo la siguiente tabla
Código SQL [-]
SET SQL DIALECT 3;



/******************************************************************************/
/*                                   Tables                                   */
/******************************************************************************/


CREATE GENERATOR GEN_CUM_ID;

CREATE TABLE CUM (
    IDE                       CODIGONUMERICO NOT NULL /* CODIGONUMERICO = INTEGER NOT NULL */,
    PRODUCTO                  T240 /* T240 = VARCHAR(240) */,
    TITULAR                   T240 /* T240 = VARCHAR(240) */,
    REGISTROSANITARIO         T240 /* T240 = VARCHAR(240) */,
    FECHAEXPEDICION           T240 /* T240 = VARCHAR(240) */,
    FECHAVENCIMIENTO          T240 /* T240 = VARCHAR(240) */,
    ESTADOREGISTRO            T240 /* T240 = VARCHAR(240) */,
    EXPEDIENTECUM             T240 /* T240 = VARCHAR(240) */,
    CONSECUTIVOCUM            NUMERO /* NUMERO = INTEGER */,
    CANTIDADCUM               NUMERO /* NUMERO = INTEGER */,
    PRESENTACIONCOMERCIALCUM  T240 /* T240 = VARCHAR(240) */,
    ESTADOCUM                 T240 /* T240 = VARCHAR(240) */,
    FECHAACTIVO               T240 /* T240 = VARCHAR(240) */,
    FECHAINACTIVO             T240 /* T240 = VARCHAR(240) */,
    UNIDAD                    T240 /* T240 = VARCHAR(240) */,
    ATC                       T240 /* T240 = VARCHAR(240) */,
    DESCRIPCIONATC            T240 /* T240 = VARCHAR(240) */,
    VIAADMINISTRACION         T240 /* T240 = VARCHAR(240) */,
    CONCENTRACION             T240 /* T240 = VARCHAR(240) */,
    PRINCIPIOACTIVO           T240 /* T240 = VARCHAR(240) */,
    UNIDADMEDIDA              T240 /* T240 = VARCHAR(240) */,
    CANTIDAD                  NUMERO /* NUMERO = INTEGER */,
    UNIDADDEREFERENCIA        T240 /* T240 = VARCHAR(240) */,
    FORMAFARMACEUTICA         T240 /* T240 = VARCHAR(240) */,
    FABRICANTEIMPORTADOR      T480 /* T480 = VARCHAR(480) */,
    MODALIDAD                 T240 /* T240 = VARCHAR(240) */
);




/******************************************************************************/
/*                                Primary Keys                                */
/******************************************************************************/

ALTER TABLE CUM ADD PRIMARY KEY (IDE);


/******************************************************************************/
/*                                  Triggers                                  */
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/*                            Triggers for tables                             */
/******************************************************************************/



/* Trigger: CUM_BI */
CREATE OR ALTER TRIGGER CUM_BI FOR CUM
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if ((new.ide = 0)or(new.ide is null)) then
    new.ide = gen_id(gen_cum_id, 1);
end
^


SET TERM ; ^
Dicha tabla almacena 181023 registros, necesito hacer una consulta por los siguientes campos: REGISTROSANITARIO, TITULAR, PRODUCTO, DESCRIPCIONATC
pero utilizando una sola caja de texto pensé en lo siguiente
Código SQL [-]
select * from CUM  where upper(REGISTROSANITARIO||TITULAR||PRODUCTO||DESCRIPCIONATC) like '%textoabuscar%'
pero eso tarda demasiado, si alguien me puede ayudar con el asunto se lo agradecería muchísimo...

Gracias por vuestro tiempo

GustavoCruz

TiammatMX 24-10-2013 20:40:29

Cita:

Empezado por GustavoCruz (Mensaje 468915)
...pero utilizando una sola caja de texto pensé en lo siguiente
Código SQL [-]
select * from CUM  where upper(REGISTROSANITARIO||TITULAR||PRODUCTO||DESCRIPCIONATC) like '%textoabuscar%'
pero eso tarda demasiado, si alguien me puede ayudar con el asunto se lo agradecería muchísimo...

Por "una sola caja de texto" te refieres a que el usuario te proporcione un texto y buscarlo en la tabla, quiero suponer...

Por que mi sugerencia sería hacer una diferenciación entre los datos que contiene cada campo, es decir, pedir REGISTROSANITARIO, TITULAR, PRODUCTO, DESCRIPCIONATC en un TEdit (o lo que prefieras usar) y "armar" la cadena de búsqueda o usar un "WHERE" y "AND's" consecutivos en un SELECT hasta centrar la búsqueda en uno o varios registros resultado...

TOPX 24-10-2013 20:41:29

Hola,

Por favor revise:
Y ya luego de eso, vea: -

jafera 25-10-2013 18:56:08

Cita:

Empezado por TOPX (Mensaje 468919)

Este es de un hilo que abrí yo y me funciona de maravillas.

Saludos

Josep

GustavoCruz 27-10-2013 18:04:05

Hola a todos amigos del foro, gracias por sus respuestas...

Mi idea es que funcione como lo hizo "algún tiempo", (no se si aún), Winamp, que en su base de datos; me refiero a la biblioteca, uno podía consultar una canción escribiendo el Título de la canción, el Interprete, Titulo del Album, etc... en una misma caja de texto.

Gracias por vuestro tiempo.


GustavoCruz

Casimiro Notevi 27-10-2013 18:12:56

Pero eso no es así, sino una consulta por campos, algo similar a:

Código SQL [-]
select * from tabla where titulo containing 'algo' and artista containing 'alguien' and album containing 'elquesea' ... ... ...

GustavoCruz 27-10-2013 20:05:21

Hola Casimiro Notevi, lo que sucede con la solución que me indicas es que llegado el momento no me mostrará nada aunque realmente si hayan registros para mostrar y eso se debe porque se utiliza la palabra "AND" y si utilizo "OR" los resultados serán traumáticos en lo que a tiempo se refiere...

Gracias por vuestra ayuda

GustavoCruz

Casimiro Notevi 27-10-2013 20:09:34

No te entiendo, pero debería especificar y aclarar correctamente exactamente la situación para que que te podamos ayudar.

GustavoCruz 27-10-2013 20:18:44

Para una mayor claridad sobre lo que quiero hacer les dejo este link donde se encuentra un listado de Código Unicos de Medicamentos "CUM", esos datos en su totalidad voy a almacenar en una tabla en firebird v2.5.2 con la misma estructura. Y al momento de consultar (con una sola caja de texto, para no "marear" al usuario final) un registro, lo haga, por los campos: INVIMA, REGISTROSANITARIO, DESCRIPCIONATC, TITULAR, PRODUCTO; en ese caso el usuario puede consultar esa tabla de cerca unso 180000 registros por cualquiera de esos campos de forma simultánea;

Les ruego, si no es mucha molestia, que creen una base de datos y carguen en una tabla todos los registros del archivo y hagan la consulta que necesito, una sola caja de texto para realiza la búsqueda...

GustavoCruz

Casimiro Notevi 27-10-2013 21:43:43

Entonces necesitas hacer la consulta como te he mostrado antes, aunque poniendo or y no and.
Y por supuesto, no olvides crear índices para esos campos.


La franja horaria es GMT +2. Ahora son las 08:52:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi