Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: ElNapster en Miércoles 13 de Diciembre de 2006, 23:13
Título: Transacciones
Publicado por: ElNapster en Miércoles 13 de Diciembre de 2006, 23:13
Que tal , tengo una duda , se puede hacer desde vb 6 un tipo de transaccion ? por decirles un ejemplo ..se tiene que cumplir ciertos procesos para poder llevar acabo una rutina completa , si no se llegara a cumplir se anula todo lo que llevaba hasta al momento del error..? no se si me explico .. :P Gracias ... :comp:
Título: Re: Transacciones
Publicado por: F_Tanori en Miércoles 13 de Diciembre de 2006, 23:15
en SQL? o en un procedimiento cualquiera?
Saludos
Título: Re: Transacciones
Publicado por: ElNapster en Miércoles 13 de Diciembre de 2006, 23:21
Ummmm no precisamente, esque te cuento lo que tengo que hacer... 1. Importar la data de un archivo a una tabla temporal 2. Comparar la data que esta en la tabla actual contra otras tablas. 3. Si todo esta bien y los codigo de la data exportada hacen match con las tablas que ya existen.
-- aca es donde necesitaria la transaccion 4. Mover toda la data de la tabla temporal a una tabla xx ( la cual se va a ir acumulando la informacion sin errores) 5. Mover el archivo 6. Eliminar el archivo
Te digo que en el punto 4 necesitaria esto ya que por si en algun momento se va la luz o ocurre mas de algo a la hora de estar llevando ese proceso ... porque la data estaria ingresada en la tabal xxx pero el archivo no se movio, o mas de algo pasa ..
Lo que quiero es como que un tipo de transaccion pero a nivel de basic ?? no se si se podra hacer eso ? Gracias...
Título: Re: Transacciones
Publicado por: F_Tanori en Jueves 14 de Diciembre de 2006, 08:51
Pues no se si te sirva llevar una 'bandera'
Código: Text
Sub Procedimiento1 ()
On error got xError:
Dim bExito as Boolean
bExito=True
Importar
Comparar
Continuar:
MoverData
if bExito then
Moverarchivo
Eliminararchivo
else
Msgbox ("Ocurrio un error "& vbCrLf& Err.Description)
end if
xError:
bExito=False
Goto Continuar
End Sub
Es lo que pasa cuando se ejecuta el scandisk al iniciar la maquina es una bandera en el registro (no recuerdo el nombre :P)
Pero es falsa hasta que apages correctamente el equipo se hace verdadera si se apaga derrepente pues queda en falsa
intentas hacer un rollback? intentas guardar el status del proceso para que continue la proxima vez que se ejecute?
puedes ejecutar la base de datos en modo transaccional con ADO para asegurarte que todo el movimiento de datos salga correcto y hacer un commit al final
Saludos
Título: Re: Transacciones
Publicado por: ElNapster en Jueves 14 de Diciembre de 2006, 16:35
Ok gracias, estaba investigando un poco sobre este tema pero al parecer en basic no se le conoce como Transeferencias sino como Integridad ??? investigare mas al respecto haber que tal me va ....
:comp:
Título: Re: Transacciones
Publicado por: lencho en Jueves 14 de Diciembre de 2006, 17:26
en realidad eso se llama TRANSACCIONES como lo mencionaste en un principio. El uso de Transacciones en SQL Server se utilizan a traves de los comandos: Begin Transaction, RollBack Transaction, Commint Transaction El uso de Transacciones en ADO.NETes utilizando los metodos BeginTransaction del objeto Connection
No se acerca del uso de las transacciones en Visual Basic.
BYTE.
Título: Re: Transacciones
Publicado por: ElNapster en Jueves 14 de Diciembre de 2006, 17:50
A claro con SQL estamos todo bien B) , pero lo que quiero es con VB 6.0 , pero estoy investigando..... :comp:
Título: Re: Transacciones
Publicado por: josemns en Martes 19 de Diciembre de 2006, 02:05
Mira Puedes usar el metodo que yo uso con ADO bajo VB6 Primero tienes que importar las referencias ActiveX Data Object 2.6 o alguna otra yo uso esa
despues haces la conexion y lo pones en General o si la vas a usarla en todo el programa te sugiero en un modulo asi
Dim cn as new ADO.connection cn.open "DSN=BASE" --> Yo uso siempre una conexion X medio del ODBC de Windows
Luego ubicas el bloque de codigo que va a contener un SQL ya sea Insert, Update o delete como por ejemplo:
Private sub Ingresar()
On error goto Linea_Error
Dim sql cn.BeginTransac --> no c si esta bien escrito, pero VB deberia mostrarte la lista procedimentos y metodos que dispone el objeto
sql = "Insert into TABLA values ("01","CArlos")" cn.Execute(SQL) sql = "Insert into TABLA values ("02","Pedro")" cn.Execute(SQL)
msgbox "Ingreso Completado" cn.CommitTransac --> Esto hace si todo salio bien
Exit sub
Linea_Error: msgbox "Error en el Ingreso" cn.RollBackTransac --> Si algo salio mal en la base no se inserta nada asi alla pasado por el primer Insert
end sub
Recuerda siempre lo siguiente: 1) Una transaccion debe cumplir con las propiedades ACID (Atomicidad, consistencia, Aislamiento y durabilidad) 2) Siempre que inicies una transaccion (BeginTransac) siempre debe terminar con (CommitTransac) o un (RollBackTransac) no mas no menos, siempre se ponen los tres 3) No puedes Iniciar una Transaccion en un procedimiento y terminarla en otro procedimiento o funcion debe ser en el mismo bloque de codigo si deseas abacar mas codigo inicias otra transaccion
Espero te sirvan esto consejos Ojo: El codigo me lo invente en el momento Cahuuuuuuu