Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Codigo a cero en un BD (https://www.clubdelphi.com/foros/showthread.php?t=22104)

CARSOFT_AR 07-06-2005 00:41:25

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

ramiretor 07-06-2005 00:58:15

Hola:
¿Por qué no haces una rutina que busca el máximo valor en la tabla?

Saludos

Jan 07-06-2005 01:13:43

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.

Lepe 07-06-2005 10:36:22

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º)

axelbb 07-06-2005 17:22:36

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.

CARSOFT_AR 08-06-2005 17:06:44

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

Jan 08-06-2005 17:57:13

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.

axelbb 08-06-2005 18:16:57

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!!!!!:D

No es un consejo menor, te aseguro que vas a renegar MUCHO con Paradox.

Saludos.

axelbb 08-06-2005 20:12:16

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;


CARSOFT_AR 08-06-2005 22:23:25

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

axelbb 09-06-2005 02:23:36

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.


La franja horaria es GMT +2. Ahora son las 06:16:10.

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