Visual Basic - Dudas y Transacciones con ADO

Life is soft - evento anual de software empresarial
 
Vista:

Dudas y Transacciones con ADO

Publicado por Betty (1 intervención) el 18/10/2005 13:51:23
Hola a todos,
Estoy haciendo un programa en el que estoy usando ADO. Es la primera vez que lo uso, así que estoy un poco pez. He abierto una conexión y luego lo que abro para consultar tablas es usar recordset. Por ejemplo:
tengo la conexion : adconexion
Me creo el recordset:
dim sql as string ---> vble q. me contiene la sentencia
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

sql = "SELECT * FROM TABLA1"
rs.Open strsql2, adconexion

Quiero suponer que es la forma correcta. El caso es que como tengo que leer de distintas tablas según los valores que voy leyendo en cada tabla lo que hago es ir creandome varios recordset. Es decir, supongamos que he leido con el recordset anterior, para el primer valor que leo me voy a otro procedimiento en el que me vuelvo a crear un recordset y leo de otra tabla distinta y así sucesivamente. ¿esto es la forma correcta de hacerlo o existe alguna forma más?
Si no meto transacciones todo funciona correctamente. El problema me viene cuando meto transacciones. Es que tengo que hacer unos insert por eso necesito transacciones. Para trabajar con transacciones lo que tengo que poner es: (¿decirme si es correcto o no por favor?)
adconexion.BeginTrans --- abro conexion.
adconexion.CommitTrans---grabar los datos.
adconexion.RollbackTrans--desacer los datos.
En un principio, lo que había hecho es poner sólo lo de las transacciones cuando estoy en el procedimiento de hacer los insert. Me daba un error fque es el -2147168227 (No se puede crear una transaccion, se excedió la capacidad). ¿esto puede ser debido a que abro y cierro infinitas transacciones? Pensando he llegado a la conclusión que lo mejor que puedo hacer es una única transacción mejor que me grabe o no los datos a la vez o no. Así que cuando empiezo todo el procedimiento es cuando abro la transacción. Pero cuando voy a ejecutar el 2 recordset que creo me da un error -2147467259 (No se puede crear una conexión porque está en modo de transaccio´n manual o distribuida) No lo entiendo, porque el primer recordset si lo he podido abrir y ejecutar perfectamente ¿que ocurre?

No se si me he explicado bien, cualquier ayuda me vendrá bien.
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:Dudas y Transacciones con ADO

Publicado por alonso (1 intervención) el 02/10/2010 22:42:39
El manejo de transacciones es algo complejo.

Básicamente se define en:

si ya hiciste un adconexion.BeginTrans solo te aceptara instrucciones SQL como INSERT, DELETE, UPDATE pero no instrucciones SELECT igual i te haber 2 o 3 consultas SELECT pero acto seguido te marcara "No se puede crear una conexión porque está en modo de transacción manual o distribuida"

Y esto se corrige creando uno o varios objetos, hacer todas las consultas select que necesites y guardar todos los datos en un objeto o archivo de texto de tal forma que tengas todos los datos necesarios para hacer tus INSERT, DELETE o UPDATE.

En resumen si inicias una transacción no podrás realizar consultas a tu base de datos por que aun no terminas la transacción.

Estas instrucciones solo se usan por separado.

Creo que es algo tarde para tu respuesta pero como no vi cerrada la pregunta y como nadie le contesto puesss opte por contestarla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar