Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Вниздублирование записей Найти похожие ветки
← →
Doctor Deejay © (2004-05-04 18:31) [0]Вопрос в следующем. Есть БД. Заполняю одно из ее полей по рандому с пом. функции:
function TForm1.GenerateImgID : string;
const
Chars = "0123456789abcdefghijklmnopqrstuvwxyz";
Len = 16;
Path = "c:\cool";
begin
Memo1.Clear;
Memo1.Lines.LoadFromFile(Path);
Randomize;
result:="";
repeat
Application.ProcessMessages;
while length(Result)<Len do
begin
Application.ProcessMessages;
Result:=Result + Chars[Random(36) + 1];
end;
until pos(result,Memo1.Text)=0;
Memo1.Lines.Add(Result);
Memo1.Lines.SaveToFile(Path);
end;
После вызова этой функции в цикле заполнения происходит дублирование одного и того же значения на несколько записей. Не знает ли кто-то причину. Может алгоритм не тот самой ф.?
Использую стандартные TClientDataSet TDataSource TDBGrid
← →
Doctor Deejay © (2004-05-05 10:49) [1]
НЕУЖЕЛИ НИКТО НЕ ПОДСКАЖЕТ?
← →
Johnmen © (2004-05-05 10:55) [2]1. Randomize вынеси в место, однократно выполняемое при начале работы прогр. В секцию инициализации, напр.
2. Application.ProcessMessages абсолитно лишнее
3. Лучше уж использовать виндовый гуид. См. TGUID и кака с ним работать...
← →
Doctor Deejay © (2004-05-05 17:50) [3]Дело в том, что если поставить паузу, то проблема
исчезает
....
← →
Desdechado © (2004-05-06 10:51) [4]Дело в том, что Randomize инициализируется с системного таймера, и стартовое значение может быть одинаковым в пределах малого промежутка времени.
Так что Johnmen (1) - обязательно.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c