FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
como generar un id
hola amigos una vez mas solicitando de su valiosa ayuda
lo que pasa es que tengo una tabla de usuarios con los campos de id_usuario, nombre, contraseña, me gustaria saber como le puedo hacer para generar un id de usuario cada vez que se agregue un usuario a la tabla gracias un avez mas |
#2
|
|||
|
|||
hola ureña...
debes colocar que base de datos utilizas, porque la mayoria soporta campos incrementales, eso se crea cuando das la estructura de la tabla...ahora si no soporta campos incrementales tu DB. crea una tabla que lleve el conteo, es decir cuando se inserta un registro se le asigna un valor que esta contenido en la otra tabla, y luego se incrementa de tal forma que este listo para la proxima insercion.....bye |
#3
|
||||
|
||||
Creo que lo que pide es otra cosa. Supongo que quieres generar un Id de usuario automático y al azar.
Si el campo Usuario es de tipo clave única con eso ya evitarás que se repite algún nombre de usuario. Puedes utilizar Randomize y luego la función Random, para una clave de seis caracteres puede hacer 6 llamadas a esta función dentro del rango de los números y letras y devolverá claves aleatorias, puedes usar SQL para comprobar si la clave ya existe y entonces llamar a generar otra. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#4
|
|||
|
|||
lo mas facil es obtener el ultimo id e ir incrementando tu el registro y obtienes un id, otra puede ser conseguir una libreria md5 por ejemplo y obtener el md5 del nombre, seria otro id..
|
#5
|
||||
|
||||
Genereando un Id Inteligente
Hola amigo del FORO
Te cuento que yo utilizo Id como campo clave en la mayoria de las bases de datos que diseños. Esto me permite modificar el resto de los campos sin perder la relacion Master - > Datail que ocurre cuando se utilizas un campo con valores que vos no controlas como campo clave. Es decir, si utilizas algun dato como la edad o algo asi como campo clave, al modificar esta valor y no actualizarlo en las tablas de detalle perdes la relacion y por consiguiente no vas a ver los datos relacionados. Debido a este motivo tenes dos soluciones. 1) Hacer que tu campo clave sea autonumerico. Lo cual es muy facil, y si manejas bases de datos de escritorios podes desde Acces o el DatabaseDesktop señalar como autoincrementable a tu campo clave 2) Podes escribir un poco de codigo, sin utilizar Sql, sino algo sencillo como el que yo utilizo para que te genere numeros enteros continuos. Es decir que cada vez que insertas un registro, una funcion encuentre un numero unico para cada campo y que sea continuacion del que eliminaste. Es asi. vas a ingresar registros y cada uno llevara como Id valores como 1 2 3 4 5 6, pero si borras el registro "3", te van a quedar 1 2 4 5 6, lo que hace mi codigo es buscar esa falta y rellenarla. Es solo para dar un orden. Aqui va el codigo Tenes que definir esta funcion en el sector private de tu DataModule Código Delphi [-] procedure DS_EvolLaboraStateChange(Sender: TObject); private { Private declarations } ViejoPE, ViejaAL, VijoEP: Double; FUNCTION ValidIdReg(TOrigen,Tablit: TADOTable; Campo: String):Integer; ..... .... ..... FUNCTION TDM_BD.ValidIdReg(TOrigen,Tablit: TADOTable; Campo: String):Integer; Var I: Integer; begin {Funcion definida para campos numericos, busca el numero entero inmediato es para asignar el valor para los campos IdReg, por ejempo} Tablit.TableName:=TOrigen.TableName; Tablit.Open; Tablit.Clone(TOrigen); I:= 0; While Tablit.Locate (Campo, I,[loCaseInsensitive]) = True do begin I:= I+1; end; If Tablit.Locate (Campo, 0,[loCaseInsensitive]) = False then Result:= 0 Else Result:= I; Tablit.Close; end; Luego capturas el evento OnNewRecord de la tabla en la que esta el id en cuestion y escribis este codigo Código Delphi [-] procedure TDM_BD.T_PCTE_NewRecord(DataSet: TDataSet); begin F_PCTE.cxDBTextEdit1.SetFocus; T_PCTE_IdPcte.Value:=ValidIdReg(T_PCTE_, TCtrl, T_PCTE_IdPcte.FieldName); end; TDM_BD= TDatamodule donde estan tus objetos T_PCTE_= Es una TADOTable T_PCTE_IdPcte= Es el Id del paciente TCtrl= Es una tabla TADOTable que esta en tu datamodule pero no esta relacionada con ninguna tabla de tu base de datos La funcion ValidIdReg te devuelve el numero para un Id unico e irrepetible luego de que le pasas como parametro la tabla de origen en la cual reside el campo Id que quieres generar, luego el nombre de la tabla control, que es una tabla ado vacia y el campo id en cuestion de la tabla origen. Finalmente la funcion clona la tabla origen, es decir realiza un copia de tu tabla original y trata de ver si existe un hueco en la sucesion de numeros id, si es asi te devuelve el necesario para rrellenarlo, sino te genera el siguiente. Espero que te sirva, y comentame si usas TAdotable, paradox o que sistema de bases de datos estas utilizando. Es totalmente adaptable a paradox el codigo que te mando, pero si lo tuyo es lo mas sencillo con lo que te digo en el primer punto (campos id autoincrementables) es suficiente. |
#6
|
||||
|
||||
hola amigos lo que quiero hacer es mucho mas facil...
solo quiero agregarle un numero consecutivo a cada uno de los registros ya que solo voy a eliminar logicamente por que tengo un campo que me los pone como activo o inactivo segun sea el caso asi es que no hay problema al momento de que queden numeros consecutivos sin usar |
#7
|
|||
|
|||
pues el autoincremento desde la base de datos
o cuando crees un nuevo registro, puedes usar una consulta, que te traiga el maximo +1 para ponerlo en el campo id |
#8
|
||||
|
||||
gracias
gracias a todos a los que se tomaron la molestia en ayudarme
ya me quedo cada vez me gusta mas esto de delphi salidos!!! |
#9
|
|||
|
|||
Hola Ureña, buscando otra cosa llege a este hilo, no lo lei todo pero hace tiempo encontre una forma sencilla de generar un id para mi db, lo hice generando un formato de fecha y hora que me permite que se cambie permanentemente, porque el tiempo no para..
es el siguiente: edit1.TEXT:=formatdatetime('yyMMddHHmmsszzz',now); queda algo asi: 070516221120235 si tenes varias pc en la red puede pasar que en el mismo momento, o sea en el mismo dia a la misma hora en el mismo segundo y en la misma milesima de segundo se duplique el numero pero en ese caso manejate poniendo un un para de digitos unicos para cada Pc salu2 |
#10
|
||||
|
||||
Que buena IDEA
Hola ebeltete que buena idea tenes, menos mal que la publicaste en un hilo reciente
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como generar reporte en PDF ? | martita | Impresión | 4 | 24-11-2006 10:14:00 |
¿Como Generar Ejecutable con BDE? | zugazua2001 | Varios | 4 | 14-12-2004 23:27:39 |
como generar un informe ? | maruenda | Impresión | 1 | 24-11-2004 17:52:24 |
Como generar esto? | nefy | SQL | 2 | 02-04-2004 17:34:46 |
Como generar instaladores | Robert | Conexión con bases de datos | 4 | 06-08-2003 23:48:15 |
|