Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Correccion de Sintanxis

Saludos a todos

Estoy utilizando firebird 1.5 y delphi 7. Utilizo la interface ibexpert para checar las tablas, pero hice un procedimiento y despues de investigar un poco y quedo de esta manera:

Código SQL [-]
FOR SELECT codigo_suscriptor, tipo_tarifa, tipo_factura, fecha, base_imponible, excento
    FROM facturacion f
    where (f.tipo_tarifa=:x_tipo_tarifa) and (f.tipo_factura=:x_tipo_factura) and (fecha=:x_fecha)
  INTO :cod, :tip_tar, :tip_fac, :fec, :bas_imp, :exc
  DO
    update facturacion
    set base_imponible=cloaca;
  suspend;




Ahora quisiera saber si este procedimiento tiene algun error, por que no me hace lo que yo quiero, que es: cambiar el valor que tiene base_imponible por cloaca y que todos sean de tipo_tarifa='Residencial and tipo_factura='Consumo'. Ademas coloque fecha para hacer una prueba, pero en realidad el parametro es el mes y el a#o solamente. Gracias por su atencion.

Última edición por Neftali [Germán.Estévez] fecha: 26-04-2010 a las 13:56:51. Razón: Correcion de etiquetas
Responder Con Cita
  #2  
Antiguo 25-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Perdon por la etiqueta SQL. Tuve un error.

Código SQL [-]
 

 
FOR SELECT codigo_suscriptor, tipo_tarifa, tipo_factura, fecha, base_imponible, excento

 
    FROM facturacion f

 
    where (f.tipo_tarifa=:x_tipo_tarifa) and (f.tipo_factura=:x_tipo_factura) and (fecha=:x_fecha)

 
  INTO :cod, :tip_tar, :tip_fac, :fec, :bas_imp, :exc

 
  DO

 
    update facturacion

 
    set base_imponible=cloaca;

 
  suspend;
Responder Con Cita
  #3  
Antiguo 25-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y qué error tiene?, ¿qué quieres que haga y no hace?, ¿qué es cloaca? (aparte de un lugar repugnante), ¿para qué haces un for select de una tabla y recabas datos que almacenas en unas variables y luego actualizas una tabla con un valor que no tiene nada que ver con la otra?, ¿por qué no pones el código completo?
Responder Con Cita
  #4  
Antiguo 25-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
He tratado de realizar lo siguiente:

Quiero hacer mediante un procedimiento almacenado una actualizacion. El campo base_imponible es un campo numerico y cloaca tambien lo es. Este es un sistema de facturacion por consumo de agua potable, en la cual quiero asignarle el valor que tiene el campo cloaca al campo base_imponible, para eso necesito los parametros que son tipo_tarifa (Residencial, Especial, Comercial, Industrial A) tipo_factura (Consumo o Servicio) y que sean del mes y el a#o que se suministre. Lo he intentado a traves de los componentes IBX en delphi pero no he podido hacer el cambio, de alli que me fui hacia el ibexpert para hacerlos directamente en la base y no me ha funcionado. Habia conseguido un link que me indicaba que los procedimientos almacenados se hacian de esa manera, la cual fue la que trate de modificar e hice le procedimiento presentado. Pero al fin la idea es actualizar los campos que mencione con los parametros requeridos. He realizados varios procedimientos para hacer varias cosas dentro de las tablas de la BD, pero en este caso estoy bastante desconcertado. De antemano gracias por la atencion prestada. No se si falta alguna otra informacion para tratar de resolver el asunto. Nuevamente gracias.
Responder Con Cita
  #5  
Antiguo 25-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mejor pon aquí las tablas implicadas y lo que quieres conseguir.
Responder Con Cita
  #6  
Antiguo 25-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Esta es la tabla:

Código:
Status-----Codigo---Cloaca---Tipo_tarifa---Fecha---Tipo---Base_Imponible
 
Por Facturar---237---0,38---Residencial---01/12/2009---Consumo 
Por Facturar---237---0,07---Residencial---01/01/2010---Consumo 
Facturado   ---237---0,11---Residencial---01/02/2010---Consumo 
Por Facturar---500---0,33---Residencial---01/12/2009---Consumo 
Por Facturar---500---0,12---Residencial---01/01/2010---Consumo---33,45
Por Facturar---500---0,01---Residencial---01/02/2010---Consumo---00,98
Por Facturar---500---0,87---Residencial---01/12/2009---Servicio--11,22
Por Facturar---500--- 1,2---Residencial---01/12/2009---Servicio
Por Facturar---700---0,38---Residencial---01/12/2009---Consumo
Quiero asignarle el valor que tiene cloaca a la base_Imponible en el mes de diciembre del 2009, tomando en cuenta los parametros de: Tarifa: Residencial, Tipo: Consumo y Mes de diciembre de 2009. Es decir los registros resaltados, pero debo hacerlo con un procedimiento almacenado.

Gracias por tu atencion...
Responder Con Cita
  #7  
Antiguo 26-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, si no te he entendido mal, sería algo más o menos así:

Código:
create procedure  nombrequequieras (
  tarifa varchar(15),  /* el tipo que tenga el  campo */   
  tipo varchar(15),  /* el tipo que tenga el campo */    
  mes (integer)     /* supongo que el campo fecha es timestamp o date */ 
) 
as begin   
  update tabla comosellame   
  set base_imponible = cloaca   
  where tipo_tarifa=  :tarifa   
  and tipo= :tipo   
  and extract(month from fecha)= :mes  
end
Responder Con Cita
  #8  
Antiguo 26-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Unhappy

Esto lo he intentando varias veces pero no lo hace y este es el codigo:



Código SQL [-]
Begin
  update facturacion
  set base_imponible = cloaca   
  where tipo_tarifa=:x_tipo_tarifa and tipo_factura=:x_tipo_factura and extract(month from fecha)=:x_mes and extract(year from fecha):x_year;
  suspend;
end

Cuando reviso la tabla de un registro en especial no hace el cambio.
Responder Con Cita
  #9  
Antiguo 26-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y cómo ejecutas el procedimiento?, ¿desde delphi?, ¿desde otro procedimiento?...
Responder Con Cita
  #10  
Antiguo 26-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Buenos dias

Lo ejecuto desde delphi y tambien lo hago desde ibexpert ejecutando el proceso directamente y no hace los cambsio, la verdad es que no se pueda estar sucediendo, tratare de buscar mas a fondo, pero tiene que haber algo que este ingterfiriendo.
Responder Con Cita
  #11  
Antiguo 26-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

¿ Salta algún error ?, es posible que tengas triggers que te bloqueen la modificación.

¿ Confirmas la transacción implicada ?.

Sería mejor que indicaras el código Delphi con el que ejecutas el procedimiento almacenado.

Dinos también que valores pasas exactamente como parámetros del procedimiento almacenado (tu procedimiento almacenado no va a hacer lo que tu esperas con los parámetros con valor nulo).

Saludos
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #12  
Antiguo 26-04-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 915
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bueno, si no te he entendido mal, sería algo más o menos así:

Código:
create procedure  nombrequequieras (
  tarifa varchar(15),  /* el tipo que tenga el  campo */   
  tipo varchar(15),  /* el tipo que tenga el campo */    
  mes (integer)     /* supongo que el campo fecha es timestamp o date */ 
) 
as begin   
  update tabla comosellame   
  set base_imponible = cloaca   
  where tipo_tarifa=  :tarifa   
  and tipo= :tipo   
  and extract(month from fecha)= :mes  
end
A este codigo le haria solo unos pequenos cambios...

Código:
create procedure  nombrequequieras (
  tarifa varchar(15),  /* el tipo que tenga el  campo */   
  tipo varchar(15),  /* el tipo que tenga el campo */    
  mes (integer),     /* supongo que el campo fecha es timestamp o date */ 
  ano (Integer)      /* Año*/ 
) 
as begin   
  update tabla comosellame   
  set base_imponible = cloaca   
  where Upper(tipo_tarifa)=  Upper(:tarifa)
  and Upper(tipo)= Upper(:tipo)
  and extract(month from fecha)= :mes
  and extract(year from fecha)= :ano  
end
Responder Con Cita
  #13  
Antiguo 26-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
buen dia,

El procedimiento como tal no lo estoy ejecutando desde delphi, lo hago desde ibexpert, esto lo hacia para ir filtrando posibles conflictos. Ahora bien, las sugerencias de cloayza, quedan descartadas ya que estoy incluyendo en los parametros, exactamente los campos almacenados en cuanto a las tarifas y tipo de factura. Despues de todo esto he adicionado una rutina en el momento de facturar de manera que pueda arreglar cada suscriptor, aparentemente en el grid despues de realizar la rutina, aparecen los datos correctos, pero luego de cerrar el programa y volver a entrar no aparecen, con esto da la impresion que fuera cuestion del componente transaction, aqui dejo el codigo:

========================================

Código SQL [-]
dm.ibds_facturar.DisableControls;
          dm.ibds_facturar.First;
          while not dm.ibds_facturar.Eof do
          begin
            DecodeDate(StrToDaTE(VarToStr(dm.ibds_facturar.FieldValues['fecha'])),x__year,x__month,x__day);
            if ((StrToInt(VarToStr(x__month))>=4) and (StrToInt(VarToStr(x__year))>=2009)) or ((StrToInt(VarToStr(x__month))<=2) and (StrToInt(VarToStr(x__year))>=2010)) then
            Begin
              if (dm.ibds_facturar.FieldValues['tipo_tarifa']='Residencial')then
              Begin
                dm.ibds_facturar.Edit;
                if VarToStr(dm.ibds_facturar.FieldValues['cloaca'])<>'' then dm.ibds_facturar.FieldByName('base_imponible').AsFloat:=StrToFloat(VarToStr(dm.ibds_facturar.FieldVa  lues['cloaca']));
                if VarToStr(dm.ibds_facturar.FieldValues['consumo_agua'])<>'' then dm.ibds_facturar.FieldByName('excento').AsFloat:=StrToFloat(VarToStr(dm.ibds_facturar.FieldValues['consumo_agua']));
                dm.ibds_facturar.Post;
              end;
              if (dm.ibds_facturar.FieldValues['tipo_tarifa']='Especial')then
              Begin
                dm.ibds_facturar.Edit;
                if VarToStr(dm.ibds_facturar.FieldValues['cloaca'])<>'' then dm.ibds_facturar.FieldByName('base_imponible').AsFloat:=StrToFloat(VarToStr(dm.ibds_facturar.FieldVa  lues['cloaca']));
                if VarToStr(dm.ibds_facturar.FieldValues['consumo_agua'])<>'' then dm.ibds_facturar.FieldByName('excento').AsFloat:=StrToFloat(VarToStr(dm.ibds_facturar.FieldValues['consumo_agua']));
                dm.ibds_facturar.Post;
              end;
            end;
            dm.ibds_facturar.Next;
          end;
          dm.ibds_facturar.Close;
          dm.IBTransaction1.CommitRetaining;
          dm.ibds_facturar.Open;
          dm.ibds_facturar.Last;
          dm.ibds_facturar.EnableControls;
===========================================




Nuevamente les agradezco su valioso tiempo...
Responder Con Cita
  #14  
Antiguo 26-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
He colocado policias en cada linea para verificar las condiciones y los datos que se comparan en ese momento y cumple con todas las codiciones y sigue muy bien la logica, pero luego de volver a entrar no aparecen los datos. Me da la impresion de una novatada me esta haciendo perder el tiempo pero no doy con la novatada....
Responder Con Cita
  #15  
Antiguo 26-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que me he perdido

El código que has puesto no tiene nada que ver con un procedimiento almacenado, ahí lo que haces es recorrer un dataset y modificar registros según unos condicionantes.
Eso es una forma de hacer lo que quieres, que no tiene nada que ver con un procedimiento almacenado.
No sé si estará bien ese código, no lo he seguido con detalle, pero no tiene nada que ver, son dos cosas distintas.

Para ejecutar el procedimiento puedes insertar en tu formulario un componente específico para procedimientos o puedes ejecutarlo directamente desde un componente sql, en tu caso sería algo así como:
Código SQL [-]
 "execute procedure nombredelprocedure('Residencial','Consumo',Lafecha)'
Responder Con Cita
  #16  
Antiguo 26-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Eso es correcto, el procedimiento almacenado que inicialmente presente lo estaba ejecutando directamente desde ibexpert y no desde delphi y cuando presente el codigo delphi, de hecho es una manera de realizar la tarea que estoy porponiendo hice la aclaratoria al que era una de las formas de resolver el planteamiento. Pero en otras palabras el procedimiento sugerido por cloayza no me ha funcionado, por lo tanto disene el codigo delphi y si muestra los resultados, pero al cerrar el formulario desaparecen las modificaciones. Pido disculpas por la confusion...
Responder Con Cita
  #17  
Antiguo 26-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Prueba a ejecutar directamente el update en el IB-Expert, cuando consigas que funcione como esperas, entonces lo puedes empaquetar dentro del procedimiento almacenado.

De nuevo insisto en que revises las transacciones que utilizas (que se confirmen tras modificar, que abras una transacción nueva al consultar si ha hecho la modificación, etc. ...). Y para ir descartando posibles causas de que la consulta no se comporte como tu esperas, sería útil que respondieras a si pasas valores nulos como parámetro.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #18  
Antiguo 26-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
Red face

Ok:

1.- Ya probe el update directamente sobre ib-expert y no hace los cambios

2.- Estoy utilizando una sola transaccion que se confirma antes del salir del formulario, por lo tanto esta chacado.

3.- No estoy pasando valores nulos

Disculpa pero ya he realizado las pruebas que mencionads
Responder Con Cita
  #19  
Antiguo 26-04-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por sierraja Ver Mensaje
Ok:
1.- Ya probe el update directamente sobre ib-expert y no hace los cambios
2.- Estoy utilizando una sola transaccion que se confirma antes del salir del formulario, por lo tanto esta chacado.
3.- No estoy pasando valores nulos
Disculpa pero ya he realizado las pruebas que mencionads
Bueno, amigo sierraja, da la sensación de que no quieres ayuda
Lo de "Ya probe el update directamente sobre ib-expert y no hace los cambios", no nos sirve de mucho, más que nada porque TIENE que hacer los cambios, salvo que hagas algo mal, para eso te pedimos el código completo de ese procedimiento almacenado y de tu código haciendo la llamada desde el ibexpert, por ejemplo, o desde donde lo pruebes y no te funcione.
Responder Con Cita
  #20  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 20
sierraja Va por buen camino
ok Cuando digo que no hace nada, es porque lo ejecuto y no hace los cambios necesarios. Esta es la linea que ejecuto directamente sobre ibexpert:



Y el codigo delphi es que la esta expuesto en el post anterior.

Es logico que dudes de las pruebas que me indicas, pero sencillamente nos las hace.

Ok mi pregunta es: a partir de esta linea directa debo de hacer el procedimiento almacenado y ejecutarlo directamente desde ibexpert, pero si es solamente una linea y no me funciona?, que se puede esperar de un procedimiento lamacenado, es decir, quiero decir, que la instruccion directa es sumamente sencilla y por ende el procedimiento deberia ser de la misma manera y logica, pero claro, con su sintaxis respectiva. Entonces estoy atascado en la instruccion directa y el codigo delphi, que tambien esta super sencillo y cuando se ejecuta no logra hacer los cambios.

Realmente no veo el problema para que no me de los resultados deseados, simplemente no veo el error.

Gracias por su atencion...

Ah y claro que necesito resolver esta situacion...
Responder Con Cita
Respuesta



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
Correccion de Sintaxis sierraja Firebird e Interbase 9 28-10-2008 23:34:14
Correccion ortografica Iskariote0087 Varios 4 23-02-2008 10:42:09
Una pequeña corrección Faust Varios 1 07-07-2006 07:10:39


La franja horaria es GMT +2. Ahora son las 04:09:46.


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