![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Lo que pasa es que no vas a poder ordenar una Query por una columna que no esté incluida en la sentencia Select
Para empezar, lo incluyes en la Select y, luego puedes hacer algo así (no lo he probado por lo que a lo mejor no funciona) Código:
SELECT Mueble.Codmueble,Mueble.Descripcion,Rubro.Nombre,Seccion.Nombre, :campo
FROM Mueble INNER JOIN Rubro ON Mueble.Rubro=Rubro.CodRub
INNER JOIN Seccion ON Mueble.Seccion=Seccion.Codigo
WHERE :ORDEN BETWEEN ESDE AND :HASTA
ORDER BY :campo;
procedure TForm18.ListarClick(Sender: TObject);
begin
If Lista.Text='Código' Then
begin
ModeloDatos.Consulta1.Close;
ModeloDatos.Consulta1.ParamByName('ORDEN').AsString := 'CodMueble';
ModeloDatos.Consulta1.ParamByName('DESDE').AsInteger := StrToInt(Desde.Text);
ModeloDatos.Consulta1.ParamByName('HASTA').AsInteger := StrToInt(Hasta.Text);
ModeloDatos.Consulta1.ParamByName('campo').AsString := MiTablaMiCampo.FieldName;
ModeloDatos.Consulta1.Open;
end;
Espero te sirva |
|
#2
|
|||
|
|||
|
Pregunta sobre Query
Cadetill:
hice esto: 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 :ORDEN BETWEEN ESDE AND :HASTAORDER BY :Mueble.CodMueble; procedure TForm18.ListarClick(Sender: TObject); begin If Lista.Text='Código' Then begin ModeloDatos.Consulta1.Close; ModeloDatos.Consulta1.ParamByName('ORDEN').AsString:=Modelodatos.TblMuebleCodMueble.FieldName; ModeloDatos.Consulta1.ParamByName('DESDE').AsInteger:=StrToInt(Desde.Text); ModeloDatos.Consulta1.ParamByName('HASTA').AsInteger:=StrToInt(Hasta.Text); ModeloDatos.Consulta1.Open; end; Y me da éste error: 'Invalid use of keyword' Token: BY Line Number: 5. La verdad es que no sé porque, gracias. Silvio.- |
|
#3
|
|||
|
|||
|
Hola
Ya dije que no lo había probado y lo acabo de hacer y, no, no deja pasar como parámetro el nombre del campo Tendrás que construir toda la sentencia en ejecución, pero bueno, no es muy complicado, no? |
|
#4
|
||||
|
||||
|
Cita:
fmSql = 'SELECT bla, bla, bla ORDER BY %s' y al momento de ejecutar la consulta sustituyo: Query.Sql.Text := Format(fmtSql, ['CodMueble']); // Saludos |
|
#5
|
||||
|
||||
|
Cita:
// Saludos |
|
#6
|
|||
|
|||
|
Cita:
|
|
#7
|
|||
|
|||
|
Pregunta sobre Query
Roman:
cuando te referís a ejecutar la consulta, te referías a hecrlo en el código asociado donde hago esto: procedure TForm18.ListarClick(Sender: TObject); begin If Lista.Text='Código' Then begin Form21.ListadoBienUso.DataSet:=ModeloDatos.Consulta1; ModeloDatos.Consulta1.Close; ModeloDatos.Consulta1.ParamByName('ORDEN').AsString:=Modelodatos.TblMuebleCodMueble.FieldName; ModeloDatos.Consulta1.ParamByName('DESDE').AsInteger:=StrToInt(Desde.Text); ModeloDatos.Consulta1.ParamByName('HASTA').AsInteger:=StrToInt(Hasta.Text); ModeloDatos.Consulta1.Open; end; También le asigno a la variable fmSql las sentencias de la consulta SQL en éste lugar? Disculpame y gracias. Silvio.- |
|
#8
|
|||
|
|||
|
Bueno, Román se refería a algo así
Has de tener la siguiente sentencia SQL en tu 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 :ORDEN BETWEEN :DESDE AND :HASTA ORDER BY %s Código:
ModeloDatos.Consulta1.Close;
fmSql := ModeloDatos.Consulta1.Sql.Text;
ModeloDatos.Consulta1.Sql.Text := Format(fmtSql, ['ORDEN']);
ModeloDatos.Consulta1.ParamByName('ORDEN').AsString := Modelodatos.TblMuebleCodMueble.FieldName;
ModeloDatos.Consulta1.ParamByName('DESDE').AsInteger := StrToInt(Desde.Text);
ModeloDatos.Consulta1.ParamByName('HASTA').AsInteger := StrToInt(Hasta.Text);
|
|
#9
|
||||
|
||||
|
Cita:
Otra forma podría ser olvidarse de los parámetros de SQL y colocarlos todos como parámetros de Format: 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 ORDEN BETWEEN %s AND %s ORDER BY %s Código:
ModeloDatos.Consulta1.Sql.Text := Format(fmtSql, [Desde.Text, Hasta.Text, 'ORDEN']); ModeloDatos.Consulta1.Open; |
|
#10
|
|||
|
|||
|
Pregunta sobre Query
Cadetill:
probé como vos me detallaste, pero me da el siguiente error: 'Field in order by must be in result set' y si hago Format(fmSQL,['CodMueble']); el error es 'Parameter not set in query string'. fmSQL es de tipo String? Gracias, saludos. Silvio.- |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|