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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-02-2006
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Entender lo que pasa con mis datos

Hola a todos

Estoy trabajando con deplhi 6,firebird 1.5.3 , componentes Fib , estoy trabajando en cache pero hoy he tenido un problema inmenso los datos se me han grabado en 2 tablas y no en las otras se supone que la transaccion debe grabar todo o no grabar nada que pudo haber pasado


De antemano

Gracias

Si alguien esta interesado en revisar el codigo puedo enviarselo estoy dispuesto a pagar si es posible pero eso errores no pueden darse en un aplicativo de Punto de venta
__________________
IVAND
Responder Con Cita
  #2  
Antiguo 02-02-2006
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si insertas datos en una tabla... no pueden acabar insertados en otra

Y además es que das pocas pistas para poder ayudarte.
Responder Con Cita
  #3  
Antiguo 02-02-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
Cita:
Empezado por Casimiro Notevi
Si insertas datos en una tabla... no pueden acabar insertados en otra
Lo que quiere decir ivan es que no se está respetando la transacción, es decir en la transacción tenía una grabación de tres tablas, por algún motivo falló y alcanzó a grabar en dos de tres tablas, por lo tanto, fallo el rollback o quizás no lo tiene definido en la transacción, creo que esto último podría ser. y como bien dice casimiro no estás dando muchas pistas.

Hasta Luego -
__________________
No todo es como parece ser...

Última edición por lucasarts_18 fecha: 03-02-2006 a las 14:26:58.
Responder Con Cita
  #4  
Antiguo 02-02-2006
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Gracias amigos por su interes

Les comento y envio el codigo

Código Delphi [-]
procedure TFpos.BitBtn1Click(Sender: TObject);
var
  Flag, Tipo_credito: Integer;
begin
  Flag := 0; Tipo_Credito := 0;
  if Neto_pagar.Value = 0 then
  begin
    JfMessageEx(CeoScreen, 'Verifique', 'System', 1, 'No hay valores para procesar verifique documento esta en blanco ', [bkiOK], BkiOk);
    Abort;
  end;
  if cliente.RecordCount = 0 then
  begin
    JfMessageEx(CeoScreen, 'Verifique', 'System', 2, 'Digite un cliente valido por favor', [bkiOK], BkiOk);
    Abort;
  end;
  if DataModule2.Redondear(Neto_pagar.Value, 2) - DataModule2.Redondear((Efectivo.Value + monto_credito.value + cheque.Value + Tcredito.Value + descuento.Value), 2) <> 0 then
  begin
    JfMessageEx(CeoScreen, 'Verifique', 'System', 2, 'Revise .. el valor pagado supera el valor a cancelar', [bkiOK], BkiOk);
    Abort;
  end;

  if (Neto_pagar.Value > 200) and (cliente.FieldByName('Ruc_cliente').AsString = '') then
  begin
    ShowMessage('Por autorización del S.R.I toda transacción que supero los 200 dolares debe registrar un RUC ... Agradecemos su comprensión');
    Abort;
  end;
// Localizamos los pagos y lo actualizamos
  if DataModule2.Pt_commitR.Active then
  else
    DataModule2.Pt_commitR.Active := True;
  try
    begin
      if monto_credito.Value > 0 then
      begin
        credito.Insert;
        credito.FieldByName('key_cliente').AsInteger := cliente.fieldbyname('key_cliente').AsInteger;
        credito.FieldByName('Emision').AsDateTime := DataModule2.FechaHOY.Value;
        credito.FieldByName('vence').AsDateTime := DataModule2.FechaHOY.Value + cliente.fieldbyname('plazo_credito').Value;
        credito.FieldByName('monto').AsCurrency := monto_credito.Value;
        credito.FieldByName('abono').AsCurrency := 0;
        credito.FieldByName('tp_cxc').AsString := 'F';
        credito.FieldByName('letra').AsInteger := 1;
        credito.FieldByName('key_relacion').AsInteger := cabeza.fieldByname('Key_cab_fac').AsInteger;
        credito.Post;
      end;
  // Barremos e insertamos en formpago
      Pagar.First;
      while not Pagar.EOF do
      begin
        if Pagar.FieldByName('monto').Value > 0 then
        begin
          forma_pago.Insert;
          forma_pago.FieldByName('Key_cab_fac').AsInteger := cabeza.fieldByname('key_cab_fac').Value;
          forma_pago.FieldByName('cod_pago').AsInteger := Pagar.fieldbyname('key_hijo').Value;
          forma_pago.FieldByName('key_plan_ctas').AsInteger := Pagar.fieldbyname('valor1').value;
          forma_pago.FieldByName('total').AsCurrency := Pagar.fieldByname('Monto').Value;
        end;
        Pagar.Next;
      end;
      forma_pago.Edit;
      forma_pago.Post;
      cabeza.Edit;
      if Tp_cab_fac.Value = 'N/V' then
      begin
        Contador_factura.Edit;
        Contador_facturaSECU_ND.Value := Contador_facturaSECU_ND.Value + 1;
        cabeza.FieldByName('Tp_cab_fac').Value := 'N/V';
        cabeza.FieldByName('Corr_factura').Value := Contador_facturaSECU_ND.Value;
        Contador_factura.Post;
      end
      else
      begin
        Contador_factura.Edit;
        cabeza.FieldByName('Tp_cab_fac').Value := 'FAC';
        Contador_facturaSECU_FAC.Value := Contador_facturaSECU_FAC.Value + 1;
        cabeza.FieldByName('Corr_factura').Value := Contador_facturaSECU_FAC.Value;
        Contador_factura.Post;
      end;
      cabeza.FieldByName('key_cliente').AsInteger := cliente.FieldByname('Key_cliente').Value;
      cabeza.FieldByName('Estado_fac').AsString := 'T';
      cabeza.FieldByName('Iva').AsInteger := DataModule2.Empresa.fieldByname('Iva').Value;
      cabeza.FieldByName('Subtotal').AsCurrency := (SUBNOIVA.Value + SUBIVA.Value);
      cabeza.FieldByName('Monto_iva').AsCurrency := IVA.Value;
      cabeza.FieldByName('Vneto').AsCurrency := (SUBNOIVA.Value + SUBIVA.Value) + iva.Value;
      N_documento := cabeza.fieldByname('Key_cab_fac').AsInteger;
      cabeza.FieldByName('Base_I').AsCurrency := SUBNOIVA.Value;
      cabeza.FieldByName('Base_I0').AsCurrency := SUBIVA.Value;
      cabeza.Post;
      DataModule2.puedocerrarTrans([cabeza, Detalle, forma_pago, Contador_factura, Credito], 'S');
      DataModule2.Pt_commitR.Commit;

      if DataModule2.Pt_commitR.Active then
      else
        DataModule2.Pt_commitR.Active := True;
      with BBajar_inventarios do
      begin
        ParamByName('key_cab_fac').AsInteger := N_documento;
        ParamByName('key_caja').AsInteger := DataModule2.Id_cajero;
        ExecProc;
      end;
      DataModule2.Pt_commitR.Commit;

      Tp_cab_fac.Value := 'N/V';
      Cform.BeginAssign;
      nvendido.Value := 0;
      Cod_cliente.Value := '';
      SUBIVA.Value := 0;
      SUBNOIVA.Value := 0;
      if monto_credito.Value > 0 then
        Tipo_credito := 1 else Tipo_credito := 0;
      IVA.Value := 0;
      Neto_pagar.Value := 0;
      Cform.EndAssign;
      Cod_cliente.Value := '0001'; // Consumidor final ;
      Iniciar; // Iniciamos todos los datos
      Cod_producto.SetFocus;
      Tp_cab_fac.Value := 'N/V';
      Contador.DataField := 'SECU_ND';
      Flag := 1;
  //ShowMessage('Factura grabada con exito');
    end
  except
    begin
      Flag := 0;
      JfMessageEx(CeoScreen, 'Error', 'System', 3, 'Error al momento de grabar verifique datos o contacte con su administrador', [bkiOK], BkiOk);
      DataModule2.Pt_commitR.Rollback;
    end;
//End
  end;
  if Flag = 1 then
   // si es credito el primer parametro es 'S'
    if Tipo_credito = 1 then
      imprimir_puerto('N/V', 'S', 'N')
    else
      imprimir_puerto('N/V', 'N', 'N');
  Cform.BeginAssign;
  Efectivo.Value := 0;
  cheque.Value := 0;
  monto_credito.Value := 0;
  Tcredito.Value := 0;
  descuento.Value := 0;
  Recibido.Value := 0;
  CAMBIO.Value := 0;
  Cform.EndAssign;
end;


Este es el codigo como uds ven esta con commit y rollback


La funcion PuedoCerrarTRansaccion la tome de un ejemplo de Ain Marteens si se pueden dar cuenta existen 2 commit el primero envuelve a las tablas que indicaba pero ademas al detalle de la factura que fue la que no grabo y forma_pago que grabo solo una parte , cada objeto esta en cacheUpdate=True
__________________
IVAND
Responder Con Cita
  #5  
Antiguo 02-02-2006
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No he tenido timpo todavía de examinar a fondo el código, aunque a simple vista he detectado un pequeñin "error":
Código:
// Localizamos los pagos y lo actualizamos
  if DataModule2.Pt_commitR.Active then     <------ falta código o sobra?
  else
    DataModule2.Pt_commitR.Active := True;  <------ siempre se ejecuta
  try
    begin                                   <------ a quién pertenece realmente?
      if monto_credito.Value > 0 then
      begin
        credito.Insert;
        credito.FieldByName('key_cliente').AsInteger := cliente.fieldbyname('key_cliente').AsInteger;
        credito.FieldByName('Emision').AsDateTime := DataModule2.FechaHOY.Value;
        credito.FieldByName('vence').AsDateTime := DataModule2.FechaHOY.Value + cliente.fieldbyname('plazo_credito').Value;
        credito.FieldByName('monto').AsCurrency := monto_credito.Value;
        credito.FieldByName('abono').AsCurrency := 0;
        credito.FieldByName('tp_cxc').AsString := 'F';
        credito.FieldByName('letra').AsInteger := 1;
        credito.FieldByName('key_relacion').AsInteger := cabeza.fieldByname('Key_cab_fac').AsInteger;
        credito.Post;
      end;
  // Barremos e insertamos en formpago
Quizás me he precipitado sin observarlo en detalle y esté bien
Responder Con Cita
  #6  
Antiguo 03-02-2006
IVAND IVAND is offline
Miembro
 
Registrado: may 2003
Ubicación: ECUADOR
Posts: 523
Poder: 21
IVAND Va por buen camino
Veras si no coloco esa instruccion la transaccion esta desactivada por eso pregunto so esta activa caso contrario la activo y eso de aquien pertenece no lo entiendo , te agradeceria me ayudaras a entender


Gracias
__________________
IVAND
Responder Con Cita
  #7  
Antiguo 03-02-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
Hola:

Creo que deberías modularizar mas tu código, el típico divide y vencerás y la verdad creo que te ayudará mucho para no tener estos problemas, mientras mas pequeñas sean tus piezas de software mas fácil es encontrar un error, viendo tú código pienso y creo que puedes optimizarlo mas en este sentido.

¿Has intentado debugear tu aplicación para ver si realmente hace el rollback..?

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



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
Problemas al conectar una tabla ADO a una base de datos de Access que posee contraseñ Roger_Fernandez Conexión con bases de datos 5 28-02-2005 16:46:29
leer de base de datos access en ftp agustincs Tablas planas 2 23-08-2004 22:25:00
Datos incosistentes ... ACK Firebird e Interbase 1 13-08-2004 18:48:08
Datos en RAM Esau OOP 2 10-11-2003 16:58:44
¿15 MB para una sola base de datos? M@rcos Conexión con bases de datos 2 20-06-2003 15:49:26


La franja horaria es GMT +2. Ahora son las 20:27:23.


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