PDA

Ver la Versión Completa : Ayuda en anidación de transacciones


crcmartell
04-01-2008, 01:27:53
Les mando el procedimiento donde tengo las transacciones, aqui una tabla depende de la otra, ya que es su llave foranea, lo que pasa que al ejecutar ese procedimiento tarda un poco, es por eso que mando el código para que me ayuden a mejorar el rendimiento.

Saludos.

procedure TFrmCreditos.Grabar_credito;
begin
LimpiarConsulta;
Tabla.Add('creditos');
If Modifica Then
Begin
Try
With Valores Do
Begin
Add('folio = ' + QuotedStr(Trim(seFolio.Text))+ ',');
Add('sedesol = ' + QuotedStr(Trim(seSedesol.Text)) + ',');
Add('no_mens = ' + QuotedStr(Trim(sePagos.Text)) + ',');
Add('monto_mens = ' + QuotedStr(Trim(seMonto.Text)) + ',');
Add('login = ' + QuotedStr(Trim(Login)) + ',');
Add('beneficiario = ' + QuotedStr(Trim(seSoli.Text)) + ',');
Add('banco = ' + IntToStr(scCuentas.KeyValue));
End;
Condicion.Add('credito = ' + QuotedStr(Trim(seCredito.Text)));
If Not Modificar(Tabla, Valores, Condicion) Then
SkMesg.MessageDlg('El registro no pudo ser guarado en la BD', mtWarning, [mbOK], 0);
Modifica := False;
Except
SkMesg.MessageDlg('No se pudo modificar el credito', mtWarning, [mbOK], 0);
End
End
Else
Begin
Try
LimpiarConsulta;
Tabla.Add('creditos');
Campos.Add('GEN_ID(creditos_gen, 0)');
If Not Consultar(Tabla, Campos, Condicion, Grupo, Orden, False, DM.qBuscar) Then
Begin
SkMesg.MessageDlg(DM.qBuscar.FieldByName('GEN_ID').AsString, mtWarning, [mbOK], 0);
Exit;
End;
LimpiarConsulta;
Tabla.Add('creditos');
With Campos Do
Begin
Add('folio, sedesol, programa, pie, no_mens, monto_mens, fec_posesion,');
Add('login, beneficiario, cap_cre, banco, activo');
End;
With Valores Do
Begin
Add(QuotedStr(Trim(seFolio.Text)) + ',');
Add(QuotedStr(Trim(seSedesol.Text)) + ',');
Add(IntToStr(scPrograma.KeyValue) + ',');
Add(IntToStr(0) + ',');
Add(QuotedStr(Trim(sePagos.Text)) + ',');
Add(QuotedStr(Trim(seMonto.Text)) + ',');
Add(QuotedStr(FormatDateTime('mm/dd/yyyy', sdPosesion.Date)) + ',');
Add(QuotedStr(Trim(Login)) + ',');
Add(QuotedStr(Trim(seSoli.Text)) + ',');
Add(QuotedStr(FormatDateTime('mm/dd/yyyy hh:mm:ss', Now)) + ',');
Add(IntToStr(scCuentas.KeyValue) + ',');
Add(QuotedStr('O'));
End;
If Not Insertar(Tabla, Campos, Valores) Then
SkMesg.MessageDlg('El registro no pudo ser guardado en la BD', mtWarning, [mbOk], 0);
Try
LimpiarConsulta;
Tabla.Add('mejoramiento');
Campos.Add('paquete, credito, tipo_paquete');
With Valores Do
Begin
Add(IntToStr(scPaquete.KeyValue) + ',');
Add(QuotedStr(IntToStr(DM.qBuscar.FieldByName('GEN_ID').AsInteger + 1)) + ',');
If srAmplia.Checked Then
Add(QuotedStr(Trim('A')))
Else
Add(QuotedStr(Trim('P')));
End;
If Not Insertar(Tabla, Campos, Valores) Then
SkMesg.MessageDlg('El registro no pudo ser guardado en la BD', mtWarning, [mbOk], 0);
seCurp.SetFocus;
Except
SkMesg.MessageDlg('No se pudo guardar el credito', mtWarning, [mbOK], 0)
End
Except
SkMesg.MessageDlg('No se pudo guardar el pie de casa', mtWarning, [mbOK], 0)
End
End;
DM.qCreditos.Close;
DM.qCreditos.Transaction.Active := False;
Limpiar(False);

jachguate
04-01-2008, 08:05:11
Hola.

En primer lugar, bienvenid@ al clubdelphi. Te recomiendo la lectura de la guía de estilo, donde están plasmadas las reglas que rigen estos foros, y que son de carácter obligatorio.

He editado tu mensaje para añadir la etiqueta [delphi], razón por la que ahora ves que se respeta la indentación y se resalta la sintaxis. Te recomiendo pulsar al botón de editar en tu mensaje para ver la manera en que se usa.

Luego comento que me parece que tu pregunta es un poco vaga. Es poco probable que alguien se tome la molestia de entender lo que hace tu código, con la poca información que das. Sobre todo después de que la pregunta, según se entiende, nada tiene que ver con el título del hilo.

En el futuro te recomiendo hacer preguntas mas específicas.

Finalmente te comento que la ejecución de la aplicación paso a paso puede ayudarte a ver donde se está tardando tu proceso, que supongo que el tema de la "optimización" viene por que pretendés reducir el tiempo que tarda.

Hasta luego.

;)