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)
-   -   Ayuda en anidación de transacciones (https://www.clubdelphi.com/foros/showthread.php?t=51923)

crcmartell 04-01-2008 01:27:53

Ayuda en anidación de transacciones
 
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.
Código Delphi [-]
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.

;)


La franja horaria es GMT +2. Ahora son las 09:04:39.

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