Ver Mensaje Individual
  #1  
Antiguo 04-01-2008
crcmartell crcmartell is offline
Registrado
 
Registrado: dic 2007
Posts: 1
Reputación: 0
crcmartell Va por buen camino
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);

Última edición por jachguate fecha: 04-01-2008 a las 08:00:33. Razón: añadir etiqueta delphi
Responder Con Cita