Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2008
mantrax mantrax is offline
Miembro
 
Registrado: may 2007
Posts: 19
Poder: 0
mantrax Va por buen camino
Red face 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.
Responder Con Cita
  #2  
Antiguo 23-01-2008
Avatar de jcarteagaf
[jcarteagaf] jcarteagaf is offline
Miembro Premium
 
Registrado: abr 2006
Ubicación: La Paz, Bolivia
Posts: 651
Poder: 19
jcarteagaf Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 23-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino

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


Salu2.
Responder Con Cita
  #4  
Antiguo 24-01-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
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..
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 24-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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í...

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 24-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
2^64/2
Es decir, 2^63


Salu2
Responder Con Cita
  #7  
Antiguo 24-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
¡con vos platico!!
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 24-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
¡con vos platico!!
Lo siento, no lo entendí

¿Qué quisiste decir?
Responder Con Cita
  #9  
Antiguo 24-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
jejeje... es una expresión que utiliza mi padre. Es como exclamar "¡vos si que me entendiste!".

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #10  
Antiguo 24-01-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por jachguate Ver Mensaje
jejeje... es una expresión que utiliza mi padre. Es como exclamar "¡vos si que me entendiste!".

Hasta luego.

ah! ok

Bye
Responder Con Cita
  #11  
Antiguo 01-02-2008
Dairo Dairo is offline
Registrado
 
Registrado: oct 2007
Posts: 4
Poder: 0
Dairo Va por buen camino
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 ?
Responder Con Cita
  #12  
Antiguo 01-02-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Cita:
Empezado por Dairo Ver Mensaje
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"?

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)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Generando el password perfecto! marcoszorrilla La Taberna 51 26-10-2016 18:37:46
Generando un grafico en un DBChart Sr.Scorpion Conexión con bases de datos 0 06-03-2007 01:49:09
cual es el identificador (un numero) único para un PC? JuanErasmo API de Windows 5 18-02-2007 00:02:44
Qreport generando un HTML? danytorres Varios 0 01-09-2005 17:43:30
generando instalable vetustas Varios 3 17-12-2003 11:29:00


La franja horaria es GMT +2. Ahora son las 01:10:32.


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