Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уникальный код [D7, WinXP]


fisherman ©   (2007-08-09 14:17:00) 

Всем привет!
Подскажите, есть у Делфи функция формирующая уникальный код


antonn   (2007-08-09 16:32:00) [1]


> И какого лешего ты постишь вопрос здесь, а не в форуме по
> базам данных ?

затоптал%)


DVM   (2007-08-09 16:28:00) [2]

GUID статистически уникален, но абсолютная уникальность не гарантирована.


{RASkov}   (2007-08-09 16:26:00) [3]

Последний пост из той ветки:

[9] {RASkov} ©   (15.05.07 18:21)
В общем остановился на этом (может кому и пригодится):
function GetDID(const F12Ch: Boolean=True): String;
const Ch: array [0..25] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    MAXCHAR = 3-1;
var ArrPosCh: array [0..MAXCHAR] of Byte;
  SetPosCh: set of Byte;
  N, K, J, Min, TmpI: Byte;
begin
for N:= 0 to MAXCHAR do ArrPosCh[N]:=0;
N:=0; SetPosCh:=[];
Result:=IntToStr(Round((Now-RoundTo(Now, 2))*10000000));
Randomize; J:=Length(Result)-(2-ORD(F12Ch));
while N<=MAXCHAR do begin
 K:=2+Random(J);
 if not ((K in SetPosCh) or (Pred(K) in SetPosCh) or (Succ(K) in SetPosCh)) then begin
  Include(SetPosCh, K);
  ArrPosCh[N]:=K;
  INC(N);
 end;
end;
if F12Ch then begin
 for N:=0 to MAXCHAR do begin
  Min:=N;
  for J:=N+1 to MAXCHAR do
   if ArrPosCh[J] < ArrPosCh[Min] then Min:=J;
   TmpI:=ArrPosCh[N];
   ArrPosCh[N]:=ArrPosCh[Min];
   ArrPosCh[Min]:=TmpI;
 end;
 for N:= 0 to MAXCHAR do Insert(Ch[Random(26)], Result, ArrPosCh[N]+N);
end else for N:= 0 to MAXCHAR do Result[ArrPosCh[N]]:=Ch[Random(26)];
end;
Я подозреваю, что совпадений "не будет никогда". ) С условием, что генериться будет минимум один раз на одном компе. Естественно, если в базе уже будет такой идентификатор, то процедура повториться. Я вот думаю, тот ли участок взял из числа (дата+время) или лишнего от начала отсек....
Кстати, может и не надо символы вставлять, тогда и получится число(как я и хотел)?

> [7] Gydvin ©   (15.05.07 07:22)

Не понял вопроса... в чем смысл функции? - ты спрашиваешь... А неужели не понятно, да и расписывал про все это зря что ли....

> [8] Kolan ©   (15.05.07 07:46)
GUID и обреж

Тоже вариант....
Ладно... всем спасибо за участие ;)


l_v   (2007-08-09 16:25:00) [4]


> {RASkov} ©   (09.08.07 16:22) [11]


Произошла ошибка:
Не найдена ветка № 1179178018, возможно она была удалена или перенесена в другой форум.

Назад

(c) Мастера DELPHI


{RASkov}   (2007-08-09 16:22:00) [5]

Как-то не больно давно я тоже такой "ерундой" страдал :) Вот:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1179178018
Можно и под "числовой" переделать....


Leonid Troyanovsky   (2007-08-09 15:45:00) [6]


> fisherman ©   (09.08.07 14:47) [6]

> FoxPro, и там используется функция sys(3) возвращающая уникальный
> 8-ми знаковый числовой код.
> Вот что-то наподобие этого надо

Value := Format('%8.8d', [Random(100000000)]);

--
Regards, LVT.


tesseract   (2007-08-09 15:38:00) [7]


> не совсем то, мне надо заносить в DBF-ку онформацию и каждой
> записи присваивать уникальный код.


Автоинкрементые поля уходят в Ж ?


l_v   (2007-08-09 15:01:00) [8]

Shift+Ctrl+G... :)
правда стринг, и правда он тебе совсем неподходит... :)


Сергей М.   (2007-08-09 14:56:00) [9]


> мне надо заносить в DBF-ку онформацию и каждой записи присваивать
> уникальный код


Чем же не устроил уникальный GUID ?

И слышал ли ты хоть что-либо о генераторах автоинкрементных целочисленных значений ?

И какого лешего ты постишь вопрос здесь, а не в форуме по базам данных ?


fisherman   (2007-08-09 14:47:00) [10]


> CreateGUID()

не совсем то, мне надо заносить в DBF-ку онформацию и каждой записи присваивать уникальный код.
База данных используется другой программой написанной на FoxPro, и там используется функция sys(3) возвращающая уникальный 8-ми знаковый числовой код.
Вот что-то наподобие этого надо


tesseract   (2007-08-09 14:34:00) [11]

for i:=1 to 99 do
begin
 unicode:=unicode+strtoint(random(99));
end;


fisherman   (2007-08-09 14:26:00) [12]

спасибо, сейчас попробую


Jeer   (2007-08-09 14:25:00) [13]


> формирующая уникальный код


твоего нового уникального приложения ?


Сергей М.   (2007-08-09 14:21:00) [14]

CreateGUID устроит ?


Rouse_   (2007-08-09 14:21:00) [15]

CreateGUID()


Наверх

Титульная страница Поиск, карта сайта Написать письмо