PDA

Ver la Versión Completa : Como sustituir variables en SQL


erasmorc
17-10-2005, 16:17:22
Buenos dias,

La situacion es la siguiente tengo un reporte de una tabla cualquiera que lo hago con Quick Report al cual le coloco un componente Query de SQL yo quiero organizar este reporte por diferentes campos de esta tabla y que yo pueda seleccionar el campo por el cual quiero hacerlo, en fin esa parte esta controlada la parte que no se como hacer es sustituir en el order by que en vez del campo de la tabla sea una variable que contiene el campo por el cual quiero organizar.
Ej.:
Select * From Clientes
Order by codigo

esa seria la instruccion normal yo quisiera algo como esto
Select * From Clientes
Order by variable

en donde variable contiene el campo por el cual quiero ordenar como puedo hacer esta sustitucion que en otros lenguaje se llama macrosustitucion.

Un Saludo

epuigdef
17-10-2005, 16:32:42
Buenas!


La forma más fácil sería montar la sentencia SQL justo antes de abrir el report:

query.sql.text := 'SELECT * FROM CLIENTES order by ...'

Espero que te sirva

Un saludo

Edu

Caro
17-10-2005, 16:58:34
Hola estoy de acuerdo con lo que dice epuigdef, solo quiero aumentar este pequeño detalle que talvez sea innecesario porque la idea ya esta dada.

query.sql.text := 'SELECT * FROM CLIENTES order by '+variable;

Saludos

lucasarts_18
18-10-2005, 15:14:11
Hola:

algo así debería ser..


query.sql.text := 'SELECT * FROM CLIENTES order by : variable';
query.params[0].asvariant := edit1.text;
query.open


No tengo delphi en estos momentos, así que no sé si está bien la sentencia, pero en definitiva debes usar parametros...

Hasta luego..

:eek:

Alejandro Vilte
18-10-2005, 20:49:42
hasta ahora conosco 2 modos.
Una utilizando el parámetro del tquery (parambyname..(creo que asi)., que mas abajo pusieron un ejemplo. Y otro pasando la variable directamente a la sentencia sql, que es lo que estoy utilizando.
Por ejemplo:
supongamos las varialbles a:integer; b:string;

sería:

('select * from personas where dni='+inttostr(a)+'');
('select * from personas where apellido='+quotedstr(b)+'');

En limpio seria ( '+FUNCION(VARIABLE)+' ) sin los parentesis.

Tene en cuenta el nombre de la funcion inttostr, quotedstr...y asi cualquier otro valor que vayas a insertar en el query. Si, queres ver como sale el query antes de dispararlo, generalemente acostumbro mostrar el query con un showmessage(query.sql.text); donde query es componente o variable tquery.

Vilte, Alejandro

Lepe
19-10-2005, 08:48:25
Otra más:


const genericSelect = 'select %s FROM %s where %s order by %s'
var OrderBy:string;

begin
OrderBy := 'codigo';
qry.Sql.text := format( genericSelect,
['Nombre, codigo',
table1.tablename,
'codigo = 5',
OrderBy]);



saludos.