Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2005
CARSOFT_AR CARSOFT_AR is offline
Miembro
 
Registrado: abr 2004
Posts: 103
Poder: 21
CARSOFT_AR Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 07-06-2005
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Hola:
¿Por qué no haces una rutina que busca el máximo valor en la tabla?

Saludos
__________________
Ernesto R.
Responder Con Cita
  #3  
Antiguo 07-06-2005
Jan Jan is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz
Posts: 90
Poder: 21
Jan Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 07-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 07-06-2005
axelbb axelbb is offline
Miembro
 
Registrado: oct 2004
Posts: 127
Poder: 20
axelbb Va por buen camino
Exclamation 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
Responder Con Cita
  #6  
Antiguo 08-06-2005
CARSOFT_AR CARSOFT_AR is offline
Miembro
 
Registrado: abr 2004
Posts: 103
Poder: 21
CARSOFT_AR Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 08-06-2005
Jan Jan is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz
Posts: 90
Poder: 21
Jan Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 08-06-2005
axelbb axelbb is offline
Miembro
 
Registrado: oct 2004
Posts: 127
Poder: 20
axelbb Va por buen camino
Lightbulb 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.
Responder Con Cita
  #9  
Antiguo 08-06-2005
axelbb axelbb is offline
Miembro
 
Registrado: oct 2004
Posts: 127
Poder: 20
axelbb Va por buen camino
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;

Responder Con Cita
  #10  
Antiguo 08-06-2005
CARSOFT_AR CARSOFT_AR is offline
Miembro
 
Registrado: abr 2004
Posts: 103
Poder: 21
CARSOFT_AR Va por buen camino
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
Responder Con Cita
  #11  
Antiguo 09-06-2005
axelbb axelbb is offline
Miembro
 
Registrado: oct 2004
Posts: 127
Poder: 20
axelbb Va por buen camino
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.
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


La franja horaria es GMT +2. Ahora son las 21:13:53.


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