MySQL Forums
Forum List  »  Spanish

Re: Transacciones MySQL desde VB .net
Posted by: Miguel Martinez
Date: June 10, 2008 10:22AM

He revisado mi código, y la verdad no he detectado donde se produzca un anidamiento de transacciones. Hay alguna forma desde VB para que antes de cada BeginTransaction(), termine una posible transaccion no terminada?

Dejo el codigo que uso en VB:

Imports MySql.Data.MySqlClient
...
Public CommImporta As New MySqlCommand
Public TraImporta As MySqlTransaction
...

TraImporta = Conexion.cn.BeginTransaction()
CommImporta.Connection = Conexion.cn
CommImporta.Transaction = TraImporta
Try
...
TraImporta.Commit()
...
Catch ex As Exception
TraImporta.Rollback()
End Try


En los SP tengo algo como esto:

CREATE DEFINER=`root`@`localhost` PROCEDURE `ProcInsEmp`(nombre char(90), replegal char(60), direccion char(60), cpostal char(15), ciudad char(30), estado char(60), pais char(45), rfc char(15), clipro char(1), id char(6), INOUT mensaje int(1))
BEGIN
/*SET AUTOCOMMIT=0;*/ ********** Esta linea sale sobrando, con START TRANSACTION es suficiente
set @terror=0, @terrors=0;
set @strTable='OK';
START TRANSACTION WITH consistent snapshot;
insert into `cont-empresa` (nombre, replegal, direccion, cpostal, ciudad, estado, pais, rfc, clipro) values (nombre, replegal, direccion, cpostal, ciudad, estado, pais, rfc, clipro);
show count(*) errors;
select @@error_count into @terror;
if @terror > 0 then
rollback;
set mensaje=1;
else
set @strQuery=CONCAT('CREATE TABLE `e', id ,'-cuenta` (`cuenta` char(9) NOT NULL COMMENT \'Numero de la cuenta\', `nombre` varchar(120) NOT NULL COMMENT
\'Nombre de la cuenta\', `tipo` char(1) NOT NULL COMMENT \'Tipo de cuenta. A-L\', `mayor` int(1) unsigned NOT NULL COMMENT \'Si,No,Titulo,subtitulo 1-4\',
`nivel` int(1) unsigned NOT NULL COMMENT \'Grupo,subgrupo,cuenta,subcuenta,centro.1-5\',`fechalta` date NOT NULL COMMENT \'Fecha de alta de la cuenta\',
`clase` char(1) NOT NULL COMMENT \'Clase de la cuenta, MN o ME. A-B\', PRIMARY KEY(`cuenta`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=\'',rfc,'\'');
prepare stnCuenta from @strQuery;
execute stnCuenta;
deallocate prepare stnCuenta;
show count(*) errors;
select @@error_count into @terror;
set @terrors=@terrors+@terror;
set @strQuery=concat('CREATE TABLE `e',id,'-ctasoc` (
`ctasup` char(9) NOT NULL COMMENT \'Cuenta padre\',
`subcta` char(9) NOT NULL COMMENT \'Cuenta hijo\',
KEY `subctaFK` (`subcta`),
KEY `ctasupFK` (`ctasup`),
CONSTRAINT `e',id,'ctasupFK` FOREIGN KEY (`ctasup`) REFERENCES `e',id,'-cuenta` (`cuenta`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `e',id,'subctaFK` FOREIGN KEY (`subcta`) REFERENCES `e',id,'-cuenta` (`cuenta`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=\'',rfc,'\'');
prepare stnCuenta from @strQuery;
execute stnCuenta;
deallocate prepare stnCuenta;
show count(*) errors;
select @@error_count into @terror;
set @terrors=@terrors+@terror;
set @strQuery=CONCAT('CREATE TABLE `e',id,'-poliza` (
`poliza` int(8) unsigned NOT NULL auto_increment COMMENT \'Numero de la poliza\',
`tipopol` char(1) character set latin1 collate latin1_general_ci NOT NULL COMMENT \'Tipo de poliza\',
`periodo` int(2) unsigned NOT NULL COMMENT \'Numero del periodo, meses\',
`concepto` varchar(100) character set latin1 collate latin1_general_ci NOT NULL COMMENT \'Concepto de la poliza\',
`fecha` char(10) character set latin1 collate latin1_general_ci NOT NULL COMMENT \'Fecha de captura de la poliza\',
`ejercicio` int(4) unsigned NOT NULL COMMENT \'Year del ejercicio contable\',
`tcambio` float unsigned default NULL COMMENT \'Tipo de cambio en pesos\',
`tmoneda` char(1) character set latin1 collate latin1_general_ci NOT NULL COMMENT \'Especifica en que moneda se captura la poliza\',
`impresa` int(1) unsigned default NULL COMMENT \'Si la poliza ya se imprimio\',
PRIMARY KEY USING BTREE (`poliza`,`tipopol`,`ejercicio`, `periodo`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1 COMMENT=\'',rfc,'\'');
prepare stnCuenta from @strQuery;
execute stnCuenta;
deallocate prepare stnCuenta;
show count(*) errors;
select @@error_count into @terror;
set @terrors=@terrors+@terror;
set @strQuery=CONCAT('CREATE TABLE `e',id,'-movpol` (
`poliza` int(8) unsigned NOT NULL default \'0\' COMMENT \'Numero de la poliza\',
`movpol` int(4) unsigned NOT NULL default \'0\' COMMENT \'Movimiento en la poliza, empieza en 0\',
`cuenta` char(9) character set latin1 NOT NULL COMMENT \'Numero de cuenta a la cual afecta el movimiento\',
`tipomov` char(1) collate latin1_general_ci NOT NULL COMMENT \'Tipo de movimiento, si es cargo o abono\',
`referencia` char(10) collate latin1_general_ci default NULL COMMENT \'Referencia del movimiento\',
`importe` decimal(15,2) NOT NULL COMMENT \'Importe del movimiento\',
`tipopol` char(1) collate latin1_general_ci NOT NULL COMMENT \'Tipo de poliza, ingresos, egresos, diario, etc.\',
`concepto_mov` char(40) collate latin1_general_ci default NULL COMMENT \'Concepto del movimiento en la poliza\',
`factura` char(15) collate latin1_general_ci default NULL COMMENT \'Numero de factura de referencia\',
`remision` char(15) collate latin1_general_ci default NULL COMMENT \'Numero de remision de referencia\',
`periodo` int(2) unsigned NOT NULL COMMENT \'Numero del periodo, meses\',
`ejercicio` int(4) unsigned NOT NULL COMMENT \'Numero del ejercicio. Year\',
PRIMARY KEY USING BTREE (`movpol`,`poliza`,`tipopol`,`ejercicio`, `periodo`),
KEY `cuentaFK` (`cuenta`),
KEY `polizasFK` (`poliza`,`tipopol`,`ejercicio`, `periodo`),
CONSTRAINT `e',id,'cuentaFK` FOREIGN KEY (`cuenta`) REFERENCES `e',id,'-cuenta` (`cuenta`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `e',id,'polizasFK` FOREIGN KEY (`poliza`, `tipopol`, `ejercicio`, `periodo`) REFERENCES `e',id,'-poliza` (`poliza`, `tipopol`, `ejercicio`, `periodo`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT=\'',rfc,'\'');
prepare stnCuenta from @strQuery;
execute stnCuenta;
deallocate prepare stnCuenta;
show count(*) errors;
select @@error_count into @terror;
set @terrors=@terrors+@terror;
set @strQuery=CONCAT('CREATE TABLE `e',id,'-saldo` (
`cuenta` char(9) character set latin1 NOT NULL COMMENT \'Numero de cuenta\',
`ejercicio` int(4) unsigned NOT NULL COMMENT \'Numero del ejercicio. Year\',
`tipo` char(1) collate latin1_general_ci NOT NULL COMMENT \'1:Saldo;2:Cargo;3:Abono\',
`saldoini` decimal(15,2) COMMENT \'Importe solo si es saldo\',
`i_ene` decimal(15,2) COMMENT \'Importe enero\',
`i_feb` decimal(15,2) COMMENT \'Importe febrero\',
`i_mar` decimal(15,2) COMMENT \'Importe marzo\',
`i_abr` decimal(15,2) COMMENT \'Importe abril\',
`i_may` decimal(15,2) COMMENT \'Importe mayo\',
`i_jun` decimal(15,2) COMMENT \'Importe junio\',
`i_jul` decimal(15,2) COMMENT \'Importe julio\',
`i_ago` decimal(15,2) COMMENT \'Importe agosto\',
`i_sep` decimal(15,2) COMMENT \'Importe septiembre\',
`i_oct` decimal(15,2) COMMENT \'Importe octubre\',
`i_nov` decimal(15,2) COMMENT \'Importe noviembre\',
`i_dic` decimal(15,2) COMMENT \'Importe diciembre\',
PRIMARY KEY USING BTREE (`cuenta`,`ejercicio`,`tipo`),
KEY `ctasaldoFK` (`cuenta`),
CONSTRAINT `e',id,'ctasaldoFK` FOREIGN KEY (`cuenta`) REFERENCES `e',id,'-cuenta` (`cuenta`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci COMMENT=\'',rfc,'\'');
prepare stnCuenta from @strQuery;
execute stnCuenta;
deallocate prepare stnCuenta;
show count(*) errors;
select @@error_count into @terror;
set @terrors=@terrors+@terror;

if @terrors > 0 then
rollback;
set mensaje=2;
else
commit;
set mensaje=0;
end if;
end if;
END



Gracias



Edited 1 time(s). Last edit at 06/10/2008 04:14PM by Miguel Martinez.

Options: ReplyQuote


Subject
Views
Written By
Posted
Re: Transacciones MySQL desde VB .net
6633
June 10, 2008 10:22AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.