Visual Basic - transacciones

Life is soft - evento anual de software empresarial
 
Vista:

transacciones

Publicado por javier (32 intervenciones) el 27/12/2004 21:15:18
Es posible añadir nuevos registros con addnew y update estando pendiente un begintrans de conexion y sin esperar a confirmar con committrans?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:transacciones

Publicado por Ayudante (349 intervenciones) el 28/12/2004 02:31:13
El begintrans es una instrucción para indicarle al componente ADO en general que cualquier instrucción se ejecutará en una sola transacción, o sea, todo lo que insertes , actualices, borres, consultas etc. estará en caché, no en disco, solo cuando haces commit guardas la información del caché al disco o bien, lo borras con el rollback
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:transacciones

Publicado por Javier (32 intervenciones) el 28/12/2004 02:49:10
De acuerdo, pero como puedo hacer para que en el datagrid aparezca el nuevo registro aun no guardado en disco y que ademas pueda eliminarlo con rollbacktrans.En resumen se puede ver en el datagrid los recordsets en cache?.

Mi intencion es hacer algo aproximado a el tipico menu
Edicion-->Deshacer escritura

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:transacciones

Publicado por Ayudante (349 intervenciones) el 28/12/2004 04:40:33
Claro que se puede, siempre y cuando tu datagrid esté ligado al recordset, pero ojo, si más usarios utilizan la(s) tabla(s) que vas a manejar con el begintrans, ellos no podrás realizar nada hasta que uno de todos la(s) desbloquee, y en este turno otro tomará el control.

No es sano que una transaccion dure más de unos cuantos segundos, digamos que 10 sería el límite.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:transacciones

Publicado por Javier (32 intervenciones) el 28/12/2004 22:03:35
Vale, te comento, llevo dos años usando esta conexion y estoy convencido de que esta mal porque para que cada modificacion que hago en el recordset se refleje en el datagrid tengo que poner un retardo de 500 milisegundos despues de cada modificacion y despues llamar a adodc.refresh, datagrid.rebind no funciona con esta conexion.

Lo que comentas me hace pensar que mi datagrid no refleja los cambios hasta que no estan escritos en disco, y de ahi el retardo de 500 mlsg.¿Que opinas?

Mi Conexion:

En un modulo
Set BaseDevolucion = OpenDatabase("c:\Farmacia7.1\Devoluciones\" & NombreVieja)
Set rstDevolucion = BaseDevolucion.OpenRecordset("TablaDevolucion")

Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Farmacia7.1\Devoluciones\" & NombreVieja & ";Persist Security Info=False"

Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = "TablaDevolucion"

Y en la ventana de propiedades del datagrid
Datagrid1.Datasource=Adodc1

Mi conexion del recorset adodb
strCnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Committrans\" & NombreVieja & ";Persist Security Info=False"
Set cnn1 = New ADODB.Connection
cnn1.Open strCnn
cnn1.Attributes = adXactCommitRetaining
cnn1.IsolationLevel = adXactBrowse
Set rstDevolucion = New ADODB.Recordset
rstDevolucion.CursorType = adOpenDynamic
rstDevolucion.LockType = adLockPessimistic
rstDevolucion.Open "TablaDevolucion", cnn1, , , adCmdTable

Si se te ocurre cual es el problema por favor comentamelo.
Gracias.


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:transacciones

Publicado por Ayudante (349 intervenciones) el 04/01/2005 21:04:39
Bueno, compañero del foro. Digamos que te supero por 2.5 veces la experiencia con ese tipo de conexión.

Yo tengo un componente que me almacena todo un recordset, o bien, dicho de otra forma, voy guardando en memoria cliente el recordset (todo lo mando a un datagrid ligado al recordset) y si lo que se ha ingresado es lo que se desea lo envío a la BD, de lo contrario, solo destruyo el recordset con todo su contenido.

Tu conexión está bien, no veo problema, el problema es la complicación para manejar una lógica que relativamente no es tan compleja.

Cuando insertas en un recordset, el que lo edita puede ir viendo los cambios, nadie más, pero cuando se guarda, ya todos lo pueden ver, el tema es saber cuando estás editando y cuando no, que tampoco debiera ser nada fuera de lo normal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:transacciones

Publicado por ale (7 intervenciones) el 28/12/2004 13:13:21
Con addnew o update de recorset no es posible volver atrás, la verdad no se si puedas hacerlo con datagrid, pero te recomiendo usar un listview que es lo que yo uso (y se ve más lindo que un datagrid), eso si debes cargarlo tu ya que no se conecta a un abase de datos, obtienes el resultado de tu consulta en un recorset y luego vuelcas la tabla al listview por parte, acuedate de colocar el la propiedad del view del listview en reporte para que apareca como una tebla. Al agrgar un nuevo registro por el usuario solo lo agregas al listview y no a la base de datos y luego si cuendo el usuario lo confirma.
Se puede hacer con el rollback pero no es para nada bueno mantener una transacción activa que dependa del usuario. También puedes hacer que al volver atrás se ejecute un delete, pero tienes que ir guardando en una pila los id de la tabla en cuestión, si es que esta no afecta a otras.
Espero te sirva, si quieres me pides y te mando un ejemplo de como usar listview que también le puedes colocar iconos dependiendo de una condición por ej.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:transacciones

Publicado por Javier (32 intervenciones) el 28/12/2004 22:15:48
Gracias por tu respuesta , ale.Hacer lo que me recomiendas supondria demasiados cambios en un programa que lleva dos años funcionando mejor que peor.

De todas formas en la ayuda de VB existe un ejemplo donde con Update se puede usar rollback aunque no menciona que control esta enlazado al recordset:

<<Ejemplo de los métodos BeginTrans, CommitTrans y RollbackTrans>>

Creo que si como dice Ayudante el datagrid puede mostrar modificaciones antes de estar escritas en disco tal vez podria hacerse
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar