Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Muchas gracias gluglu, precisamente eso estaba pensado en este preciso momento, pero estoy con el tema de hacer todas mis consultas con procedimientos almacenados, una mas de mis aferraciones

Edito:

Si, perdon el procedimiento almacenado es este

Código SQL [-]
ALTER PROCEDURE REPNUM (
    e_limite integer = 1,
    e_inicial date,
    e_final date)
returns (
    s_prefijo varchar(3),
    s_numero varchar(20),
    s_llamadas integer)
as
begin
  /* Procedure Text */
  FOR
    select first :E_limite Prefijo, Numero, count(numero) as numlla from llamadas
    where fecha between :E_Inicial and :E_Final
    group by prefijo, numero
    order by prefijo, numlla desc
  INTO :S_Prefijo, :S_Numero, :S_Llamadas DO
  suspend;
end

Trato de evitar el error de que pueda pasar un dato 0, que leí en algún lado produce error.
Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 14-07-2007 a las 00:37:20.
Responder Con Cita
  #2  
Antiguo 14-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Puedes intentar usar el Execute Statement, nunca lo he usado con parámetros de fechas pero me supongo que asi debería funcionar:

Código SQL [-]
 
CREATE PROCEDURE REPNUM (
    E_LIMITE INTEGER = 1,
    E_INICIAL DATE,
    E_FINAL DATE)
RETURNS (
    S_PREFIJO VARCHAR(3),
    S_NUMERO VARCHAR(20),
    S_LLAMADAS INTEGER)
AS
begin
  FOR
  execute statement 'select first ' || CAST(E_limite AS CHAR(1)) || 'Prefijo , Numero, count(numero) as numlla from llamadas where fecha between '||
  CAST(E_Inicial AS CHAR(11)) || ' and '||
  CAST(E_Final AS CHAR(11)) || ' group by prefijo, numero order by prefijo, numlla desc'
  INTO :S_Prefijo, :S_Numero, :S_Llamadas DO
  suspend;
end

Pruebalo y si te funciona, espero te sirva .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 14-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Acabo de darme cuenta que en una base de datos que tengo a mano, ya había hecho lo mismo con parámetros de fechas y toda la cosa, analizándolo recordé que la cuestión debe funcionarte asi:

Código SQL [-]
 
CREATE PROCEDURE REPNUM (
    E_LIMITE INTEGER = 1,
    E_INICIAL DATE,
    E_FINAL DATE)
RETURNS (
    S_PREFIJO VARCHAR(3),
    S_NUMERO VARCHAR(20),
    S_LLAMADAS INTEGER)
AS
begin
  FOR
  execute statement 'select first ' || CAST(E_limite AS CHAR(1)) ||
  ' Prefijo, Numero, count(numero) as numlla from llamadas where fecha between '''||
  :E_INICIAL||''' and '''||:E_FINAL||''' group by prefijo, numero order by prefijo, numlla desc'
  INTO :S_Prefijo, :S_Numero, :S_Llamadas DO
  suspend;
end
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 14-07-2007 a las 01:32:54.
Responder Con Cita
  #4  
Antiguo 14-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Perfecto, me funcionó de maravilla, solo cambié el AS CHAR(1) del E_Limite por AS INTEGER, porque pueden ser mas de 1 dígito y no sea que se les ocurra solicitar, 9, 30, 120, 1000, etc...

Como lo diria nuestro buen amigo Carlos Alberto, muchas gracias maestro.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 14-07-2007 a las 01:50:23.
Responder Con Cita
  #5  
Antiguo 14-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.070
Poder: 32
jhonny Va camino a la famajhonny Va camino a la fama
Final Feliz¡¡¡ Que bueno
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 14-07-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¿Cuál final feliz?

Tenía planeado hacer varios procedimientos con esa característica en Firebird 1.5, pero según veo ahora tendré que recurrir a la instrucción Execute Statement para que sea posible.

¿No lo hace eso un poco más lento? Hablo de unos 20 mil registros, por ejemplo.

Por otro lado, ¿cómo es que sí funciona una sentencia como la siguiente en el SQL Editor de IB Expert?

Select First :C * From Empleados

Me hace suponer que SQL Editor también utiliza Execute Statement, o bien, transforma los parámetros armando una nueva sentencia "plana" (formateo) antes de ejecutarla.

Pero no hay como estar seguros, ¿alguien puede mirar qué hace internamente el SQL Editor de IB Expert? Por favor.

Un abrazo sacado de onda.

Al González.
Responder Con Cita
  #7  
Antiguo 14-07-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Hola Alberto, pues exactamente yo tengo alrrededor de 20,000 registros en esta prueba que consta de solo dos dias de información, estos reportes los sacarán por mes, así que por simple operacion matemática estamos hablando de alrrededor de los 300,000 registros al mes.

Y tienes razón, en el Editor SQL de IBExpert funciona sin problema, el tiempo a mi parecer es el mismo, a lo más 1 segundo en realizar la consulta, tanto en el SP como en el Editor SQL.

Lo que yo pretendo es que quien trabaje es la base de datos y no el lado de cliente, por eso estoy utilizando SP's.

En este aspecto, me gustaría que ustedes los que llevan tiempo con Firebird me comentaran si esto que "soñe" es lo más idóneo o mejor sería hacerlo a través de Queries en los programas como lo hacia con Paradox.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problema con la consulta select count() enecumene PHP 5 01-02-2007 23:33:24
Problema con consulta not in (select ....) VRO Firebird e Interbase 12 03-10-2005 18:54:05
Problema conuna consulta select...not in (select ...) VRO Firebird e Interbase 2 11-08-2005 08:56:35
error Select firebird 1.5 ale21alito Firebird e Interbase 2 25-04-2005 20:20:03
Duplicidad de lineas en un grid con select contra firebird saruman91 Firebird e Interbase 6 29-10-2004 02:41:33


La franja horaria es GMT +2. Ahora son las 19:04:06.


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
Copyright 1996-2007 Club Delphi