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);