PDA

Ver la Versión Completa : incluir parámetros como campo extra en la consulta


ContraVeneno
19-05-2012, 00:53:48
¿se puede hacer esto en Firebird?


select :FechaIni, V.Fecha
from Documentos v
where V.Fecha between :FechaIni and :FechaFin
Order by V.fecha


obviamente eso tal cual esta no se puede, pero era para mostrar que es lo que intento lograr.

En SQL Server puedo declarar variables antes del SQL y utilizarlas ahi mismo, pero no se como lograr esto en firebird.

¿alguien que me de alguna pista?

MartinS
19-05-2012, 01:05:39
Hola. Arrancaste con todo!!! :D

bueno yo supongo que :FechaIni es y debe ser un campo, O no?, . En ese caso yo algo algo asi para unas estadisticas de acuerdo al campo que el usuario necesite:


procedure TPEstadisticas.CSelChange(Sender: TObject);
Var Grupo : STring;
begin
Grupo := CACampos.Items.Strings[CSel.ItemIndex];
Consulta.Close;
Consulta.SQL.Clear;
if CSel.ItemIndex <> 0 then
Begin
Consulta.SQL.Add('Select ' +Grupo+ ', Count (Id) As Total From Agentes');
Consulta.SQL.Add('Group by ' +Grupo);
End; // If
Consulta.Open;
end;


Ah, Como decimos por acá en Argentina, -:¡le puedo estar errando como bizco al mate!

ContraVeneno
19-05-2012, 01:17:11
cierto, si lo hago desde delphi, así se podría.

El detalle es que esto lo tengo que hacer desde Firebird, sin involucrar Delphi.

Necesito hacer una consulta donde puedan buscar entre dos fechas e incluir esos parámetros de búsqueda dentro del SQL para utilizarlos despues en otros cálculos.

en SQL server lo haría así:

Declare @Fecha Date

set @Fecha = getdate()

Select @Fecha, FechaDoc
From Tabla
where FechaDoc = @Fecha


Pero eso no lo puedo hacer en firebird, por eso busco alguna pista o idea de cómo lo podría lograr.

mightydragonlor
19-05-2012, 02:24:19
yo no lo he hecho hasta el momento, pero para qué quieres poner en el select el parámetro si ya lo tienes en FechaDoc??

cloayza
19-05-2012, 03:33:59
Procedimiento Almacenado es la clave...


create or alter procedure spConsulta (
FECHAINI date,
FECHAFIN date)
returns (
FECHA date,
FECHA_INI date)
as
begin

FOR SELECT V.Fecha
FROM Documentos v
WHERE V.Fecha BETWEEN :FechaIni AND :FechaFin
ORDER BY V.Fecha
INTO :Fecha
DO
BEGIN
FECHA_INI = FechaIni;
suspend;
END
end


Saludos cordiales

RONPABLO
19-05-2012, 06:55:54
Cuando corro la consulta inicialmente planteada me sale el siguiente error

Dynamic SQL Error SQL error code = -804 Data type unknown


Lo cual me da a entender que firebird no identifica el tipo de datos del parametro, así pues con solo decirle que es un tipo Date ya funciona bien:

select cast(:FechaIni as date) FechaIni, V.Fecha
fromDocumentos v
where V.Fecha between :FechaIni and :FechaFin
Order by V.fecha

ecfisa
19-05-2012, 07:19:57
Lo cual me da a entender que firebird no identifica el tipo de datos del parametro, así pues con solo decirle que es un tipo Date ya funciona bien

Creo que estas en lo cierto, pareciera ser que Firebird necesita que se le especifique el tipo del parámetro. Algo similar se trató en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=74341), y me quedé con tu misma conclusión.

Saludos.

RONPABLO
19-05-2012, 23:28:19
Creo que estas en lo cierto, pareciera ser que Firebird necesita que se le especifique el tipo del parámetro. Algo similar se trató en este hilo (http://www.clubdelphi.com/foros/showthread.php?t=74341), y me quedé con tu misma conclusión.

Saludos.

Pues ahora que releo ese post es muy probable que de allá sea de donde empece usar el cast de esa foprma :D

ContraVeneno
20-05-2012, 00:55:39
Muchas gracias RonPablo

esa es la solución que estaba buscando.

Gracias a todos por los comentarios.