Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ¡Malditos campos incrementables! (https://www.clubdelphi.com/foros/showthread.php?t=45864)

MON___ 16-07-2007 22:18:15

¡Malditos campos incrementables!
 
Creo que me voy a olvidar de ellos. En las primeras versiones de PARADOX este tipo de campos no existían (creo que aparecieron con la versión 7). Recuerdo que con DELPHI 1 venía un ejemplo de cómo incrementar un campo:

Select MAX(campo_que_quiero_incrementar) FROM "tabla.db"

result := query1.fields[0].asInteger + 1;

Pues bien. Ando perdido. Me he decidido por utilizar este tipo de campos. Y me están causando problemas, quizá porque no he entendido el comportamiento de este tipo de campos. Resulta que cuando, mediante SQL, hago un UPDATE el registro se me actualiza correctamente pero el valor del campo incrementable (que no debería modificarse; al menos eso pensaba y) se me INCREMENTA.
¿Es esto normal? ¿Dónde está mi fallo?

marcoszorrilla 16-07-2007 22:23:23

Si de esta manera piensas mantener consecutivos en una facturación no te lo aconsejo, porque te creará huecos que luego te será imposible llenar, ya este tipo de campos siempre hacia adelante y si cancelas una inserción el contador ya ha saltado y dejará un hueco.

Yo utilizo y por ahora siempre me ha dado buenos resultados, una tabla auxiliar en dondee guardo el último número utilizado, lo incremento en uno y lo guardo en una variable y si se consolida la grabación lo incremento también en la tabla para el próximo alta.

Un Saludo.

MON___ 16-07-2007 23:06:58

Marcoszorrilla, creo que volveré al campo del tipo SHORT e incrementarlo "manualmente", mediante una función personalizada.

jhonny 17-07-2007 03:20:00

No son del todo malditos, de hecho en algunos casos son bastante útiles, pero para aumentar el numero de un documento contable por ejemplo, se convierten en un dolor de cabeza, ya Marcos te ha explicado las razones.

casacham 18-07-2007 03:10:58

Funcion salvadora
 
Yo lo he resuelto con esta funcion que me busca los huecos en los campos ID, tal vez para muchos datos no funcione porque puede enlentecer la PC

Código Delphi [-]

FUNCTION TDM_BD.ValidIdReg(TOrigen,Tablit: TADOTable; Campo: String):Integer;
Var I: Integer;
begin
{Funcion definida para campos numericos, busca el numero entero inmediato
es para asignar el valor para los campos IdReg, por ejemplo}
Tablit.TableName:=TOrigen.TableName;
Tablit.Open;
Tablit.Clone(TOrigen);
I:= 0;
While Tablit.Locate (Campo, I,[loCaseInsensitive]) = True do
begin
I:= I+1;
end;
If Tablit.Locate (Campo, 0,[loCaseInsensitive]) = False then Result:= 0 Else Result:= I;
Tablit.Close;
end;





TOrigen es la tabla donde esta el campo al cual voy a asignar el valor Id
Tablit es la tabla donde realizo la busqueda, por defecto una tabla vacia solo con la ConnectionString asignada.

Se utiliza asi:


Código Delphi [-]
procedure TDM_BD.T_PCTE_NewRecord(DataSet: TDataSet);
begin
F_PCTE.cxDBTextEdit1.SetFocus;
T_PCTE_IdPcte.Value:=ValidIdReg(T_PCTE_, DM_BD_Ctrl.TCtrl, T_PCTE_IdPcte.FieldName);
T_PCTE_F_Ingreso.Value:=F_Prin.Calendario.Date;
end;


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