Ver Mensaje Individual
  #16  
Antiguo 27-04-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Reputación: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por supuesto, hay que usar transacciones siempre.
Siempre que exista peligra de provocar incoherencias con los datos.
No se trata solamente de la concurrencia multiusuario, no es eso, se trata de mantener siempre la coherencia de los datos, me explico con la tienda de muebles que hay junto a la casa de Delphius:
Delphius está cansado de la silla que usa para trabajar con su ordenador, está ya muy vieja, el asiento es durísimo y no puede aguantar más de 10 minutos seguidos sin tener que ponerse de pié a descansar sus posaderas, así que un día se dice: "¡se acabó!", le da una patada y la rompe, abre su hucha y saca todos sus ahorros, cree que le alcanza para una nueva. Agarra la silla rota, sale a la calle, la deja junto al contenedor de la basura y se mete en la tienda de muebles.
No tiene que esperar cola porque no hay nadie más a quien atender, ve una silla que le encanta, la prueba, es supercómoda además de bonita y no muy cara, le alcanza con sus ahorros, así que decide llevársela.
El dependiente de la tienda anota la venta en su obsoleto ordenador mientras le explica a Delphius que ha tenido suerte, que es la única silla que le quedaba de ese modelo y que ya no traerá más porque no se fabrica.

Nueva factura >> artículo: "Silla especial para programadores" >> cantidad: 1 >> precio: 30$ >> "aceptar"...
El viejo ordenador, un IBM PC con un intel 8088 a 4 Mhz, 640 Kb de ram, (nunca nadie necesitará más) comienza a ronronear su disco de 20 Megas. En la pantalla fósforo verde se puede leer:
Cita:
>Creando factura... creada.
>Anotando importe en caja... anotado.
>Actualizando inventario... ¡¡¡ Pluuufff !!!, se ha ido la luz.
El "¡¡¡ Pluuufff !!!, se ha ido la luz." no lo ponía en la pantalla, es lo que sucedió. Vaya contrariedad.

Mientras espera que vuelva la luz, Delphius le explica al dependiente que si tuviera un SAI (UPS) hubiera podido acabar de hacer la factura y luego haber apagado el ordenador sin peligro.
Ante la tardanza, Delphius, mientras tanto, se entretiene mirando una mesa con soporte retráctil para el teclado, el precio le asusta, tendrá que ahorrar bastante tiempo, de momento deberá conformarse con la silla únicamente.
Por fin, ya vuelve la luz, el dependiente enciende el ordenador y hace una verificación de los datos que presenta en pantalla:

Cita:

Ventas del día
-----------------------------------
Factura nº : 234
Referencia : SILLA001
Descripción: Silla para programador
Cantidad...: 1
Precio.....: 30$


Arqueo de caja
---------------
Caja nº ..: 1
Factura nº: 234
Importe ..: 30$
Total caja: 30$


Inventario artículos
------------------------------------
Referencia..: SILLA001
Descripción : Silla para programador
Stock actual: 1
Aquí vemos que hay una inconsistencia en la base de datos, (además de que indica que debe existir 30$ que no ha cobrado todavía) dice que ha vendido la silla que quedaba y, sin embargo, también dice que hay una silla en el stock.
Delphius le explica al dependiente que eso le ha ocurrido porque el programa de ventas que está usando, de la empresa moco$oft es bastante malo y no usa transacciones, el dependiente lo escucha pero no lo oye, está pensado en cómo arreglar el problema antes de que llegue el dueño de la tienda y le eche la culpa a él de no saber usar el ordenador y de haberse apropiado de 30$ que realmente no ha cobrado todavía.
Delphius, que además de ser una buena persona es un afamado programador se ofrece a ayudar al pobre tipo y usando técnicas de hacker, un programa descompilador, un depurador de ensamblador y un conjuro que le enseñó un chamán amigo de su tía Hermenegilda... finalmente consigue añadirle transacciones al programa (es que este Delphius es tremendo) y lo deja así:
Cita:

var
__iNumFactura:integer;
begin
__try
____StartTransaction;
____iNumFactura := HacerFacturaNueva(now); // crea la factura
____CobrarFactura( iNumFactura ); // hace el apunte en caja
____DescontarInventario( iNumFactura ); // descuenta el artículo del inventario de artículos
____Post;
____Commit;
__except
____Rollback;
__end;
end;
El dueño de la tienda, en agradecimiento, contrató a Delphius para hacer una nueva gestión comercial para su cadena de tiendas por todo el país, tendría que conectar en tiempo real decenas de tiendas, él sería el jefe del departamento de informática, tendría a su cargo una gran cantidad de programadores y... bueno, eso es otra historia.


Moraleja: usa transacciones si no quieres quedarte sin silla

Última edición por Casimiro Notevi fecha: 27-04-2008 a las 21:42:49. Razón: Falta ortográfica
Responder Con Cita