Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-10-2006
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 25
Crandel Va por buen camino
En realidad es una consulta facil, te recomendaria aprender un poco mas sobre SQL xq te va a tocar hacer consultas mas complicadas.

Un libro recomendable y gratuito es la La Cara oculta de Delphi 4 que se puede conseguir por internet desde la pagina del autor Ian marteens

Tu consulta seria:
Código SQL [-]
Select * form MAESTRA, DETALLE
where DNI = ENLACE
and MODALIDAD = ...
__________________
[Crandel]
Responder Con Cita
  #2  
Antiguo 27-10-2006
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 202
Poder: 24
muli Va por buen camino
Pues yo te digo que no es tan facil, por que si hago esto:
Código SQL [-]
SELECT * From Maestra Inner Join Detalle On Maestra.Indice=Detalle.Enlace 
Where (Detalle.Producto=Modalidad And Detalle.Producto=OtraModalidad)
No Salen los registros clientes que tienen esas dos modalidades

P.D.: No hace falta que me recomiendes un libro antiguo, ya me he desembolsado la pasta en La Cara Oculta De Delphi 6 que está bastante mejor que el 4. Y un Delphi Original cosa que no pueden decir muchos, y si pido ayuda en el foro, es por que antes estuve revisando todos los mensajes del foro, ya que no pregunto por preguntar.
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #3  
Antiguo 27-10-2006
richi richi is offline
Miembro
 
Registrado: jun 2006
Ubicación: Portosin - A Coruña
Posts: 51
Poder: 21
richi Va por buen camino
Prueba de la siguiente forma.
Código SQL [-]
Select * form MAESTRA M JOIN DETALLE D ON (M.DNI=D.ENLACE)
where MODALIDAD='Hogar' OR MODALIDAD='Auto'

Tanto hogar como auto mira en la base de datos si estas en mayusculas o minusculas en este caso buscaria los que tienen la primera letra en mayuscula y el resto en minusculas.
Responder Con Cita
  #4  
Antiguo 27-10-2006
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 202
Poder: 24
muli Va por buen camino
De esas forma me salen todos aquellos registros que tengan Auto o Hogar no los que tengan auto y Hogar, pues si hay un cliente que tiene solamente Auto ya saldría, cuando no debería de salir.

Saludos
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #5  
Antiguo 27-10-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
De esta forma no lo veo muy complicado:
Código SQL [-]
select * from maestra 
where dni in (
                select dni from detalle 
                where modalidad in (:incluir) and 
                modalidad not in (:noincluir)
                )

He buscado la mejor forma para programarlo (no de ejecución). Yo suelo crear un StringList que tenga "Hogar" y "Auto" y con una simple rutina QuotedList, ya tengo lo que va entre paréntesis armado como si fuera un parámetro.

Código Delphi [-]
function QuotedList( Items: TStrings):string;
var i:integer;
begin
    result := '';
    for i:= 0 to Items.Count-2 do
      Result := Result +QuotedStr(Items[i])+',';
    if Items.count > 0 then
      Result := Result + quotedstr(Items[Items.count-1]);
end;
Para armar la consulta:
Código Delphi [-]
var st:StringList;
begin
st := stringlist.Create;
st.add('Hogar');
st.Add('Auto');

query1.parambyname('incluir').AsString := QuotedList(st);
query1.parambyname('noincluir').AsString := QuotedList(st); // obviamente cambiando los datos.
query1.Open;

Como la rutina QuotedList recibe un TStrings, incluso puedes usar un memo, o combobox, o Listbox para que el usuario añada las modalidades.

Vuelvo a Editar el mensaje

Esto quizás sea más cómodo:
Código Delphi [-]
function QuotedListchklb( ctrl:TCheckListBox;const SoloChecked:Boolean = True):string;
var i:integer;
begin
    result := '';
    with ctrl do
    
    for i:= 0 to Items.Count-1 do
      if SoloChecked then
      begin
        if Checked[i] then
          Result := Result +QuotedStr(Items[i])+',';
      end
      else
        Result := Result +QuotedStr(Items[i])+',';

  if Length(Result)>0 then
    Delete(Result,Length(Result),1); //quito la ultima coma

end;

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: 27-10-2006 a las 14:29:41.
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 dificil mysql taru MySQL 6 03-09-2006 03:29:55
Una consulta dificil noshy SQL 3 31-05-2006 20:50:58
Una consulta dificil noshy SQL 3 22-05-2006 18:22:06
Consulta Dificil Abel Garcia Firebird e Interbase 5 18-11-2005 19:40:50
Una consulta un poco dificil? danytorres SQL 1 24-10-2003 22:42:03


La franja horaria es GMT +2. Ahora son las 02:51:24.


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