Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-02-2013
ElGatitoTapatio ElGatitoTapatio is offline
Miembro
 
Registrado: nov 2006
Posts: 38
Poder: 0
ElGatitoTapatio Va por buen camino
Exclamation SP en Firebird y consulta con Zeos Query

Muy buen día a todos, tengo un problema o mas que eso una falta de conocimiento, mi pregunta es cual es la forma correcta de mandar llamar un stored procedure desde los componentes ZEOS cuando este cuenta con info de salida.

Ese es mi procedimiento almacenado:
Código SQL [-]
CREATE PROCEDURE ABRIR_SESION(
  ID_USUARIO INTEGER,
  EQUIPO VARCHAR(15) CHARACTER SET ISO8859_1,
  IP_LOCAL VARCHAR(15) CHARACTER SET ISO8859_1,
  WINUSER VARCHAR(20) CHARACTER SET ISO8859_1)
RETURNS(
  ID_SESION INTEGER)
AS
BEGIN
  /* Procedure body */
  INSERT INTO HISTORICO_SESIONES(EQUIPO,IP,ID_USUARIO,WINUSER)
  VALUES (:EQUIPO,:IP_LOCAL,:ID_USUARIO,:WINUSER) RETURNING ID INTO ID_SESION;
  SUSPEND;
END;

y este es mi codigo en Delphi:

Código Delphi [-]
...
    with ZQuery_Cambios do
      begin
        Close;
        With SQL do
          begin
            Clear;
            if Not Cerrar then
              Add('Select ID_SESION from ABRIR_SESION('+IntToStr(IDUsuarioConectado)+','''+
                  GetPCName+''','''+GetLocalIP+''','''+GetUserWin+''')');
            Open;
            IDSesion:= Fields[0].AsInteger;
          end;
      end;

    ShowMessage(IntToStr(IDSesion));
...


Mi problema es que no se actualiza el dato en la tabla hasta que cierro mi sistema, tengo la impresion que tengo que utilizar ExecSQL sin embargo cuando hago esto no se como obtener el dato que me devuelve el procedimiento. Intente hacerlo por medio de parametros fallando en el intento.

Alguien podria resolver mi duda por favor! se que es algo muy simple que se me esta escapando.

Muchas gracias de antemano!!
Responder Con Cita
  #2  
Antiguo 21-02-2013
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Supongo que tienes que trabajar con transacciones.
Abres una transaccion, haces el select y luego haces commit.
No se como será con Zeos, pero supongo que no será complicado.

He visto este código aqui:

Código Delphi [-]
With spDeleteByName do Begin
   ParamByName ('Name').Value := 'DontKnowHow';
   conConnection.StartTransaction
   Try
      // execute StoredProc
      ExecProc;
   Except
      conConnection.Rollback;
   End;
   conConnection.Commit;
End;

Última edición por duilioisola fecha: 21-02-2013 a las 23:52:01.
Responder Con Cita
  #3  
Antiguo 22-02-2013
ElGatitoTapatio ElGatitoTapatio is offline
Miembro
 
Registrado: nov 2006
Posts: 38
Poder: 0
ElGatitoTapatio Va por buen camino
Gracias duilioisola ya probé hacer eso y sigue sin funcionar, como info extra tengo mi Connection con la propiedad AutoCommit en True. Para todas las consultas de tipo insert y update sin abrir y cerrar Transaccion se hace el autocommit menos para esta consulta a procedimiento.

La verdad sigo perdido...
Responder Con Cita
  #4  
Antiguo 27-02-2013
ElGatitoTapatio ElGatitoTapatio is offline
Miembro
 
Registrado: nov 2006
Posts: 38
Poder: 0
ElGatitoTapatio Va por buen camino
Pues parece que no salió ninguna propuesta , comento lo que me dí cuenta y como lo resolví, aunque no me gustó la forma pues fué la única que encontré.

Lo que me di cuenta es que en los ZConnection con la propiedad Autocommit en True, funciona correctamente para los querys que he utilizado, tales como updates, inserts, deletes, etc, sin embargo con los SP no realiza el commit sino hasta que se cierra la aplicación (en mi caso). Lo que hice fué justo antes de abrir el Query del SP cambiar la propiedad de Autocommit del ZConnection a False, y justo despues ejecutar el Query y obtener el resultado del SP realizo un Commit a la Connection para despues regresar su propiedad Autocommit a True.

Repito no me convence mucho esta solucion, sin embargo es como lo he podido resolver, si alguien tiene mas propuestas estoy atento a escucharlas.

Saludos y Gracias!
Responder Con Cita
  #5  
Antiguo 27-02-2013
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
¿El Query no tiene una propiedad Autocommit?
Quizás la conexión tenga esta propiedad para cuando creas algún componente que dependa de esta pero luego a cada uno de estos componentes deberías poder modificarle esta propiedad.
Quedaría algo así:

Código Delphi [-]
...
    with ZQuery_Cambios do
      begin
        Autocommit := False; // La propiedad Autocommit de ZQuery_Cambios
        conConnection.StartTransaction
        Close;
        With SQL do
          begin
            Clear;
            if Not Cerrar then
              Add('Select ID_SESION from ABRIR_SESION('+IntToStr(IDUsuarioConectado)+','''+
                  GetPCName+''','''+GetLocalIP+''','''+GetUserWin+''')');
            Open;
            IDSesion:= Fields[0].AsInteger;
          end;
          conConnection.Commit;
      end;

    ShowMessage(IntToStr(IDSesion));
...
Responder Con Cita
  #6  
Antiguo 28-02-2013
ElGatitoTapatio ElGatitoTapatio is offline
Miembro
 
Registrado: nov 2006
Posts: 38
Poder: 0
ElGatitoTapatio Va por buen camino
No mi estimado, el ZQuery no cuenta con esa propiedad ... y el codigo que pones es exactamente como lo estoy solucionando... sin embargo sigo con la espinita de si se puede hacer de forma distinta....

Muchas gracias por tu atencion y comentarios!
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
referencia multiples bases de datos en una Consulta (Query) en firebird novato_erick SQL 25 04-07-2014 10:52:40
no me funciona consulta en zeos firebird pedrolazarus Lazarus, FreePascal, Kylix, etc. 7 08-10-2012 16:36:54
Consulta SQL con Zeos franroju SQL 17 29-05-2012 06:22:37
Prepared query con Zeos.... tgsistemas Conexión con bases de datos 8 16-03-2010 00:18:54
consulta sobre zeos pipecato Varios 3 05-05-2006 01:35:53


La franja horaria es GMT +2. Ahora son las 06:12:26.


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