Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problemas en una operacion de insercion una db (https://www.clubdelphi.com/foros/showthread.php?t=38188)

alfil123 06-12-2006 02:32:25

problemas en una operacion de insercion una db
 
hola amigos les escribo porque al insertar un nuevo registro se produce el siguiente errorProject Creditos.exe raised exception class EOleException with message "No se pudo iniciar la transaccion;ya hay demasiadas transacciones anidadas'. process stopped. Use Step or Run to continue.amigos porfavor ayuda

Paoti 06-12-2006 02:38:59

MMMH,

no nos dice (bueno a mi) mucho la explicacion de tu problema:


lo que deduzco es que posiblemente sea SQL Server por el mensaje en español,




trata de decirnos como lo haces, es un un simple insert, o el insert esta en un procedimiento almacenado en la base de datos,

quizas hagas un WHILE y dentro del cupero del While, abras la trasaccion y otra vez la abras y otra vez.... no sè, no sè



cuentanos más por fvor

alfil123 06-12-2006 03:07:40

grasias por responder tan rapido, bueno la base de datos que estoy usando es access, el proceso que uso para insertar es.//*** INSERTAR UNA VENTAfunction Insertar(cn:TADOConnection; var Error:String;NroCredito:string; IDCliente:string;Cuenta:string; Monto:string; TipoDoc:String;SerieDoc:string;NroDoc:String;Fecha:string; Cancelado:string;Contabilidad:string; Almacen:string;Fiscal:string;Responsable:string;Grid:TStringGrid):Boolean;var Retorno:boolean; cm : TADOCommand; i:integer;Begin Try Retorno:=True; cn.BeginTrans; /// cm := TADOCommand.Create(nil); cm.Connection := cn; // INSERTAR CABECERA DEL CREDITO cm.CommandText := ' INSERT INTO TCREDITO VALUES ('+ (NroCredito)+','+ QuotedStr(IDCliente)+','+ QuotedStr(Cuenta)+','+ Monto+','+ QuotedStr(TipoDoc)+','+ QuotedStr(SerieDoc)+','+ QuotedStr(NroDoc)+','+ QuotedStr(Fecha)+','+ QuotedStr(Cancelado)+','+ QuotedStr(Contabilidad)+','+ QuotedStr(Almacen)+','+ QuotedStr(Fiscal)+','+ QuotedStr(Responsable)+')'; cm.Execute;""ESTA ES LA LINAR DONDE SEPRODUCE EL ERRORR"" // INSERTAR DETALLE DEL CREDITO for i := 1 To Grid.RowCount-2 do begin cm.Connection := cn; cm.CommandText := ' INSERT INTO TDETALLECREDITO VALUES ('+ (NroCredito)+','+ QuotedStr(grid.cells[1,i])+','+ (grid.cells[0,i])+','+ QuotedStr(grid.cells[2,i])+','+ (grid.cells[3,i])+','+ (grid.cells[4,i])+','+ (grid.cells[5,i])+')'; cm.Execute; end; cn.CommitTrans; except on E : Exception do begin Error:=E.Message; cn.RollbackTrans; Retorno:=False; end; end; Insertar:=Retorno;End;amigos una cosa mas la base de datos se a reducido de tamaño, no se porque, pero no es perdido registros, bueno antes era de 80 mb pero ahora es de 5

vtdeleon 06-12-2006 04:15:54

Tenemos un sancocho aquí :eek:

alfil123, trata de arreglar tu código porque no se entiende nada de nada. Siempre que envies un mensaje revisalo! Asi no sucederá esto

alfil123 06-12-2006 04:59:52

amigos perdon por el desastre,
grasias por responder tan rapido, bueno la base de datos que estoy usando es access, el proceso que uso para insertar es.
Código Delphi [-]
//***
Código Delphi [-]
 INSERTAR UNA VENTA
function Insertar(cn:TADOConnection; var Error:String;NroCredito:string; IDCliente:string;Cuenta:string; Monto:string; TipoDoc:String;SerieDoc:string;NroDoc:String;Fecha:string; Cancelado:string;Contabilidad:string; Almacen:string;Fiscal:string;Responsable:string;Grid:TStringGrid):Boolean;
var Retorno:boolean; cm : TADOCommand; i:integer;
Begin
 Try Retorno:=True; cn.BeginTrans; /// 
cm := TADOCommand.Create(nil); 
cm.Connection := cn; // 
INSERTAR CABECERA DEL CREDITO cm.CommandText := ' INSERT INTO TCREDITO VALUES ('+ (NroCredito)+
','+ QuotedStr(IDCliente)+
','+ QuotedStr(Cuenta)+
','+ Monto+
','+ QuotedStr(TipoDoc)+
','+ QuotedStr(SerieDoc)+
','+ QuotedStr(NroDoc)+
','+ QuotedStr(Fecha)+
','+ QuotedStr(Cancelado)+
','+ QuotedStr(Contabilidad)+
','+ QuotedStr(Almacen)+
','+ QuotedStr(Fiscal)+
','+ QuotedStr(Responsable)+')';
cm.Execute;""ESTA ES LA LINAR DONDE SEPRODUCE EL ERRORR""
 // INSERTAR DETALLE DEL CREDITO
 for i := 1 To Grid.RowCount-2 do
 begin
 cm.Connection := cn;
 cm.CommandText := ' INSERT INTO TDETALLECREDITO VALUES ('+ (NroCredito)+
','+ QuotedStr(grid.cells[1,i])+
','+ (grid.cells[0,i])+
','+ QuotedStr(grid.cells[2,i])+
','+ (grid.cells[3,i])+
','+ (grid.cells[4,i])+
','+ (grid.cells[5,i])+')'; 
cm.Execute; 
end; 
cn.CommitTrans;
 except on E : Exception do begin Error:=E.Message;
 cn.RollbackTrans;
 Retorno:=False;
 end;
 end; 
Insertar:=Retorno;
End;

amigos una cosa mas la base de datos se a reducido de tamaño, no se porque, pero no es perdido registros, bueno antes era de 80 mb pero ahora es de 5

alfil123 06-12-2006 15:40:57

amigos en la linea cm.Execute;, se dispara este error con un dll "Access violation at addres 1B015CB5 in module 'msjet40.dll'" 015064D2 'msado15.dll'var Retorno:boolean; cm : TADOCommand; i:integer;Begin Try Retorno:=True; cn.BeginTrans; /// cm := TADOCommand.Create(nil); cm.Connection := cn; // INSERTAR CABECERA DEL CREDITO cm.CommandText := ' INSERT INTO TCREDITO VALUES ('+ (NroCredito)+','+ QuotedStr(IDCliente)+','+ QuotedStr(Cuenta)+','+ Monto+','+ QuotedStr(TipoDoc)+','+ QuotedStr(SerieDoc)+','+ QuotedStr(NroDoc)+','+ QuotedStr(Fecha)+','+ QuotedStr(Cancelado)+','+ QuotedStr(Contabilidad)+','+ QuotedStr(Almacen)+','+ QuotedStr(Fiscal)+','+ QuotedStr(Responsable)+')'; cm.Execute;

Paoti 06-12-2006 19:31:22

alfil, no puedes concatenar una cadena de texto y una variable numerica, lo que haces con nroCredito, y monto es esto:


nroCredito := 123456
'values (' + nroCredito + ',' + ect ect

no es posible esto, debes de conertir a cadena de texto la variable para pdoer concatenarla, ojo no debes agregarle comillas.

'values (' + inttoStr(nroCredito) + ',' ect ect

o

'values (' + floattoStr(nroCredito) + ',' ect ect


ojala sea eso.


trata antes de ejecutar tu consulta, ponerla en una etiqueta o en algo donde peudas visualizarla:

ejemplo:


Código Delphi [-]
cadenaSQL := 'Insert into myTablas values(........';

etiqueta1.caption := cadenaSQL;

// y ya despues ponerla en 
cm.commandtext := cadenaSQL;


La franja horaria es GMT +2. Ahora son las 23:17:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi