Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-07-2007
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 18
MON___ Va por buen camino
¡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?
Responder Con Cita
  #2  
Antiguo 16-07-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 16-07-2007
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 18
MON___ Va por buen camino
Marcoszorrilla, creo que volveré al campo del tipo SHORT e incrementarlo "manualmente", mediante una función personalizada.
Responder Con Cita
  #4  
Antiguo 17-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
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.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 18-07-2007
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 19
casacham Va por buen camino
Cool 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;
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
malditos requisitos monopolicos!!! Pascalizado La Taberna 4 29-09-2006 17:17:19
Cuantos Campos eduarcol Tablas planas 4 23-02-2004 17:07:02
Campos Calculados UTECYBER OOP 2 17-11-2003 14:00:27
Campos En Sql ebeltete SQL 2 13-05-2003 01:26:50


La franja horaria es GMT +2. Ahora son las 15:24:48.


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