Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Darle un Refresh a la Tabla (https://www.clubdelphi.com/foros/showthread.php?t=44924)

ludan508 18-06-2007 18:16:01

Darle un Refresh a la Tabla
 
Que tal..!!

tengo este problema actualmente....
La Base de Datos esta hecho en MySQL... y programando en Borland Delphi 2006
el proyecto realizado se va a manejar en 7 sucursales... la cual se esta controlando por sucursal las ventas realizadas...

ahora bien.. en cada sucursal se cuentan con 3 o mas vendedores...
por lo que se tiene que tener bien controlados los pk (primary keys) para que no truene el sistema mientras lo estan manejando...

por lo que yo tengo en el before post de mi tabla la siguiente sintaxis:

Código Delphi [-]
nSucursal := 1; //Saco la Sucursal por ejemplo la sucursal 1;
nCotiza := MaxID; //con una funcion saco el maximo de mi pk de la tabla
 
if tbl_cotiza.State in [dsInsert] then
begin
    while True do
    begin
        With qry_buscaID do
        begin
            Close;
            SQL.Text := 'select * from cat_cotizacion where ' +
                'pk_sucursal = :sucursal and pk_cotiza = :cotiza' ;
            Parameters.ParamByName('sucursal').Value := nSucursal;
            Parameters.ParamByName('cotiza').Value := nCotiza;
            Open;
        end;
 
        if qry_buscaID.isEmpty then
            Break
        else
            nCotiza := nCotiza + 1;
    end;
end;

esa es la sintaxis de mi codigo....
en resumen... entra a un ciclo infinito para buscar donde acomodar el pk buscando si ya existe en la tabla cat_cotizacion y si ya existe este incrementa en uno para volver a hacer la busqueda.

Ahora bien con ejemplos reales... se tienen dos computadoras arrancando el sistema... entonces ambas van a tener nCotiza en 5 (que es el MaxID - Maximo mas uno).

la primera maquina ya guardo.. entrando al ciclo y permitiendolo guardar con nCotiza en 5, ahora bien... lo ideal es que en la maquina dos al intentar guardar entra al ciclo.. y al encontrar que nCotiza = 5 ya existe este tiene que incrementarse en uno... osea nCotiza = 6 para asi poder guardar sus datos.... esa es la idea... :rolleyes:

pero me resulta que al hacer la busqueda en la seguna mquina... me dice que no existe aun... y me intenta guardar en nCotiza = 5 pero al darle el Post, truena diciendome que se duplican los primary key..!! :mad:

que me recomiendan hacer???? :confused:

poliburro 18-06-2007 22:01:12

Por que no creas un stored que se encargue haga lo siguiente:

Inicia transacción
Genera el Siguiente Id
Inserta el registro
Commitea la transacción

y agregas un handler para si ocurre un error eches para atras la transacción y no te bloquee la tabla :P.

ludan508 18-06-2007 23:01:29

Usar o no usar transacciones..!!!
 
Te agradezco mucho tu posteo..!!

Ya pude resolver el problema... pero al hacerlo me meti en otro problema...

resulta que el problema era el manejo de las transacciones... al inicio de la ventana de doy un BeginTrans y al dar el boton de guardar... le doy el CommitTrans...

ahh pues le quite esas lines.. y el codigo que escribi anteriormente ya funciona a la perfeccion..!!

ahora bien.. me meti en otro problema... que desventajas tengo al no usar transacciones...!!! ???? :confused:


La franja horaria es GMT +2. Ahora son las 22:30: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