RE:nunca dije que el # se repeteria
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.