Delphi - un número auntoincremental

 
Vista:

un número auntoincremental

Publicado por Isabel (42 intervenciones) el 21/10/2003 21:20:34
nuevamente hola
esta ves tengo una duda no se como hacer que delphi maneje un numero entero autoincremental, pero que no sea único porque cada fin de año debe de inicializarse en cero, es para un sistema que estoy haciendo, pero aun nose como hacerlo, de antemano gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:un número auntoincremental

Publicado por Fer (269 intervenciones) el 22/10/2003 09:17:56
Delphi no maneja números autoincrementales. Supongo que de lo que estás hablando es de un identificador único para utilizar como clave en una tabla de una base de datos.

Si es así. dependiendo de la base de datos que utilices, hay distintas soluciones.

Paradox tiene un tipo de dato que es autoincremental (no recuerdo en este momento como se llama).

En interbase tienes que crear un generador, que no es más que una "fuente" de números incrementales.

Oracle tiene las secuencias, que te van dando automáticamente un nuevo valor cada vez que las lees.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

vamos bien, pero es Sybase

Publicado por isabel (42 intervenciones) el 22/10/2003 18:49:02
o.k. o.k. vamos bien pero el lenguaje qeu utilizo es Sybase, debo de confesar que es la primer vez que hago un Sistema en Delphi y de esto depende titularme en Lic en Informatica, entonces no se como hacerlo, pues efedtivamente este número será una llave primaria pero no debe ser un número único y el mismo sistema me dede dar un número al momento de grabar nuevos datos en dicha tabla.
cualqueir ayuda gracias, que de hecho me sirvió de mucho saber qu edelphi no maneja este tipo de datos.
un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:vamos bien, pero es Sybase

Publicado por Diego Romero (636 intervenciones) el 22/10/2003 19:00:26
Una clave repetida no puede ser clave primaria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

nunca dije que el # se repeteria

Publicado por Isabel (42 intervenciones) el 22/10/2003 23:35:36
bueno no se que hayas entendido pero nunca dije que el numero se repetiria, de hecho es una clave primaria y eso lo tengo muy entendido, mi duda que tipo de dato utilizar de tal manera que se autoincremente, pero no debe de ser unico porque al momento de que el sistema cambie de fecha a un nuevo año este numero tendrá que iniciar de cero nuevamente... no sé si es eso a lo que te refieres. ahora al decir que no queiro que sea único me refiero a lo mismo que solo se incremente sin importar si es un nuevo año o no? ahora otra pregunta, si esto no es posible o bien si tengo que programar en delphi está condición o bein si existe algun tipo de dato que nombre tiene esto.
cualquier sugerencia la agradesco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:nunca dije que el # se repeteria

Publicado por mamcx (533 intervenciones) el 23/10/2003 00:03:38
Ok Isabel, en primer lugar debes separar el manejo del motor del de Delphi o cualquier otra herramienta. Posiblemente en un foro de Sybase te puedan dar ayuda más especifica sobre el motor como tal y sus capacidades. Sin embargo ya que el problema que describes es recurrente te doy una solucion que se implementa igual en cualquier motor de datos:

Tabla Codigos
Clave Id
2000 50
2001 1

La idea es que en base al año del sistema, se crea un procedimiento almacenado que a)si el año no existe, inicializa una fila en codigos con el año y el 1 como Id o b) Si el año se encuentra actualiza la fila con el valor del Id+1 y retorna ese valor.

Rapidamente, en pseudocodigo: (ni idea de como se codifica en sybase, ok?)

Procedure NuevoId
Var NuevoId:Int

Select NuevoId=Codigos.Id from codigos where Año='2002'

if Nuevoid=null then
insert into codigos (año,id) values ('2003',1)
return 1
else
NuevoId=NuevoId+1
update codigos set id=NuevoId where Año='2002'
return NuevoId

es la idea :)

La forma mas elegante es asignar el valor en un desencadenador (te toca chequear en la documentacion si la version que tienes lo soporta, y como especificar que sea para insercion de datos SOLAMENTE)

Otra alternativa es hacer todo el proceso en Delphi, no es muy dificil pero es mas elegante hacerlo en la base de datos (y mas rapido y seguro). Ten en cuenta que en ambos casos debes proteger la accion en una transaccion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ya entendí...

Publicado por isabel (42 intervenciones) el 23/10/2003 22:02:21
gracias, por la ayuda según yo ya entendí, espero que todo me salga bien, de todas maneras si tengo alguna otra duda entonces, volveré a recurrir aquí.
mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar