Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Generando un identificador realmente unico con delphi (https://www.clubdelphi.com/foros/showthread.php?t=52533)

mantrax 23-01-2008 22:29:17

Generando un identificador realmente unico con delphi
 
Deseamos crear un campo clave para las facturas que sea independiente del número de factura para no depender completamente del mismo. Guardabamos los contadores en una tabla, pero el bloqueo del registro genera problemas.

He visto los generadores y ok, me parce el reemplazo optimo para la tabla de contadores. Sin embargo ¿cómo hago para los detalles de las facturas? ¿cómo me las arreglo alli? porque si uso un trigger al insertar no tengo rollo para el master, pero ¿como tomará el mismo numero para almacenar en el detalle de la factura? ¿y si obtengo el numero pero de otra factura?

Entonces me encontre con esta solucion: un campo realmente unico como el que muestra este señor en PHP
http://agarzon.php.com.ve/2007/09/04...unico-con-php/ Lo puedes generar en el cliente y tendrás la seguridad de tus campos serán únicos. Entonces ahi si inserto el valor del generador de numero de factura tranquilo en el master y detalle.

Asi que en concreto consulto lo siguiente ¿hay alguna funcioncita en Delphi que haga lo mismo que esta? que me de garantía que sea único el valor que retorne (no importa que sea string, integer o blob jejeje)

Gracias de antemano y disculplen si la pregunta ya fue respondida. Trate de buscar en el foro, pero por lo menos yo no conseguir:(.

jcarteagaf 23-01-2008 22:44:09

Valores unicos
 
Pues hasta la fecha esto me funciono muy bien:

Código Delphi [-]
function GenUniqueValue : String;
var
  s : string;
  g : TGuid;
begin
  CreateGuid(g);
  s := GuidToString(g);
  Delete(s,1,1);
  Delete(s,Length(s),1);
  result := s;
end;

Espero que te sirva

Saludos

ixMike 23-01-2008 22:46:37


Cita:

md5(uniqid(rand()));
La función rand() la tienes en Delphi con el nombre Random(numerito), donde numerito es de tipo integer. En cuanto a lo demás, ya no sé qué decirte.

También iba a sugerirte que buscaras info sobre las guid, pero veo que se me han adelantado :D


Salu2.

AzidRain 24-01-2008 01:22:38

No se como guardes tus datos, pero la mayoría de los manejadores de BD antiguos y los motores nuevos manejan campos autoincrementados que efectivamente el motor asegura que sean únicos cada vez, ¿¿Como saber el número para meterlo al detalle?? Primero guardar el encabezado y obtener el número asignado por el motor, usar este numero en el detalle..

jachguate 24-01-2008 02:42:32

Creo que la mejor opción en general es la del guid, pues las probabilidades de que este se repita a escala global son realmente muy bajas, y en proyectos mas pequeños prácticamente nula.

Sin embargo, en una base de datos mediana/pequeña, e incluso muy grandes, los generadores son también una buena solución.

Si ya usas un generador para el encabezado de la factura... por que no usar otro (o hasta el mismo) generador para los detalles.

Ahora mismo estoy trabajando en una base de datos que tiene un único generador que se utiliza para generar la llave primaria de TODAS las tablas, y funciona muy bien.

Sobre el rango del generador, no tendrás problemas. En firebird 2 este es un bigint, con lo que su límite superior es 9223372036854775808, (2^64/2) nada mas y nada menos.

Unos cuantos registros caben allí... :D

Hasta luego.

;)

ixMike 24-01-2008 02:43:47

Cita:

Empezado por jachguate (Mensaje 260426)
2^64/2

Es decir, 2^63 :D:D:D


Salu2 ;)

jachguate 24-01-2008 02:47:37

¡con vos platico!! :D

ixMike 24-01-2008 02:50:03

Cita:

Empezado por jachguate (Mensaje 260428)
¡con vos platico!! :D

Lo siento, no lo entendí :o

¿Qué quisiste decir?

jachguate 24-01-2008 02:54:14

jejeje... es una expresión que utiliza mi padre. Es como exclamar "¡vos si que me entendiste!".

Hasta luego.

;)

ixMike 24-01-2008 02:55:45

Cita:

Empezado por jachguate (Mensaje 260434)
jejeje... es una expresión que utiliza mi padre. Es como exclamar "¡vos si que me entendiste!".

Hasta luego.

;)

ah! :D ok :)

Bye ;)

Dairo 01-02-2008 17:24:11

Hola, esto no es propiamente una respuesta.

Lo que pasa es que soy nuevo en esto y no se como usar la página.

Quiero realizar unas preguntas sobre programacion pero no se como, ¿me prodrias hacer el favor de explicarme como hago para preguntar ?

ixMike 01-02-2008 18:13:50

Cita:

Empezado por Dairo (Mensaje 262667)
Hola, esto no es propiamente una respuesta.

Lo que pasa es que soy nuevo en esto y no se como usar la página.

Quiero realizar unas preguntas sobre programacion pero no se como, ¿me prodrias hacer el favor de explicarme como hago para preguntar ?

¿Has probado con el botón "Nuevo hilo"? :D:D

Me parece que necesitas un tutorial sobre cómo funciona un foro... o puede que uno sobre las distintas páginas de internet.

Para contestar, pulsa "Responder". ;)

También viene bien saber inglés.


Salu2. (se lee salu-dos):p


La franja horaria es GMT +2. Ahora son las 17:50:30.

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