Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Pregunta sobre Query (https://www.clubdelphi.com/foros/showthread.php?t=9373)

__cadetill 26-04-2004 22:29:36

Cita:

Empezado por silviodp
para Mueble.CodMueble y Mueble.Descripcion funciona bien es decir me lista ordenado por esos campos y según la seleccion que yo haya hecho, pero para Rubro.Nombre y Seccion.Nombre, cuando quiero ordenar por uno de esos campos, me devuelve el reporte en blanco es decir sin ningún registro, pero no me da ningún error. Solamente que no hace lo que debiera.
Los campos que yo selecciono en mi consulta son esos cuatro.

Probaste lo de mi mensaje anterior?

silviodp 26-04-2004 22:59:43

Pregunta sobre Query
 
El código que uso es tal cual así:
Código:

procedure TForm18.ListarClick(Sender: TObject);
Var
 fmSQL:String;
begin
 If Lista.Text='Código' Then
  begin
  ModeloDatos.Consulta1.Close;
  fmSQL:=Modelodatos.Consulta1.SQL.Text;
  Modelodatos.Consulta1.SQL.Text:=Format(fmSQL,['CodMueble','CodMueble']);
  ModeloDatos.Consulta1.ParamByName('DESDE').AsInteger:=StrToInt(Desde.Text);
  ModeloDatos.Consulta1.ParamByName('HASTA').AsInteger:=StrToInt(Hasta.Text);
  ModeloDatos.Consulta1.Open;
  end
 Else
  If Lista.Text='Descripción' Then
  begin
    ModeloDatos.Consulta1.Close;
    fmSQL:=Modelodatos.Consulta1.SQL.Text;
    Modelodatos.Consulta1.SQL.Text:=Format(fmSQL,['Descripcion','Descripcion']);
    ModeloDatos.Consulta1.ParamByName('DESDE').AsString:=Desde1.Text;
    ModeloDatos.Consulta1.ParamByName('HASTA').AsString:=Hasta1.Text;
    ModeloDatos.Consulta1.Open;
  end
 Else
  If Lista.Text='Rubro' Then 
  begin
    ModeloDatos.Consulta1.Close;
    fmSQL:=Modelodatos.Consulta1.SQL.Text;
    Modelodatos.Consulta1.SQL.Text:=Format(fmSQL,['Nombre','Nombre']);
    ModeloDatos.Consulta1.ParamByName('DESDE').AsString:=Desde1.Text;
    ModeloDatos.Consulta1.ParamByName('HASTA').AsString:=Hasta1.Text;
    ModeloDatos.Consulta1.Open;
  end;

y el de la Consulta SQL es:
Código:

SELECT Mueble.Codmueble,Mueble.Descripcion,Rubro.Nombre,Seccion.Nombre
FROM Mueble INNER JOIN Rubro ON Mueble.Rubro=Rubro.CodRub
                        INNER JOIN Seccion ON Mueble.Seccion=Seccion.Codigo
WHERE %s BETWEEN :DESDE AND :HASTA
ORDER BY %s;

En la parte de 'Rubro', del código es donde no funciona bien, no probé con tu respuesta anterior ya que no entiendo bien lo del 'punto de ruptura'.
Gracias.

Silvio.-

__cadetill 26-04-2004 23:07:52

sí, vale, pero.... no me dices si has probado lo de debugear, mirar qué sentencia SQL te está generando, probar esa sentencia SQL fuera de Delphi (y de tu app), mirar que parámetros le estás pasando (quizás los estén enviando en orden inverso estilo ZZZZ y AAAAA en ligar de AAAA y ZZZZZ y por eso no te devuelve nada),............

jachguate 26-04-2004 23:19:49

Cita:

Empezado por silviodp
ya que no entiendo bien lo del 'punto de ruptura'.

Cita:

Empezado por cadetill
no me dices si has probado lo de debugear

Punto de ruptura = Breakpoint
Debugear = (spanglish(debug)) acción destinada a depurar una aplicación, normalmente se realiza poniendo un breakpoint o punto de ruptura que rompe la ejecución del programa, permitiendo evaluar y cambiar el valor de las variables y continuar la ejecución paso a paso del mismo.

__cadetill 26-04-2004 23:30:42

Cita:

Empezado por jachguate
Cita:

Empezado por silviodp
ya que no entiendo bien lo del 'punto de ruptura'.


ups!!! no lo había leido :D

Gracias por la aclaración Juan Antonio :p

silviodp 27-04-2004 14:00:30

Pregunta sobre Query
 
Cadetill:
probé desde el Explorador de bases de datos de la Consulta lo siguiente:
Código:

SELECT Mueble.Codmueble,Mueble.Descripcion,Rubro.Nombre,Seccion.Nombre
FROM Mueble INNER JOIN Rubro ON Mueble.Rubro=Rubro.CodRub
                        INNER JOIN Seccion ON Mueble.Seccion=Seccion.Codigo
WHERE Rubro BETWEEN 1 AND 2
ORDER BY Rubro.Nombre;

y me arroja el resultado que quiero, lo que hice fué sustituir los parámetros por valores (Rubro, 1,2,Rubro.Nombre), pero si a estos valores los sustituyo por los parámetros, es de decir:
Consulta:
Código:

SELECT Mueble.Codmueble,Mueble.Descripcion,Rubro.Nombre,Seccion.Nombre
FROM Mueble INNER JOIN Rubro ON Mueble.Rubro=Rubro.CodRub
                        INNER JOIN Seccion ON Mueble.Seccion=Seccion.Codigo
WHERE %s BETWEEN :DESDE AND :HASTA
ORDER BY %s;

Y ejecuto:
Código:

procedure TForm18.ListarClick(Sender: TObject);
Var
 fmSQL:String;
Begin
 If Lista.Text='Rubro' Then
  begin
    ModeloDatos.Consulta1.Close;
    fmSQL:=Modelodatos.Consulta1.SQL.Text;
  3)  Modelodatos.Consulta1.SQL.Text:=Format(fmSQL,['Nombre','Rubro.Nombre']);
    ModeloDatos.Consulta1.ParamByName('DESDE').AsString:=Desde1.Text;
    ModeloDatos.Consulta1.ParamByName('HASTA').AsString:=Hasta1.Text;
    ModeloDatos.Consulta1.Open;
  end;

no me arroja ningún resultado es decir 0 (cero) registros.
y sustituyendo en la línea 3 del código, 'Nombre' por 'Rubro' me da:

Error: 'Type mismatch in expression'.
Me parece que el problema puede estar en los parámetros, pero ya probé de muchas formas pero no lo puedo resolver.
Gracias.

Silvio.-

__cadetill 27-04-2004 17:28:03

Por pates

Qué desde fuera de la app el SQL te funcione y desde la app..... me parece muy, pero que muy raro.
Vamos a intentar ha hacer una prueba para ver exactamente que sentencia te esta ejecutando, ok?

Intenta poner lo siguiente
Código:

with ModeloDatos.Consulta1 do
begin
  SQL.Clear;
  SQL.Add('SELECT');
  SQL.Add('Mueble.Codmueble, Mueble.Descripcion, Rubro.Nombre, Seccion.Nombre');
  SQL.Add('FROM Mueble INNER JOIN Rubro ON Mueble.Rubro=Rubro.CodRub');
  SQL.Add('              INNER JOIN Seccion ON Mueble.Seccion = Seccion.Codigo');
  SQL.Add('WHERE Rubro BETWEEN '' '+Desde1.Text+' '' AND '' '+Hasta1.Text+' '' ');
  SQL.Add('ORDER BY Rubro.Nombre');
  SQL.SaveToFile('c:\lolo.txt');
end;

Con esto en c:\lolo.txt tendrás la consulta que te lanza y así podrás revisarla

Por otro lado, el error que te da con 'Rubro' seguramente es pq no dices de qué tabla es el campo y puede que esté en las 2 tablas

silviodp 27-04-2004 22:33:53

Pregunta sobre Query
 
Gracias, Cadetill, ya encontré el error.
Saludos.

Silvio.-

__cadetill 27-04-2004 23:17:57

Cita:

Empezado por silviodp
Gracias, Cadetill, ya encontré el error.

Y puede saberso como lo has solucionado o cuál era el error??? :p


La franja horaria es GMT +2. Ahora son las 04:40:55.

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