Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   incluir parámetros como campo extra en la consulta (https://www.clubdelphi.com/foros/showthread.php?t=78821)

ContraVeneno 19-05-2012 00:53:48

incluir parámetros como campo extra en la consulta
 
¿se puede hacer esto en Firebird?

Código SQL [-]
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:


Código Delphi [-]
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í:
Código SQL [-]
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...

Código SQL [-]
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
Cita:

Empezado por 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:
Código SQL [-]
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

Cita:

Empezado por RONPABLO (Mensaje 432971)
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, y me quedé con tu misma conclusión.

Saludos.

RONPABLO 19-05-2012 23:28:19

Cita:

Empezado por ecfisa
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, 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.


La franja horaria es GMT +2. Ahora son las 21:37:52.

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