Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Arrow 2 TADOQueries

Hola,
Tengo el siguiente código delphi con una Tabla relacionada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
  sqlMuchos1 = ' Select * from muchos where IdTipo = "NM" ';
  sqlMuchos2 = ' Select * from muchos where IdTipo = "M" ';  
var
  P,S,T : string;
begin
  ADOQuery1.Sql.text := sqlMuchos1;
  ADOQuery2.Sql.text := sqlMuchos2;
  ADOQuery1.Active:= True;
  ADOQuery2.Active:= True;
  with ADOQuery1 do
    begin
       first;
       while not eof do
         begin
             P:= FieldByName('prefijo').AsString+ FieldByName('nom').AsString+FieldByName('sufijo').AsString+'  ';
             with ADOQuery2 do
                begin
                   first;
                   while not eof do
                      begin
                         S:= FieldByName('prefijo').AsString+ FieldByName('nom').AsString+FieldByName('sufijo').AsString;
                         T:=P+S;
                         ListBox1.Items.Add(T);
                         next;
                      end;
                end;
             next;
         end;
    end;  
end;
Adjunto la BD hecha en Access.
Me preguntaba: ¿se puede realizar la misma operación con UN SOLO TADOQuery?

o ¿Necesariamente debo utilizar los 2 ADOQueries porque son 2 consultas diferentes? (pregunto porque son mis primeros pasos con SQL)

Última edición por Deiv fecha: 02-11-2008 a las 16:15:02.
Responder Con Cita
  #2  
Antiguo 25-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para mi se puede con un solo query, ya que la sentencia que usas esta en una constante, en vez de llamar al query uno o dos, llamaria a la costante, recuerda que Text elimina todo, asi que se puede usar solo uno.
Saludos
Responder Con Cita
  #3  
Antiguo 25-07-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
¿Cómo?
Pues me parece que en la linea:

Código Delphi [-]ADOQuery1.Active:= True;


no puede existir dos Consultas Activas.
Cita:
Empezado por Caral
llamaria a la costante, recuerda que Text elimina todo
Entonces mi 2do bucle ya no funcionaría
¿Cuál sería la modificación de mi código para que realice el mismo trabajo con un solo TADOQuery?
Responder Con Cita
  #4  
Antiguo 25-07-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Ve por ejemplo un pedacito de mi programa:
Código Delphi [-]
QTemp.SQL.Text := 'Select CodUsuario From Usuarios WHERE Graficar =True';
QTemp.Active := True;
      While not QTemp.Eof do
      begin
      CBUsuarios.Items.Add(QTemp.Fields[0].Text);
      QTemp.Next;
      end;
QTemp.Active := False;
QTemp.SQL.Text := 'Select Descripcion From Estaciones WHERE Graficar =True';
QTemp.Active := True;
      While not QTemp.Eof do
      begin
      CBEstaciones.Items.Add(QTemp.Fields[0].Text);
      QTemp.Next;
Aqui con un ADOQuery (QTemp.) llamo primero a la tabla Usuarios cargo los datos en un combobox (CBUsuarios.) y luego con el mismo query llamo a la tabla Estaciones y cargo los datos en CBEstaciones.
El concepto que aplicas es esencialmente el mismo, solo que la sentencia sql la pones en una constante, nada mas.
Bueno es mi humilde opinion.
Saludos
Responder Con Cita
  #5  
Antiguo 25-07-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
En este momento no tengo Delphi a mano, pero probaré tu sugerencia y mañana os comento.
Responder Con Cita
  #6  
Antiguo 26-07-2007
Deiv Deiv is offline
Miembro
 
Registrado: jul 2005
Ubicación: La Paz - Bolivia
Posts: 364
Poder: 19
Deiv Va por buen camino
Hola,
Cita:
Empezado por Caral
El concepto que aplicas es esencialmente el mismo, solo que la sentencia sql la pones en una constante
no me había percatado que tiene una opción que desactiva la consulta, y mi código lo que hace es recorrer la tabla con un "sqlMuchos1" primero, luego recorre con "sqlMuchos2", me gustaría que observasen el fichero Access y lo probasen con Delphi para ver que realmente intento hacer. El consejo de Caral está bueno pero en la línea:
Código Delphi [-]
QTemp.Active := False;
desactiva la consulta y EMPIEZA de nuevo otra consulta, y si se fijan Yo tengo una línea que dice FIRST después de recorrer todos los registros del segundo bucle, si desactivara la anterior consulta a FALSE cada vez empezara la nueva repitiendo lo mismo.
Código:
OBJETO     USO       TIPO
Compu     Nueva    Externo
Compu     Vieja    Externo
Monitor   Nuevo    Externo
Monitor   Viejo    Externo
Tarjetas  Nuevas   Interno
Tarjetas  Viejas   Interno
Pernos    Nuevos   Interno
Filtro por Tipo=Externos (1er Bucle) y Filtro por Tipo=Internos (2do Bucle)

Compu Nueva TIENE Tarjetas Nuevas
Compu Nueva TIENE Tarjetas Viejas
Compu Nueva TIENE Pernos Nuevos
Compu Vieja TIENE Tarjetas Nuevas
Compu Vieja TIENE Tarjetas Viejas
Compu Vieja TIENE Pernos Nuevos

Monitor Nuevo TIENE Tarjetas Nuevas
Monitor Nuevo TIENE Tarjetas Viejas
Monitor Nuevo TIENE Pernos Nuevos
Monitor Viejo TIENE Tarjetas Nuevas
Monitor Viejo TIENE Tarjetas Viejas
Monitor Viejo TIENE Pernos Nuevos

De repente mi Tabla no esté muy bien encarada (es decir la BD) pero lo que intento es demostrar con este ejemplo lo que quiero hacer con los nombres de compuestos químicos (esa es mi tabla Access).

Última edición por Deiv fecha: 26-07-2007 a las 20:15:52.
Responder Con Cita
Respuesta



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
Trabajar Con TAdoTables o TAdoQueries!?? kman Varios 4 29-12-2005 12:16:37


La franja horaria es GMT +2. Ahora son las 06:46:29.


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
Copyright 1996-2007 Club Delphi