 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mie 15 Jun, 2005 9:38 pm Asunto: TRANSACCIONES |
|
|
Cesar el componente que mencionas al actualizarlo me da bastantes errores y he decidido desinstalarlo.
¿Puedes decirme con condigo como lo hago?
¿El TIBTransaction actúa cuando modificas la base de datos mediante sentencias SQL solamente, o también cuando modificas un registro con el componente TIBTable y por ejemplo Post()...?
PARA aplicar una transacción que eventos debo de utilizar, por ejemplo:
| Código: |
MDatos->IBTable->Campo->Post();
MDatos->IBTransaction->Active = true;
//O esta otra
MDatoa->IBTransaction->StartTransaction();
//Y luego
MDatos->IBTransaction->Commit();
//O esta otra
Mdatos->IBTransaction->CommitRetaining();
|
¿Cuando ejecutas el “Commit() o CommitRetaining()”, la propiedad “MDatos->IBTransaction->Active” se pone a false o permanece en true?
Como ves tanto a Grandel como a mi no hace falta mas ayuda. GRACIAS. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Jue 16 Jun, 2005 1:20 am Asunto: Re: TRANSACCIONES |
|
|
| JesúsGandia escribió: | Cesar el componente que mencionas al actualizarlo me da bastantes errores y he decidido desinstalarlo.
¿Puedes decirme como lo hago con código?
¿El TIBTransaction actúa cuando modificas la base de datos mediante sentencias SQL solamente, o también cuando modificas un registro con el componente TIBTable y por ejemplo Post()...?
PARA aplicar una transacción que eventos debo de utilizar, por ejemplo:
| Código: |
MDatos->IBTable->Campo->Post();
MDatos->IBTransaction->Active = true;
//O esta otra
MDatoa->IBTransaction->StartTransaction();
//Y luego
MDatos->IBTransaction->Commit();
//O esta otra
Mdatos->IBTransaction->CommitRetaining();
|
¿Cuando ejecutas el “Commit() o CommitRetaining()”, la propiedad “MDatos->IBTransaction->Active” se pone a false o permanece en true?
Como ves tanto a Grandel como a mi no hace falta mas ayuda. GRACIAS. |
_________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 17 Jun, 2005 9:42 am Asunto: |
|
|
es raro que te marque errores,
cuando haces post(), no deshabilitas la transaccion, este se debe cerrar con Mdatos->IBTransaction->CommitRetaining();
los paso son los siguientes,
1.- habilitas la transaccion,
2.- modificas, agregas o eliminas
3.- cierras la transaccion, para que las operaciones se reflejen en la base de datos con Mdatos->IBTransaction->CommitRetaining(); lo que hace esta sentencia, es que aplica las transacciones, y te deja el cursor de la tabla en el registro, si usas Mdatos->IBTransaction->Commit(); cierras el DataSet, y tienes que volver abrirlo..
si te causa problemas, el componente, posiblemente,tengas instalado una version de firebird o interbase, yo lo uso de la siguiente manera, no instalo interbase, cuando instalo el builder, en su lugar utilizo firebird, 1.5.x, ya que el componente, viene echo para Interbaes 7.1
saludos, y me cuentas de nuevo.. _________________
 |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Vie 17 Jun, 2005 6:47 pm Asunto: Continua |
|
|
No entiendo tu respuesta…
Si el componente viene hecho para Internase 7.1 y yo trabajo con esta versión, lo normal seria que no me diese problemas a mi y si a ti que trabajas con firebird 1.5x, pero bueno este tema ya lo tengo resuelto, pues he decidido activar las transacciones yo mismo explícitamente con código y esa era mi pregunta principal.
En resumen, te expongo las siguientes preguntas enumeradas y te pido que me respondas si es posible con las respuestas numeradas, para así de una vez por todas entenderlas bien y no molestarte más con este tema:
PREGUNTAS
PRIMERA:
¿Para activar las transacciones que método utilizo, siempre refiriéndome al código que tengo que escribir?
ESTE METODO: MDatos->IBTransaction->Active = true;
O ESTE OTRO: MDatos->IBTransaction->StarTransaction();
SEGUNDA:
¿Para confirmar la transacción que método utilizo, y que diferencia hay entre uno y otro?
ESTE METODO: MDatos->IBTransaction->Commit();
O ESTE OTRO: MDatos->IBTransaction->CommitRetaining();
TERCERA:
¿Cuándo ejecuto alguno de los métodos de la SEGUNDA PREGUNTA, la transacción deja de estar activa, finaliza o se cierra?
CUARTA:
¿Si es así, debería de volver a iniciar la transacción con alguno de los métodos de la PRIMERA PREGUNTA en otra parte del código cuando me hiciese falta volver a lanzar una transacción?
QUINTA:
Según me dices cuando hago un CommitRetaining(), se cierra el DataSet. ¿Pero cual? Se supone que cuando ejecuto una transacción con Commit(), o CommitRetaining(), la ejecuto contra la base de datos no contra la tabla. Es decir no entiendo que es lo que me dices que se cierra: Si la base de datos o la tabla implicada.
SEXTA:
En resumen lo que pretendo en mi programa, TPV-Hosteleria, es que si un establecimiento tiene mas de una caja registradora, es decir mas de un PC-TPV, en el mismo establecimiento, y todos ellos trabajan sobre la misma Base de Datos, que cuando uno de ellos modifique, actualice, borre o cancele una operación en la BD. Confirmar la transacción al momento para que los otros PC-TPV, puedan ver los cambios en tiempo real.
Siempre que modifico cualquier cosa de la BD. Debería de activar y ejecutar una transacción confirmándola, por lo cual el tiempo que está activa una transacción debería de ser muy corta en cuanto a tiempo se refiere. Por ejemplo en mi código siempre debería de activar una transacción antes del método Edit(), Insert() o Append() y seguidamente ejecutar un Commit(), o CommitRetaining() después del método Post(),
De esta forma los otros PV-TPV deberían de poder acceder a la información actualizada en tiempo real.
Posdata:
Perdona que insista con este tema, pero quizás no me explico correctamente o no sé plantearte mis dudas de una forma razonable. GRACIAS POR TODO CESAR. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Vie 17 Jun, 2005 8:01 pm Asunto: Re: Continua |
|
|
| JesúsGandia escribió: |
PREGUNTAS
PRIMERA:
¿Para activar las transacciones que método utilizo, siempre refiriéndome al código que tengo que escribir?
ESTE METODO: MDatos->IBTransaction->Active = true;
- Esta es para activar el componente, y conectarlo a la base de datos
O ESTE OTRO: MDatos->IBTransaction->StarTransaction();
- Antes de Editar, modificar, eliminar, debes iniciar la transaccion, con la sentencia anterior.
SEGUNDA:
¿Para confirmar la transacción que método utilizo, y que diferencia hay entre uno y otro?
ESTE METODO: MDatos->IBTransaction->Commit();
- si usas este metodo, todos los dataset, se cierran, y debes volver a abrirlos.
O ESTE OTRO: MDatos->IBTransaction->CommitRetaining();
Con este Metodo, aplicas la transaccion, y dejas activos los DataSet, es mejor usarlo, que en lugar del anterior
TERCERA:
¿Cuándo ejecuto alguno de los métodos de la SEGUNDA PREGUNTA, la transacción deja de estar activa, finaliza o se cierra?
- la transaccion se cierra, con cualquiera de las 2, y para volver a modificar, agregar o eliminar, debes usar StarTransaciton(), de nuevo
CUARTA:
¿Si es así, debería de volver a iniciar la transacción con alguno de los métodos de la PRIMERA PREGUNTA en otra parte del código cuando me hiciese falta volver a lanzar una transacción?
- Solo debes usar la StarTransacction, para indicar que vas a crear una transaccion, si usas el propiedad Active, y la cierras, es como si estuvieras abriendo y cerrando la conexion de las transacciones, es mejor usar StarTransacction()
QUINTA:
Según me dices cuando hago un CommitRetaining(), se cierra el DataSet. ¿Pero cual? Se supone que cuando ejecuto una transacción con Commit(), o CommitRetaining(), la ejecuto contra la base de datos no contra la tabla. Es decir no entiendo que es lo que me dices que se cierra: Si la base de datos o la tabla implicada.
se cierra el dataset, de la base de datos, en teoria, lo que se hace, es cerrar las tablas, pero como estas dependen, del IBDataBase, entonces al cerrarse el IBDataBase, cierras automaticamente las tablas, es mejor usar el CommitRetaining(), para aplicar las transacciones y dejar las tablas, abiertas.
SEXTA:
En resumen lo que pretendo en mi programa, TPV-Hosteleria, es que si un establecimiento tiene mas de una caja registradora, es decir mas de un PC-TPV, en el mismo establecimiento, y todos ellos trabajan sobre la misma Base de Datos, que cuando uno de ellos modifique, actualice, borre o cancele una operación en la BD. Confirmar la transacción al momento para que los otros PC-TPV, puedan ver los cambios en tiempo real.
Siempre que modifico cualquier cosa de la BD. Debería de activar y ejecutar una transacción confirmándola, por lo cual el tiempo que está activa una transacción debería de ser muy corta en cuanto a tiempo se refiere. Por ejemplo en mi código siempre debería de activar una transacción antes del método Edit(), Insert() o Append() y seguidamente ejecutar un Commit(), o CommitRetaining() después del método Post(),
De esta forma los otros PV-TPV deberían de poder acceder a la información actualizada en tiempo real.
Para ello, si quieres, que las otras, terminales reflejen, la transaccion de las otras maquinas, puedes poner un IBEvents, y registras un evento..
asi cuando grabes, generas el evento, como este se ejecuta, en el servidor, y las terminales estan conectadas a la base de datos. el evento se genera, para cada una de ellas, (te recomiendo buscar dentro del foro, tambien he dejado algo sobre el IBEvents), si no lo encuentras, espero darte el link.
Posdata:
Perdona que insista con este tema, pero quizás no me explico correctamente o no sé plantearte mis dudas de una forma razonable. GRACIAS POR TODO CESAR. |
Todo esta correcto, espero haberte sido de ayuda |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Vie 17 Jun, 2005 8:03 pm Asunto: Re: Continua |
|
|
| JesúsGandia escribió: |
PREGUNTAS
PRIMERA:
¿Para activar las transacciones que método utilizo, siempre refiriéndome al código que tengo que escribir?
ESTE METODO: MDatos->IBTransaction->Active = true;
- Esta es para activar el componente, y conectarlo a la base de datos
O ESTE OTRO: MDatos->IBTransaction->StarTransaction();
- Antes de Editar, modificar, eliminar, debes iniciar la transaccion, con la sentencia anterior.
SEGUNDA:
¿Para confirmar la transacción que método utilizo, y que diferencia hay entre uno y otro?
ESTE METODO: MDatos->IBTransaction->Commit();
- si usas este metodo, todos los dataset, se cierran, y debes volver a abrirlos.
O ESTE OTRO: MDatos->IBTransaction->CommitRetaining();
Con este Metodo, aplicas la transaccion, y dejas activos los DataSet, es mejor usarlo, que en lugar del anterior
TERCERA:
¿Cuándo ejecuto alguno de los métodos de la SEGUNDA PREGUNTA, la transacción deja de estar activa, finaliza o se cierra?
- la transaccion se cierra, con cualquiera de las 2, y para volver a modificar, agregar o eliminar, debes usar StarTransaciton(), de nuevo
CUARTA:
¿Si es así, debería de volver a iniciar la transacción con alguno de los métodos de la PRIMERA PREGUNTA en otra parte del código cuando me hiciese falta volver a lanzar una transacción?
- Solo debes usar la StarTransacction, para indicar que vas a crear una transaccion, si usas el propiedad Active, y la cierras, es como si estuvieras abriendo y cerrando la conexion de las transacciones, es mejor usar StarTransacction()
QUINTA:
Según me dices cuando hago un CommitRetaining(), se cierra el DataSet. ¿Pero cual? Se supone que cuando ejecuto una transacción con Commit(), o CommitRetaining(), la ejecuto contra la base de datos no contra la tabla. Es decir no entiendo que es lo que me dices que se cierra: Si la base de datos o la tabla implicada.
- se cierra el dataset, de la base de datos, en teoria, lo que se hace, es cerrar las tablas, pero como estas dependen, del IBDataBase, entonces al cerrarse el IBDataBase, cierras automaticamente las tablas, es mejor usar el CommitRetaining(), para aplicar las transacciones y dejar las tablas, abiertas.
SEXTA:
En resumen lo que pretendo en mi programa, TPV-Hosteleria, es que si un establecimiento tiene mas de una caja registradora, es decir mas de un PC-TPV, en el mismo establecimiento, y todos ellos trabajan sobre la misma Base de Datos, que cuando uno de ellos modifique, actualice, borre o cancele una operación en la BD. Confirmar la transacción al momento para que los otros PC-TPV, puedan ver los cambios en tiempo real.
Siempre que modifico cualquier cosa de la BD. Debería de activar y ejecutar una transacción confirmándola, por lo cual el tiempo que está activa una transacción debería de ser muy corta en cuanto a tiempo se refiere. Por ejemplo en mi código siempre debería de activar una transacción antes del método Edit(), Insert() o Append() y seguidamente ejecutar un Commit(), o CommitRetaining() después del método Post(),
De esta forma los otros PV-TPV deberían de poder acceder a la información actualizada en tiempo real.
Para ello, si quieres, que las otras, terminales reflejen, la transaccion de las otras maquinas, puedes poner un IBEvents, y registras un evento..
asi cuando grabes, generas el evento, como este se ejecuta, en el servidor, y las terminales estan conectadas a la base de datos. el evento se genera, para cada una de ellas, (te recomiendo buscar dentro del foro, tambien he dejado algo sobre el IBEvents), si no lo encuentras, espero darte el link.
Posdata:
Perdona que insista con este tema, pero quizás no me explico correctamente o no sé plantearte mis dudas de una forma razonable. GRACIAS POR TODO CESAR. |
Todo esta correcto, espero haberte sido de ayuda |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 17 Jun, 2005 8:06 pm Asunto: |
|
|
si ya lo se!!, el LOGIN je je  _________________
 |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Vie 17 Jun, 2005 10:41 pm Asunto: Gracias |
|
|
Gracias Cesar por todas las respuestas.
Pero...
Cesar citó:
| Código: |
Para ello, si quieres, que las otras, terminales reflejen, la transaccion de las otras maquinas, puedes poner un IBEvents, y registras un evento..
asi cuando grabes, generas el evento, como este se ejecuta, en el servidor, y las terminales estan conectadas a la base de datos. el evento se genera, para cada una de ellas, (te recomiendo buscar dentro del foro, tambien he dejado algo sobre el IBEvents), si no lo encuentras, espero darte el link.
|
¿como genero el evento de IBEvent?
He insertado un IBEvents en el modulo de datos y he creado los siguientes eventos en Events: Articulos, Grupos, EstadoComanda, DetallesComanda, Empleados, HistoricoArticulos, Imagenes y Usuarios, en total 8 Eventos, 1 para cada tabla, para saver cuando a habido algún cambio en alguna de ellas, y luego en el EventAlert he puesto este código:
| Código: |
void __fastcall TMDatos::IBEventosEventAlert(TObject *Sender,
AnsiString EventName, int EventCount, bool &CancelAlerts)
{
if (EventName == "Articulos")
IBTArticulos->Refresh();
if (EventName == "Grupos")
IBTGrupos->Refresh();
if (EventName == "EstadoComanda")
IBTEstadoComanda->Refresh();
if (EventName == "DetallesComanda")
IBTDetComanda->Refresh();
if (EventName == "Empleados")
IBTEmpleados->Refresh();
if (EventName == "HistoricoArticulos")
IBTHistArticulos->Refresh();
if (EventName == "Imagenes")
IBTImagenes->Refresh();
if (EventName == "Usuarios")
IBTUsuarios->Refresh();
}
|
¿Tengo que hacer algun triger o procedimiento almacenado en la BD?
Y si es asi ¿Como?
Estoy un poco verde en este tema y encima creo que si lo tubiese que hacer en la BD, tendria que hacerlo en Código Pascal, pues la verdad es que necesito una ayudita.
¿Podrias ponerme algun ejemplo de como hacerlo? OTRA VEZ, GRACIAS. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Ultima edición por JesúsGandia el Sab 18 Jun, 2005 12:19 am, editado 1 vez |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Sab 18 Jun, 2005 12:14 am Asunto: Funciona |
|
|
Cesar después de escribirte el Post Nº 22, he modificado el código de mi aplicación y funciona de maravilla, a falta de escribir el código necesario para los IBEvents que no sé, pero espero tu me ayudes a solucionarlo. Ahora puedo abrir una misma mesa desde cualquier PC-TPV, añadir o modificar registros en uno de ellos y el resultado se muestra en el otro, pero eso si, después de hacer algún movimiento en el otro, es decir se muestran las modificaciones que he hecho desde el PC-TPV-1 en el PC-TPV-2, pero solo cuando refresco o modifico algo en el PC-TPV2. Por todo ello creo que la solución como tu bien dices esta en el componente IBEvents. Al final en mi código para no ir repitiendo las instrucciones de IBTransaction he hecho lo siguiente y funciona de mil maravillas.
En los Eventos: (BeboreDelete, BeforeEdit, BeforeInsert) de mis TIBTable que son 8 he puesto este código:
| Código: |
void __fastcall TMDatos::IBTArticulosBeforeEdit(TDataSet *DataSet)
{
if(!DataSet->Active)
DataSet->Open();
if(!IBTransaction->InTransaction)
IBTransaction->StartTransaction();
}
|
En los Eventos: (BeboreDelete, BeforeEdit, BeforeInsert) de mis TIBQuery que son 4 he puesto este código:
| Código: |
void __fastcall TMDatos::IBQHistArticulosBeforeDelete(TDataSet *DataSet)
{
if(!IBTransaction->InTransaction)
IBTransaction->StartTransaction();
}
|
En los Eventos: (AfterDelete, AfterPost) de mis TIBTable que son 8, y mis IBQuery que son 4 he puesto este código:
| Código: |
void __fastcall TMDatos::IBTArticulosAfterPost(TDataSet *DataSet)
{
if(IBTransaction->InTransaction)
IBTransaction->CommitRetaining();
}
|
El TIBTransaction lo he puesto a “Read Committed” haciendo doble click sobre el componente.
Sus propiedades “AutoStopAction = saCommitRetaining, y DefaultAction = TACommitRetaining”.
Luego en el evento IBDatabaseAfterConnect esto otro:
| Código: |
void __fastcall TMDatos::IBDatabaseAfterConnect(TObject *Sender)
{
IBTransaction->Active = true;
IBTransaction->CommitRetaining();
}
|
Con todo esto ahorro mucho código, aunque no he encontrado el evento BeforeAppend, ¿Cómo lo soluciono? O quizás no haga falta porque cuando ejecutas un Append() la tabla se pone en modo de edición y por eso quizás le valga el Evento BeforeEdit, ¿Es así, o por el contrario me equivoco?
La verdad es que estoy solucionando todas mis dudas, aunque poco a poco.
Gracias por la grandísima ayuda que me has prestado, ya solo me falta creo, solucionar lo de el componente “IBEvents”. Como no me caso ahí va otra vez… GRACIAS.  _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 18 Jun, 2005 2:01 pm Asunto: |
|
|
Bien esto es un poco largo, pero intentare ser lo mas espesifico, en cuanto a la descripcion y utilizacion, del IBEvents, yo lo uso de la siguiente manera, y no tengo problemas, al actualizar entre varias tablas, asi, que ahi va..
Bien lo primero que hay que hacer, es crear un procedimiento almacenado en la base de datos. de la siguiente manera.
Posteriormente dentro del modulo de datos, pones dos componentes
1. IBEvents con las siguientes propiedades
1. IBStoredProc con las siguientes propiedas
bien ya teniendo los siguientes compoentes, y previamente asignados a la base de datos. ahora vamos al codigo.
En el evento despues de conectar en la base, registras el procedimiento y preparas el procedimiento, con el evento Procedure Registrado en la base
ahora bien, cuando grabas, editas, o borras un registro, los codigos son los siguientes
Nuevo o Modificacion
| Código: | DMPROVEEDORES->IBDProveedores->Post(); // grabamos en la tabla
DMREMOTO->IBTS3->CommitRetaining(); // aplicamos la trasaccion
DMREMOTO->IBSPS3->ExecProc(); // generamos el evento, para actualizar |
Borrado de un Registro
| Código: | DMPROVEEDORES->IBDProveedores->Delete();
DMREMOTO->IBTS3->CommitRetaining(); // aplicamos la trasaccion
DMREMOTO->IBSPS3->ExecProc(); // generamos el evento, para actualizar |
Como te habras dado cuenta, al final viene siempre la generacion del evento.
| Código: | DMREMOTO->IBSPS3->ExecProc(); // generamos el evento, para actualizar |
Que es el que se encarga de activar el IBEvents, es decir, cada vez que ejecutas el procedimiento almacenado, este genera un POST_EVEN 'RFD', y este evento se envia a todas las apliacaciones, que se encuentren conectadas a la base de datos..
y por ultimo al recibir, el evento en tu Componente IBEventes, y en el evento EventAlert()
| Código: | void __fastcall TDMREMOTO::IBES3EventAlert(TObject *Sender, AnsiString EventName,
int EventCount, bool &CancelAlerts)
{
if(EventName=="RFD")
{
// cuando recibes el evento, actualizas las tablas que te
// interesan, que no son todas..
};
}
//--------------------------------------------------------------------------- |
Compara el evento que se genera, en este caso RFD, y actualizas las tablas, con ApplyUpdates, por ejemplo
| Código: | ModuloUsuarios->IBDUsuarios->ApplyUpdates() |
quedando algo asi
| Código: | void __fastcall TDMREMOTO::IBES3EventAlert(TObject *Sender, AnsiString EventName,
int EventCount, bool &CancelAlerts)
{
if(EventName=="RFD")
{
// cuando recibes el evento, actualizas las tablas que te
// interesan, que no son todas..
ModuloUsuarios->IBDUsuarios->ApplyUpdates();
};
}
//--------------------------------------------------------------------------- |
Espero que sea claro, y no tengas tanto problemas con esto.. _________________

Ultima edición por Cesar C. Salazar Gonzalez el Vie 03 Nov, 2006 6:58 am, editado 1 vez |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Sab 18 Jun, 2005 6:52 pm Asunto: Mas claro el agua |
|
|
Cesar, eres superway, mas claro no puede estar, ¡THANKS YOU!  _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 19 Jun, 2005 5:13 am Asunto: |
|
|
Un saludo.. para todos.
Mas no se puede decir.. je je, este mensaje fue cambiado del original, ya que el anterior fue un momento de nostalgia.. _________________

Ultima edición por Cesar C. Salazar Gonzalez el Mar 21 Jun, 2005 3:57 pm, editado 1 vez |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Dom 19 Jun, 2005 6:12 pm Asunto: Ven cuando quieras |
|
|
Si ese es tu deseo, por mi parte no hay ningun problema. Soy de Valencia (PLAYA DE GANDIA) y si decides venir, mi casa esta abierta. Solo me queda decirte, animate y hazlo. SALUDOS _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Crandel Lt


Registrado: 31 May 2005Mensajes: 94Ubicación: Argentina
|
Publicado: Vie 01 Jul, 2005 5:33 am Asunto: |
|
|
Hola, me vuelvo a sumar al hilo, despues de un tiempo perdido.
Leyendo la explicación de César sobre los eventos quería agregar una cosa más, que es como yo los uso.
En ves de generar un procedimiento almacenado para disparar el evento, es mucho mas facil hacerlo mediante un trigger.
Quedaría asi:
| Código: |
CREATE TRIGGER ACTUALIZAR_FDB FOR Proveedores
AFTER INSERT AS
BEGIN
POST_EVENT 'RFD';
END^
|
y una vez ejecutada la transacción
| Código: |
DMREMOTO->IBTS3->CommitRetaining();
|
no es necesario llamar a ningún procedimiento, esto te asegura que no te vallas a olvidar de llamarlo y tener que modificar todos los programas que tenias escritos.
Tiene una desventaja, tienes que crear un trigger por cada tabla. Pero normalmente es lo que uno hace, generando un evento para cada tabla, entonces solo actualizas la tabla que generó el evento.
Esto completa un poco la idea
Suerte _________________ Crandel
"hay 10 tipos de personas, las que ven en binario y las que no"
Angel Zeitoune - Artículo: Generación de eventos en C++Builder |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|