FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Codigo a cero en un BD
hola a todos, tengo unas bases de datos a las cuales le asigno un tipo de datos (AUTO INCREMENTO) el cual se va incrementanto automaticamente el ingresar un registro, pero al borrar dicho registro el valor no se drecrementa.
Mi pregunta es, como puedo hacer si quiero borrar todo el contenido de mi BD (199) registros y quiero que el nuevo registro empiece en el 1 y no en el 200. Gracias a todos. CARsoft |
#2
|
|||
|
|||
Hola:
¿Por qué no haces una rutina que busca el máximo valor en la tabla? Saludos
__________________
Ernesto R. |
#3
|
|||
|
|||
Hola.
Depende de que tipo de base de datos utilizes. Por ejemplo, en paradox no hay una forma sencilla de hacerlo, si no recuerdo mal había que cambiar el valor de cierto byte en el archivo correspondiente (no me preguntes que byte era porque no lo recuerdo, lo leí una vez hace años pero no lo necesité hacer nunca). Si es SQL Server, creo que tiene su propia instrucción, al igual que Interbase/Firebird. Danos mas detalles, por favor.
__________________
Guía de Estilo del Foro |
#4
|
||||
|
||||
He usado AutoIncrementales hasta que me harté de ellos, es mas cómodo un campo LongInteger y hacer tu mismo una función que te devuelva el último.
Solamente tendrías que llamar a esa función en el OnNewRecord de la tabla, y si estas en red, tambien antes de guardar (para que dos usuarios no guarden con el mismo nº)
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
|||
|
|||
Generador a 0
Si estás usando un servidor de bases de datos, la instrucción es:
SET GENERATOR nombregenerador TO 0; Al menos en el estándar. Si no anda, decinos qué base de datos estás usando. No es recomendable que se decremente al borrar datos, porque si borras un registro intermedio, podés hacer un lindo lío. Cuando se borra un registro, el valor se pierde, y si generas una transacción y luego le haces Rollback, también se pierde, aunque no la hayas confirmado (Commit). Los generadores y autoincrementales se usan para generar identificadores únicos, que se usan DENTRO del programa. Si aún así querés experimentar, podés hacer un trigger after delete, por ejemplo, que vuelva el generador a un valor anterior con la instrucción que te dí. ¡¡Pero ojito con lo que hacés!! Saludos. Última edición por axelbb fecha: 07-06-2005 a las 17:28:40. Razón: Completar mi respuesta |
#6
|
|||
|
|||
Gracias a todos por sus respuestas y perdonen por no haber dicho que tablas estoy usando, estoy usando PARADOX. Quiero borrar los indices porque al instalar el soft en la maquina del usuario no quiero que empiecen por ejemplo con IDCLIENTE = 200, sino que empice con IDCLIENTE = 1; es por eso que quiero modificarlo, se que se puede empezar desde 1 o 0 creando la Base de Datos de vuelta, pero queria ahorrarme ese paso. MUCHAS GRACIAS, y si tienen la respuesta ahora que saben que es PARADOX mejor.
CARsoft |
#7
|
|||
|
|||
Hola de nuevo:
Realizando una pequeña busqueda por el foro aparece este hilo en el que se propone una solución. Otra es eliminar el campo autoincremental y volverlo a crear. Espero que te sirva.
__________________
Guía de Estilo del Foro |
#8
|
|||
|
|||
Ok, entonces es...
Función en Dephi para leer ese dato (y modificarlo también, con algunos cambios):
function LeeAutoInc(filename : string) : LongInt; var MiTabla : tfilestream; buffer : longint; begin MiTabla := tfilestream.create(filename, fmOpenread + fmShareDenyWrite); MiTabla.Seek(73, soFromBeginning); MiTabla.readbuffer(buffer, 4); //Aqui usas funciones de Write //Write(const Buffer; Count: Longint) //mira ayuda Delphi MyTabla.Free; LeeAutoInc := buffer; end; Creo que anda, probalo y corregilo si hace falta. El valor del último autogenerado se almacena en el lugar 73 decimal del archivo principal. Pero, por Dios, no uses más Paradox!!!!! No es un consejo menor, te aseguro que vas a renegar MUCHO con Paradox. Saludos. |
#9
|
|||
|
|||
Version revisada (anda bien)
Aqui va una version corregida, tuve tiempo de hacerla y probarla. ¡Que la disfrutes!!
function TForm1.CambiaAutoInc(filename : string) : LongInt; var MiTabla : tfilestream; buffer : longint; begin MiTabla := tfilestream.create(filename,fmOpenReadWrite); buffer := 0; MiTabla.Seek(73, soFromBeginning); MiTabla.Write(Buffer,4); MiTabla.Free; end; |
#10
|
|||
|
|||
Gracias a todos por haberme ayudado, y en realidad no me gusta paradox, pero para esta aplicacion bueno........, no he tenido tiempo para estudiar otras BASES DE DATOS, pero pienso migrar a INTERBASE, pienso que es una buena BD, muchas gracias a todos.
CARsoft |
#11
|
|||
|
|||
Si, a varios nos pasó igual, así empezamos todos. Interbase y Firebird son una EXCELENTE opción. Te recomiendo ver también PostgreSQL 8.
Suerte!! PD: A mi ultimo codigo, le falto un "Result := buffer" antes del "end;"... Sorry. |
|
|
|