Ir al contenido


Foto

[RESUELTO] Problemas con IBX


  • Por favor identifícate para responder
7 respuestas en este tema

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 09 agosto 2010 - 04:39

Hola a todos, estoy experimentando un poco las IBX  <:o)

Tengo la siguiente configuración:

{DataModule}
  IBTransaction:
      Name: Transac
      DefaultDatabase: Con

  IbDatabase:
      Name: Con
      DefaultTransaction: Transac


Luego abro un form donde ingreso los datos del usuario en el tengo un ibScript, donde su propiedad transaction y Database apuntan a los dos componentes que están en el modulo, le agrego estas instrucciones:




sql
  1. START TRANSACTION;
  2. INSERT INTO Usuarios (CODIGOUSUARIO, CLAVE, NOMBRE, APELLIDO, CREADO, ULTIMAASIGNACION, CADUCA, MODIFICADO) VALUES
  3. ('eduarcol', '<6698<;9V4644:7998;:655;96:75595;5644:<<:6;<984;:<605', 'Eduardo', 'Colemenares', '08/09/2010', '08/09/2010', 'F', '08/09/2010');
  4. DELETE FROM accesosmenu WHERE codigousuario = 'eduarcol';
  5. Commit;




De esta manera lo ejecuto:

 

delphi
  1. try
  2.       if not dmModulo.Transac.Active  then dmModulo.Transac.StartTransaction;
  3.       scGrabar.ExecuteScript;
  4.       txUsuario.SetFocus;
  5.  
  6.   except
  7.       on E: Exception do
  8.       begin
  9.         scGrabar.Script.Text := 'Rollback Retain;';
  10.         scGrabar.ExecuteScript;
  11.         msgError('Ha ocurrido un error al intentar grabar el registro con el siguiente mensaje: ' + E.Message);
  12.       end;
  13.   end;


Pero no graba nada, a lo que abro el ibExpert y reviso la tabla no aparece nada, no me genera ningún tipo de error ni excepciones, hace su terminación normal.

  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 09 agosto 2010 - 04:43

Hola amigo.

Una cuestión, hasta donde sé, lo que tu deseas realizar se hace con un IBQuery, el IBScript requiere del formato de DDL para funcionar correctamente.

Salud OS
  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 09 agosto 2010 - 05:54

Saludos.

No he probado ese componente en particular.  Pero me extraña que no te indique error con la sentencia Start Transaction;.

Cuando ejecutas un Script en IbExpert de ese estilo no es necesario indicar el comienzo de la transacción sino más bien el Commit.

¿Probaste sin Start Transaction?
  • 0

#4 romfrost13

romfrost13

    Member

  • Miembros
  • PipPip
  • 10 mensajes

Escrito 09 agosto 2010 - 06:01



delphi
  1. try
  2.       if not dmModulo.Transac.Active  then dmModulo.Transac.StartTransaction;
  3.       scGrabar.ExecuteScript;
  4.       dmModulo.Transac.commitretaining; // o como se escriba no me acuerdo
  5.       txUsuario.SetFocus;
  6.  
  7.   except
  8.       on E: Exception do
  9.       begin
  10.         dmModulo.Transac.RollbackRetain;
  11.         msgError('Ha ocurrido un error al intentar grabar el registro con el siguiente mensaje: ' + E.Message);
  12.       end;
  13.   end;



Siempre lo use de esa forma y siempre me funciono, incluso ahora que uso Zeos en lugar de los ibx, saca del texto del script los referente a las transacciones;
  • 0

#5 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 09 agosto 2010 - 11:54

Buenas,

Varias cosas

1.- Se puede requerir iniciar la transacción manualmente, todo depende de la configuración del componente. No obstante, la forma de hacerlo no es la correcta dado que el componente de transacción puede estar activado pero sin haber iniciado la transacción. Se haría así:



delphi
  1.       if not dmModulo.Transac.InTransaction then dmModulo.Transac.StartTransaction;



2.- Ese componente, como te han comentado, es para lanzar scripts (crear, modificar o borrar objetos -tablas, vistas, SP, triggers,....-),  no es para sentencias SQL. Para ellas tenemos un componente especial, el IBQuery (o el IBDataSet o el IBTable dependiendo de la forma de trabajar).

3.- También te falta la aceptación de la transacción con Commit o CommitRetaining.

Es decir, el proceso sería este

- Se comprueba si estamos en una transacción y sino la iniciamos
- Realizamos los insert/update/delete/select que necesitemos
- Aceptamos (o cancelamos) la transacción (Transac.Commit o Transac.CommitRetainig o Transac.Rollback o Transac.RollbackRetaining).

Espero te sirva

Nos leemos

  • 0

#6 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 10 agosto 2010 - 05:25

Gracias a todos por las aclaraciones es que vengo de Zeos y la forma es así como la hago, una duda adicional, puedo generar todas las sentencias en un único ibQuery o debo utilizar una sentencia a la vez????
  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 10 agosto 2010 - 06:01

Hola
Se pueden hacer todas las transacciones, operaciones o lo que se quiera con un solo query no hace falta mas.
Saludos
  • 0

#8 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 24 agosto 2010 - 08:14

Gracias a todos, con los aportes he logrado hacerlo funcionar, en resumen no funciona con ibScript ni con ibSql, debe ser con ibDataset o ibQuery.

Aun no se las razones pero cuando lo sepa actualizare la informacion

Doy como resuelto.
  • 0




IP.Board spam blocked by CleanTalk.