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 26-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
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
  #2  
Antiguo 26-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
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
  #3  
Antiguo 26-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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
  #4  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
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
  #5  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Esta es la instruccion que ejecuto directamente desde delphi:

Código SQL [-]
update facturacion f set f.base_imponible=f.cloaca  where (extract(month from f.fecha)=:x_mes) and (extract(year from f.fecha)=:x_year) and (f.tipo_factura='Consumo') and (f.tipo_tarifa='Residencial');
Responder Con Cita
  #6  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Mas informacion:

.- Utilizo Firebird 1.5 sobre un servidor Linux Ubuntu 8.04.
.- Las estaciones de trabajo esta corriendo sobre win xp
.- EL programa esta hecho en delphi 7 con todos los componentes basicos (no tercertos).
.- Utilizo los components IBX para que trae delphi 7 para accesar la data.


Gracias.
Responder Con Cita
  #7  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Talking

ja ja ja Pido disculpas por no saber expresarme mejor, pero creeme lo intento. ja ja ja
Responder Con Cita
  #8  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
jajaja... ahora un método nuevo, con este ya van 3 formas distintas.
Responder Con Cita
  #9  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Es que en cada uno de las 3 formas... no nos has dado toda la información.

De todas formas lo de emplear "Consumo", "Residencial", etc. es una muy mala idea porque influyen varios factores que pueden hacer que no funcione, si pones "consumo", por ejemplo, ya no funcionará, tampoco funcionará dependiendo del tipo de dato usado en crear el campo, que tampoco nos has puesto la estructura de la tabla.
Por ejemplo, si usas un campo de cadena fija, digamos que un char(20) y almacenas el valor "Consumo" que tiene 7 caracteres, realmente no se está almacenando "Consumo" sino "Consumo ", así que cuando vas a hacer el filtro por ese campo, nunca te funcionará. Si usas varchar(20) no habrá problema porque él sólo quita los espacios... o no, depende de la versión de firebird/interbase que uses, porque en las versiones antiguas, la firebird 1.0 todavía no tenía solucionado el fallo de que los varchar se guardaban también con los espacios.
Estos son simples ejemplos de por lo qu einsistimos mucho que necesitamos mucha más información, lo más completa posible, para poder ayudar.
Responder Con Cita
  #10  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Wow, cada vez uno aprende mas:

En la captura de datos se valida la entrada de los mismo, es decir, cuando defines el tipo de factura se validan: "Consumo" y/o "Servicios" Cualquiera de los dos, el usuario no lo escribe, solo lo selecciona.

En lo que respecta a tipo de tarifa, igualemente valido que sea: "Residencial" o "Especial" o "Comercial" o "Industrial A" y "Industrial B". Igualmente como el anterior, el usuario no lo escribe, y solo lo selecciona.

De esta manera estan almacenados en la base de datos.

El tipo de datos en la base de datos para los dos campos es Varchar(10) y varchar (30) respectivamente.

El sistema consiste en un sistema de facturacion del servicio de agua potable y tiene tres years funcionando, pero cada dia se le han agregado cosas nuevas. Desde el year pasado se le agrego los impuestos cuyo desgloce consiste en base imponible y cantidad excenta, eso es lo que estamos tratando de arreglar.

Este es una peque#a explicacion de lo que hace el sistema. he realizado varias pruebas que no han resultado y solo he tenido ese problema con ella, he realizado varias pruebas con los ultimos cuatro meses y no he tenido exito. Tambien he realizado chequeos de otras transacciones de consulta que se activen fantasmalmente y no he encontrado nada. He filtrado la data con pocos registro y tampoco he tenido exito. Hast el momento se tiene 380000 registro en la tabla de facturacion que estamos manejando.

Si quieren mas informacion hasta les puedo enviar la misma base de datos, para que realicen sus prueba.
Responder Con Cita
  #11  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por sierraja Ver Mensaje
[..]Si quieren mas informacion hasta les puedo enviar la misma base de datos, para que realicen sus prueba.
No creo que sea necesario

Centrémonos en un método determinado, ¿te parece bien el procedimiento almacenado?, creo que es la mejor opción.

Pon aquí el código completo del mismo y haremos una prueba desde el ibexpert.
Además pon aquí el código completo de la estructura de la tabla, ok?
Responder Con Cita
  #12  
Antiguo 27-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Cita:
Empezado por sierraja Ver Mensaje
3.- No estoy pasando valores nulos.
Perfecto.

Cita:
Empezado por sierraja Ver Mensaje
1.- Ya probe el update directamente sobre ib-expert y no hace los cambios
Como ha confirmado Casimiro, debería funcionar, hay que insistir en esta prueba hasta hacerla funcionar.

Cita:
Empezado por sierraja Ver Mensaje
2.- Estoy utilizando una sola transaccion que se confirma antes del salir del formulario, por lo tanto esta chacado.
Me refería a las transacciones que se utilizan en tus pruebas en IB-Expert.

Olvídate de Delphi por ahora, y céntrate en el caso más simple posible, en hacerlo funcionar como consulta en IB-Expert.

Una vez te funcione la consulta, ya lo puedes empaquetar en el procedimiento almacenado y probarlo, para finalmente ejecutarlo en Delphi.

Así pues volvamos a las transacciones en IB-Expert.

La única forma en que eso te va a funcionar es que cuando lances el Update, confirmes la transacción. Una vez confirmada la transacción del Update, ya puedes abrir una consulta nueva, con una transacción nueva, para comprobar si se han modificado los registros.

Si no sigues estos pasos (si no confirmas la transacción de modificación o si no abres la transacción de consulta después de haber confirmado la de modificación), no podrás ver los datos modificados.

Asegúrate de descartar que no tengas el problema simplemente por un mal uso de las transacciones, y una vez descartemos esa posibilidad podremos investigar otras causas.

NOTA: Si el problema no es la transacción, yo te recomiendo simplificar la consulta al máximo, hasta tener una consulta mínima que funcione (aunque evidentemente no hará todo lo que necesitas). Y una vez tengas como partida una consulta funcionando, que modifica correctamente datos, entonces le vas agregando poco a poco cláusulas SQL en el WHERE, probando su comportamiento a cada modificación, para identificar cual es la que hace que no funcione como tu esperas.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #13  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Buenos dias,

Estoy totalmente de acuerdo con guillotmarc, olvidemonos de delphi por el momento, cada vez que ejecuto un SP confirmo la transaccion y luego consulto, y no actualiza, ahora bien, he tratado de armar la consulta lo mas especificamente posible (corrigeme si es mala practica), para tratar de ir al registro especificamente y hacer el cambio respectivo y si lo ejecuta, pero, cuando intente en una de las pruebas hacerlo por lote de registro es ahi el problema que no lo hace. Inclusive he creado una tabla con menos de la cantidad de registro de la actual (380000), por decir, de los ultimos dos years y no ha funcionado.

He cambiado el nombre SP y coloque act_impuesto:

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

Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE ACT_IMPUESTO (
    X_TIPO_TARIFA VARCHAR(30),
    X_TIPO_FACTURA VARCHAR(10),
    X_MES INTEGER,
    X_YEAR INTEGER)
AS
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;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON FACTURACION TO PROCEDURE ACT_IMPUESTO;
GRANT EXECUTE ON PROCEDURE ACT_IMPUESTO TO SYSDBA;

=========================
Como veran tambien he quitado el suspend; de la ultima linea de SP. Y no hace los cambios todavia. Segun recomienda Casimiro

Lo unico que no he hecho es hacer las pruebas en flamerobin. Y un detalle que no se si valga la pena, es que cuando ejecuto el SP lo hago desde el icono que me indica ibexpert que ejecuta el procedimiento o en su defecto F9
Responder Con Cita
  #14  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Pero lo ejecutas así:

Código:
execute procedure COMOSELLAME("Residencial","Consumo",1,2010)
No entiendo lo de ejecutar por lotes, no tienes más que ejecutar esa línea anterior, con el mes y año que quieras.
Responder Con Cita
  #15  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Hola, claro! lo ejecuto como me indicas. Y cuando hablaba de por lotes, me referia a que utilizaba un grupo de registros mas peque#os pero sobre la misma tabla....
Responder Con Cita
  #16  
Antiguo 27-04-2010
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.671
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Es igual si tienes un registro o si tienes mil millones de registros, pero si haces esto:

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;

estás asignando el valor que tenga el campo 'cloaca' al campo 'base_imponible', es IMPOSIBLE que no te actualice a tí, salvo que pongas unos parámetros que no existan registros con ese filtro.

Te has fijado en la imagen que puse antes, justo debajo del "execute procedure" verás que hay un select, si lo ejecutas verás los registros que te devuelve, todos esos registros son los que se actualizarán ejecutando el procedimiento almacenado.
Pruébalo y mira cuántos registros devuelve.

Última edición por Casimiro Noteví fecha: 27-04-2010 a las 19:44:09. Razón: error ortográfico
Responder Con Cita
  #17  
Antiguo 27-04-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Hola.

En un caso tan sencillo, yo no utilizaría ningún procedimiento almacenado, ejecutaría directamente la sentencia update :

Código:
  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;
Aunque realmente empezaría con un :

Código:
  update facturacion
  set base_imponible = cloaca
Y si esta consulta funciona correctamente (no se me ocurre como podría no funcionar bien), empezaría a agregar cláusulas SQL, una a una, hasta encontrar la que ocasiona el problema.

Siguiente prueba :

Código:
  update facturacion
  set base_imponible = cloaca
  where tipo_tarifa=:x_tipo_tarifa
Siguiente :

Código:
  update facturacion
  set base_imponible = cloaca
  where tipo_tarifa=:x_tipo_tarifa and tipo_factura=:x_tipo_factura
etc. ...

NOTA: entre prueba y prueba, hazte una copia del archivo de datos, para no machacar facturas que no debiera.

Una vez sepamos cual es la cláusula que no hace lo que se espera de ella, debería ser muy fácil solucionarlo. Y es que como dice Casimiro, el problema tiene que estar en la cláusula WHERE y los parámetros que se le pasan.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 27-04-2010 a las 19:24:20.
Responder Con Cita
  #18  
Antiguo 27-04-2010
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Cita:
Aunque realmente empezaría con un :


Código:
update facturacion set base_imponible = cloaca
Y si esta consulta funciona correctamente (no se me ocurre como podría no funcionar bien), empezaría a agregar cláusulas SQL, una a una, hasta encontrar la que ocasiona el problema.
Ok de hecho una de mis pruebas fue asi de sencilla y lo hizo muy bien, pero el problema consiste en que antes del year 2009 no se tenia impuesto en esas facturas y por lo tanto se debria colocar.

Cita:
estás asignando el valor que tenga el campo 'cloaca' al campo 'base_imponible', es IMPOSIBLE que no te actualice a tí, salvo que pongas unos parámetros que no existan registros
Pensando en las lineas anteriores de lo IMPOSIBLE, revisé los campos de ese registro que no se actualiza y está dentro de las condiciones que se exigen.

Bueno de hecho lo que me queda realizar es un select con lsa condiciones y de seguro que salen los registros deseados y hacer la actualizacion a pie como se le dice en mi pais. No veo otra salida.

Hemos utilizado una simple instruccion a nivel del ibexpert sin necesidad de SP y tampoo los realiza pero con un select si aparecen pero sin los cambios.
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
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 18:50:14.


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