Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con SELECT (https://www.clubdelphi.com/foros/showthread.php?t=76578)

Salnhack 10-11-2011 15:41:00

Problema con SELECT
 
Hola espero que me puedan ayudar

tengo 3 tablas, Mes(id_mes,descmes), Servicios(id_servicios, descservicios), Venta(id_venta,importev,id_servicios,id_mes).

necesito mostrar la descripcion de los servicio (descservicio) incluidos en la tabla venta de un mes en especifico

estoy haciendo esto
Código Delphi [-]
// Seleciono el id del mes selecionado en un comoboBox
     with DataModule4.Query1 do
      begin
       close;
       SQL.Clear;
       SQL.Add('Select (id_mes) from mes where descmes='+ QuotedStr(suiDBLookupComboBox2.Text));
       Open;
       mes:=FieldByName('id_mes').AsInteger;
      end;

//luego realizo al siguiente consulta que me selecciona la descripcion de los servicios 

 with DataModule4.Query3 do
      begin
       Close;
       SQL.Clear;
       SQL.Add('select (descservicios) from servicios where id_servicios=venta.id_servicios and venta.id_mes=:mes');
       ParamByName('mes').AsInteger:=mes;
       Open;
     end;

cuando la ejecuto me dice que faltan parametros

por favor si alguien me pudiera decir que estoy haciendo mal se lo agradeceria
tengo el query3 conectado a otro comboBox para que me liste los servicios

oscarac 10-11-2011 15:48:44

me parece que deberias usar joins.....


te doy un ejemplo

Código SQL [-]
 
Select T1.Campos... T2.campos...T3...campos 
from T1
Left Join T2 on T1.CampoenComunconT2 = T2.CampoenComunconT1
Left Join T3 on T2.CampoenComunconT3 = T3.CampoenComunconT2
Where T2.Campo = Condicion and T1.campo = Condicion

Salnhack 10-11-2011 19:47:50

hola oscarac

he probado tu sugerencia y no me funciona

Casimiro Notevi 10-11-2011 20:02:41

Cita:

Empezado por Salnhack (Mensaje 418142)
hola oscarac
he probado tu sugerencia y no me funciona

¿Y qué has probado?, ¿qué has puesto exactamente?, ¿qué resultado has obtenido?, ¿algún mensaje de error?, ¿cual?...
Ten en cuenta que oscarac te ha puesto un ejemplo.
Deberías dar más explicaciones si quieres que se te ayude, ya sabes: mejores preguntas = mejores respuestas ;)

ecfisa 10-11-2011 20:13:48

Hola.

Proba de esta forma:
Código Delphi [-]
  with Query do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT SERVICIOS.DESCSERVICIOS ');
    SQL.Add('FROM SERVICIOS, VENTA ');
    SQL.Add('WHERE VENTA.ID_SERVICIOS = SERVICIOS.ID_SERVICIOS ');
    SQL.Add('AND VENTA.ID_MES = :MES');
    ParamByName('MES').AsString:=  suiDBLookupComboBox2.Text;
    Open;
  end;

Un saludo.

AzidRain 12-11-2011 21:18:22

Una sugerencia, cuando tratamos con bases de datos tipo sql, lo mejor es probar las sentencias antes en algún administrador que nos permita editarlas y ejecutarlas para ir detectando errores, una vez que demos con el resultado que queremos entonce si lo pasamos a nuestro código. Además muchos de estos administradores traen forma de guardar los queries por lo que los puedes utilizar para otros proyectos sin tener que volver a abrir todo tu proyecto en Delphi.

En este caso considero estas atacando mal el problema desde el inicio, primero nos concentramos únicamente en SQL.

Código SQL [-]
 select  mes.descmes, venta.id_venta, servicios.descservicios, venta.importev
 from 
venta
join mes on (mes.id_mes=venta.id_mes)
join servicios on (servicios.id_servicios=venta.id_servicios)
where mes.id_mes=1

En ese ejemplo veremos los datos vendidos en el mes de enero (no necesitas las descripciones, es más sencillo con números.

Pruebala con el administrador de tu BD y ve el resultado ya cuando estes seguro, lo pasas a Delphi y lo parametrizas y acomodas.

Esta es la forma más sencilla de no tener dolor de cabeza

adan12 09-12-2011 08:04:52

q tal señores yo tengo un problema con este select

AQTemp.SQL.Text := 'Select Descripcion From Estaciones Where Graficar = true ';

olbeup 09-12-2011 08:48:35

Cita:

Empezado por Salnhack (Mensaje 418104)
Hola espero que me puedan ayudar

tengo 3 tablas, Mes(id_mes,descmes), Servicios(id_servicios, descservicios), Venta(id_venta,importev,id_servicios,id_mes).

necesito mostrar la descripcion de los servicio (descservicio) incluidos en la tabla venta de un mes en especifico

estoy haciendo esto
Código Delphi [-]
// Seleciono el id del mes selecionado en un comoboBox
     with DataModule4.Query1 do
      begin
       close;
       SQL.Clear;
       SQL.Add('Select (id_mes) from mes where descmes='+ QuotedStr(suiDBLookupComboBox2.Text));
       Open;
       mes:=FieldByName('id_mes').AsInteger;
      end;

//luego realizo al siguiente consulta que me selecciona la descripcion de los servicios 

 with DataModule4.Query3 do
      begin
       Close;
       SQL.Clear;
       SQL.Add('select (descservicios) from servicios where id_servicios=venta.id_servicios and venta.id_mes=:mes');
       ParamByName('mes').AsInteger:=mes;
       Open;
     end;

cuando la ejecuto me dice que faltan parametros

por favor si alguien me pudiera decir que estoy haciendo mal se lo agradeceria
tengo el query3 conectado a otro comboBox para que me liste los servicios

A parte de todas las respuestas de los compañeros, añado mi grano de arena.
Código Delphi [-]
with DataModule4.Query1 do
begin
  Close;
  SQL.Clear;
    SQL.Add('SELECT');
    SQL.Add('    S.DESCSERVICIOS');
    SQL.Add('  FROM Venta AS V');
    SQL.Add('    INNER JOIN Servicios AS S');
    SQL.Add('      ON S.ID_SERVICIOS = V.ID_SERVICIOS');
    SQL.Add('    INNER JOIN Mes AS M');
    SQL.Add('      ON M.ID_MES = V.ID_MES');
    SQL.Add('  WHERE M.DESCMES = ' + QuotedStr(suiDBLookupComboBox2.Text));
  Open;
end;
Cómo dice AziRain, es más rápido la ejecución de una consulta SQL utilizando números, aunque la consulta que te pongo es la misma que tienes al principio pero sólo en una consulta, aunque son más líneas también es más claro.

Un saludo.

olbeup 09-12-2011 09:01:46

Cita:

Empezado por adan12 (Mensaje 420811)
q tal señores yo tengo un problema con este select

AQTemp.SQL.Text := 'Select Descripcion From Estaciones Where Graficar = true ';

Aunque esto debería de ir en otro hilo, Graficar = true en SQL no existe true cómo dato, ahora el resultado True puede tener 2 valores según base de datos que son -1 ó 1 y false es 0, el resultado True o False, se obtiene de una comparación o resultado pero no cómo valor, porque true no existe en SQL, al menos en SQL SERVER, puede haber en otros motores el dato TRUE o FALSE ya definidos cómo parte del motor.

Un saludo.

adan12 09-12-2011 09:08:54

Cita:

Empezado por olbeup (Mensaje 420814)
Aunque esto debería de ir en otro hilo, Graficar = true en SQL no existe true cómo dato, ahora el resultado True puede tener 2 valores según base de datos que son -1 ó 1 y false es 0, el resultado True o False, se obtiene de una comparación o resultado pero no cómo valor, porque true no existe en SQL, al menos en SQL SERVER

Un saludo.

es que estoy pasando todo de acces a sql server 2008 entonces enves de true que iria en la base de datos el formato de graficar es bit osea 0 o 1 que seria en acces si/no haber si me ayudas por fa

Casimiro Notevi 09-12-2011 09:53:40

Por favor, no mezclar cosas, preguntas distintas en hilos distintos.
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

adan12 09-12-2011 10:08:52

a donde puedo esponer mi caso porq en realiad no se donde decime voz entonces ,,,,

Casimiro Notevi 09-12-2011 10:22:40

Pues crea un hilo nuevo, eliges el foro más adecuado a tu consulta, le das al botón "Nuevo hilo", escribes un título descriptivo a tu pregunta, y expones el caso lo más amplia y claramente posible.
Tal y como explica nuestra guía de estilo.


La franja horaria es GMT +2. Ahora son las 11:57:13.

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