Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Tienes razón, el TSelecStrings no tiene en cuenta las subconsultas (yo no las uso mucho) .

Ahora que lo pienso:
Código SQL [-]
select  nombre, (select distinct edad from edades)
from tabla
where  edad < (select edad from edades)

... amos, que si nos ponemos a buscarle fallos, no terminamos.

Por suerte y sin tenerlo programado, puedes armar la consulta como:
Código Delphi [-]
ss.Sections[pSelect] := 'nombre, (select distinct edad from edades)';
ss.Sections[pFrom] := 'tabla';
ss.AddToWhere(oNull, 'edad < (select edad from edades)');

Por cierto guglu, deja de chatear conmigo

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 09-03-2008 a las 12:16:25.
Responder Con Cita
  #2  
Antiguo 09-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
Hola y gracias por la ayuda, me ha servido de mucho, no me desmoraliza las fallas ya habia analizado una serie de escenarios y se que no funcionaria a la perfeccion. Por eso buscaba alguna propiedad magica, que me delvoviera las tablas involucradas.

Yo creo una pantalla de busqueda generica: Una caja de texto, un Grid, un boton y un query, en la inicializacion del form paso como parametro la sentencia que quiero mostrar y automaticamente se arma el grid con la informacion resultante de la consulta. Al darle el boton aceptar devuelve el valor del campo en la posicion 0.

Ahorita doy la opcion con un filtro de ir buscando el registro que coincida con lo que se escribe en la caja de texto. Pero como se quiere acceder por medio de internet es muy lento debido a que hay que cargar todos los registros. Lo que pretendo es relanzar la consulta que lleno la tabla con los filtros establecidos por el usuario. Es decir, la primera pudo haber sido por el nombre, luego por el apellido, pense hacerlo como algo parecido a como sugirio Lepe, tres variables: Campos, Tablas y condicion y armar el sql algo asi:

Código Delphi [-]
'Select ' + Campos + ' from ' + Tablas + ' where ' + Condicion

pero tambien le doy a los usuarios avanzados la capacidad de crear sus propias consultas sql.

Bueno espero haberme explicado y usare las sugerencias obtenidas. Muchas gracias a todos por sus acertadas participaciones.

Saludos
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 09-03-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 27
Caral Va por buen camino
Hola
No se si con zeos se podrá hacer esto, pero Roman me enseño a hacer un filtro de selección por tablas y campos, revisalo, tal vez te de ideas.
Saludos
Responder Con Cita
  #4  
Antiguo 09-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
Algo parecido estoy haciendo amigo Carlos, pero no puedo trabajar con Filtros porq al traer todos los registros por internet se haria insorpotable la lentitud al abrir la pantalla de busqueda.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 27-03-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
A ver, apoyandome en la idea de GluGlu resolvi el problema, aqui esta el codigo para el que le interese, basicamente lo que hace es qe toma la ultima aparicion del WHERE y divide el string en dos, luego inserta el filtro y lo vuelve a unir. Pronto lo subire a mi subdominio para el que lo necesite

Código Delphi [-]
//si el control activo es caja de texto Genera el filtro en la consulta
         //Divide la sentencia SQL
         sq.DisableControls;

         sq.Active := False;

         //Reestablece la sentencia original
         sq.SQL.Text := cSqlOriginal;

         //Inicializa las variables
         Aux_SelectSQL1 := '';
         Aux_SelectSQL2 := UpperCase(sq.SQL.Text);

         //Elimina los saltos de linea y saca como resultado Aux_SelectSQL1
         for j := 1 to Length(Aux_SelectSQL2) do begin
           if Aux_SelectSQL2[j] = #13 then
              Aux_SelectSQL1 := Aux_SelectSQL1 + ' '
           else
             if Aux_SelectSQL2[j] <> #10 then
               Aux_SelectSQL1 := Aux_SelectSQL1 + Aux_SelectSQL2[j];
         end;

         //Toma la aparicion del ultimo where
         Aux_Pos := 1;
         while PosEx(' WHERE ', Aux_SelectSQL1, Aux_Pos) <> 0 do begin
           Aux_Pos := PosEx(' WHERE ', Aux_SelectSQL1, Aux_Pos) + 1;
         end;

         //Divide la sentencia antes del where y despues del where
         Dec(Aux_Pos);
         if Aux_Pos = 0 then
         begin
            Aux_Pos := Length(Aux_SelectSQL1);
            Aux_SelectSQL1 := Aux_SelectSQL1 + ' WHERE ';
            lAgregar := False;
         end
         else
            lAgregar := True;

         cInicio  := Copy(Aux_SelectSQL1, 1, Aux_Pos + 7);
         cFinal   := Copy(Aux_SelectSQL1, Aux_Pos + 7, Length(Aux_SelectSQL1));



         //Arma el filtro dependiendo la seleccion
         if rgTipo.ItemIndex = 0 then //Comienza
            cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' like ' + QuotedStr(txBuscar.Text + '%') + ')'
         else if rgTipo.ItemIndex = 1 then //Contiene
            cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' like ' + QuotedStr('%' + txBuscar.Text + '%') + ')'
         else if rgTipo.ItemIndex = 2 then //Termina
            cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' like ' + QuotedStr('%' + txBuscar.Text) + ')'
         else if rgTipo.ItemIndex = 3 then //Exacta
            cFiltro := ' (' + rgFiltro.Items.Strings[rgFiltro.ItemIndex] + ' = ' + QuotedStr(txBuscar.Text) + ')';

         //Determina si agrega el AND
         if lAgregar then
            cFiltro := cFiltro  + ' AND ';

         sq.SQL.Text := cInicio + cFiltro + cFinal;
         sq.Active := True;
         sq.EnableControls;
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
consulta a un query en vez de a una tabla eldiegofg SQL 10 19-09-2007 12:46:39
Tabla vacia que el motor de BD reporta llena Phacko Conexión con bases de datos 1 28-02-2007 06:02:34
que es más rápido query o filtrar tabla? Manuel Varios 27 29-10-2006 16:42:41
Cómo sincronizar Query y tabla David Conexión con bases de datos 2 13-07-2006 11:18:50
Tabla externa en query llonigualker Conexión con bases de datos 3 28-04-2006 12:14:22


La franja horaria es GMT +2. Ahora son las 11:58:06.


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