Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-09-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Controlar Commit y Rollback

Hola compañeros del club:

Estoy realizando mantenciones a un sistema hecho en Delphi 4 y SQL Server 2000, y necesito cambiar algo de caracter importantísimo.

En primer lugar las transacciones están aisladas, ¿que quiero decir con esto?, pues que cada procedimiento almacenado de la base de datos contiene commit y rollback, siendo esto último no un problema para los mantenedores simples, por ejemplos productos, clientes, bodegas, etc...
Mi problema radica es que los modulos de ventas por ejemplo el de factura, al momento de grabar llama a varios SP (Ingresa Factura, Detalle Factura, Cta Corriente del cliente, Actualiza Stock, Etc....) lo cual al momento de producirse un fallo en el segundo u tercero.... SP me deja incosistencias en la BD ya que se produce un commit en cada procedimiento.
Sin lugar a dudas en estos casos lo mejor es controlarlo desde el programa todo lo referente a los commit y rollback, pero aquí yace mi gran duda...
Creo que con el código se entenderá un poco mejor:

Código Delphi [-]
     if combo_vendedor.text ='' then
     begin
        MessageDlg('Ingrese el Código Vendedor', mtWarning, [mbOk],0);
        combo_vendedor.Setfocus;
        exit;
     end;

     if (edt_totalguia.Text ='') then
     begin
        MessageDlg('Debe Calcular el Valor Total de la Factura',mtWarning,[mbOk],0);
        btn_Calculo.SetFocus;
        exit;
     end;

     if Ingresar then
     begin
        Msg :='¿Desea Grabar el Ingreso de la Guía?';
        if MessageDlg(Msg, mtConfirmation,[mbyes, mbNo],0) = mrYes then
        begin
           if (opcion_pago.ItemIndex in [0]) then
           begin
              Msg :='Favor, confirmar la opción de Pago con el CLIENTE'+ #13 + '< CONTADO >'+ #13 +'Si está correcto oprima [Ok], de lo contrario presione [Cancel]';
              if MessageDlg(Msg, mtConfirmation,[mbOK, mbCancel],0) = mrCancel then
              Exit;
           end
           else
           begin
              Msg :='Favor, confirmar la opción de Pago con el CLIENTE '+ #13 + '< CRÉDITO >'+ #13 +'Si está correcto oprima [Ok], de lo contrario presione [Cancel]';
              if MessageDlg(Msg, mtConfirmation,[mbOK, mbCancel],0) = mrCancel then
              Exit;
           end;
           IngresarGuia;
           IngresarCorrelativo;
           lv_i := 1;
           while (lv_i <= grd_Detalle.RowCount -1) do
           begin
              IngresarDetalleGuia;
              ActualizarStockProducto;
              lv_i :=lv_i+1;
           end;
           MessageDlg('Guía de Despacho Ingresada Exitosamente.'+#13+'Ahora Deberá Imprimir.',mtInformation,[mbOk],0);
           btn_buscarguia.Enabled := False;
           btn_Nuevo.Enabled := False;
           btn_Imprimir.Enabled := True;
           btn_Grabar.Enabled := False;
           btn_calculo.Enabled := False;
           btn_Salir.Enabled := False;
           PrecioNormal := 0;
           PrecioOferta := 0;

        end;
     end;
end;

Supongamos IngresarGuia, IngresarCorrelativo son procedimientos delphi que a la vez llaman a procedimientos de SQL Server que contiene commit, mi idea es quitar los commit y en caso de error capturar el código error devuelto por la BD y este asignarlo a una variable pública del formulario para controlar el error, pero no se me ocurre muy bien como implementarlo, según ustedes ¿qué opción me recomendarían ?

Esperando que toda esta parafernalía se entienda

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
StartTransaction - Commit y Rollback Patricio Conexión con bases de datos 0 07-12-2005 13:56:27
RollBack con más de una transacción kikodelphi MS SQL Server 2 12-10-2005 20:24:25
Ejecutar un rollback micayael PHP 4 22-09-2005 15:36:54
utilizar rollback, commit en bases sql,postgres,access detybel SQL 2 23-06-2005 17:14:11
Uso adecuado de Rollback rochi Firebird e Interbase 4 20-11-2004 20:10:55


La franja horaria es GMT +2. Ahora son las 13:24:38.


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
Copyright 1996-2007 Club Delphi