Страница 1 из 1
как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 14 фев 2012, 14:47
Darikon
Народ, поможите! )
как переключить последовательный инкремент на псевдослучайное формирование nrec в БД на MS SQL?
делал сам когда то (года четыре назад и именно на MS SQL ). сейчас или не помню откуда делал или убрали из функционала, не пойму.
очень нужно.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 14 фев 2012, 15:07
spark
Darikon писал(а):Народ, поможите! )
как переключить последовательный инкремент на псевдослучайное формирование nrec в БД на MS SQL?
делал сам когда то (года четыре назад и именно на MS SQL ). сейчас или не помню откуда делал или убрали из функционала, не пойму.
очень нужно.
На сколько я понимаю, есть два случая формирования nrec: средствами галактики и внешними средствами.
В первом случае Nrec выдает Nap Server.
Во втором триггеры.
Для первого случая, как я понимаю, в конфиге в секции DataBase можно прописать RandomSurrKeys=ON.
Во втором случае надо смотреть как работает триггер.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 14 фев 2012, 15:13
Darikon
Для первого случая, как я понимаю, в конфиге в секции DataBase можно прописать RandomSurrKeys=ON.
Во втором случае надо смотреть как работает триггер.
меня вот в этом ключе RandomSurrKeys остановило то, что в документации везде прописано, что это только для первазива, да и у самого в памяти осталось так, что вроде переключал через фейсы какие то.
а как работает второй случай - я знаю )
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 14 фев 2012, 15:23
spark
Darikon писал(а):меня вот в этом ключе RandomSurrKeys остановило то, что в документации везде прописано, что это только для первасива
Точно... извинтиляюсь =)
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 15 фев 2012, 08:04
n0where
Код: Выделить всё
BlaBLa.nRec := 0; // или GetNextNRec, но лучше не юзать
Так не работает чтоле?
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 15 фев 2012, 15:26
LaaLaa
Алгоритм случайной генерации Nrec-ов мог быть влкючен только в драйвере Первасива.
В MS SQL, Oracle (теперь еще и в PostgreSQL) только по порядку.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 15 фев 2012, 15:41
Darikon
LaaLaa писал(а):Алгоритм случайной генерации Nrec-ов мог быть влкючен только в драйвере Первасива.
В MS SQL, Oracle (теперь еще и в PostgreSQL) только по порядку.
спасибо за ответ. а жаль.. удобный генератор был ))
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 15 фев 2012, 17:37
edward_K
пользуйтесь номером офисса - в nrec он присутсвует. В конце концов в любой базе вы можете работать от имени пользователя другого офисса.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 15 фев 2012, 20:55
LaaLaa
А вам, что просто функция генерации случайных чисел нужна?
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 15 фев 2012, 21:15
Darikon
нужен длинный шестнадцатеричный код. цель заказчика - видеть его в фейсе и в квитанции(числом и штрихкодом). чтобы значит, проверять честность плательщика. говорят, были инциденты.
чтобы не заморачиваться своим кодом и местом хранения, хотел воспользоваться стандартным функционалом ))
именно длинный и шестнадцатеричный хочет заказчик.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 16 фев 2012, 14:50
LaaLaa
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 16 фев 2012, 14:58
LaaLaa
Возможно вам пригодится объектный интерфейс для генерации псевдослучайных значений
RandomGenerator.vih
Код: Выделить всё
#ifndef __RandomGenerator_vih__
#define __RandomGenerator_vih__
ObjInterface ObjRandomGenerator;
property LastRandomCounter: comp;
function NextRandomNumber(Range: longInt): longInt;
function NextRandomDate(DateBegin: date; DateEnd: date): date;
function NextRandomCode(CodeLength: longInt): string;
function NextRandomWord: string;
function NextRandomText: string;
End;
VipInterface RandomGenerator Implements ObjRandomGenerator;
#endif
RandomGenerator.vip
Код: Выделить всё
#include RandomGenerator.vih
Interface RandomGenerator;
var LastRandomCntr: comp; //счетчик псевдослучайной последовательности
const
ConsonantLetters: string = 'сркмпнлтвдхбгшзфжцйчщ';//'сртмпблвкзлхдвнсдстчктбцпчнггйрмцжкврбпнйфзхзщлдфшгшмжщйхшцжчфщ'; //массив согласных букв (каждой по 3)
VowelLetters: string = 'оаеиуяёюэы';//'оиаюаоэиюеяиоэыеэеяяуёуюаыёуёы'; //массив гласных букв (каждой по 3)
Symbols: string = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя0123456789'; //массив букв и цифр
end;
//свойство для чтения и записи счетчика псевдослучайной последовательности
property LastRandomCounter: comp absolute LastRandomCntr;
//функция генерации следующего числа псевдослучайной последовательности
//результат - случайное число от 0 до Range-1
function NextRandomNumber(Range: longInt): longInt;
{
LastRandomCntr := 1664525*LastRandomCntr + 1013904223 - ((1664525*LastRandomCntr + 1013904223) / 2147483647)*2147483647;
result := longInt(abs(LastRandomCntr - (LastRandomCntr/Range)*Range));
}
//функция генерации случайной даты между датами DateBegin и DateEnd включительно
function NextRandomDate(DateBegin: date; DateEnd: date): date;
{
result := Add_Day(DateBegin, NextRandomNumber(longInt(DateEnd) - longInt(DateBegin) + 1));
}
//функция генерации случайной последовательности
//букв русского алфавита и цифр длиною CodeLength
function NextRandomCode(CodeLength: longInt): string;
{
var SymbolNum: longInt;
var ResultCode: string;
ResultCode := '';
for(SymbolNum := 1; SymbolNum <= CodeLength; SymbolNum++)
ResultCode := ResultCode + Symbols[NextRandomNumber(Length(Symbols)) + 1];
result := ResultCode;
}
//функция генерации случайной буквы русского алфавита
//если LetterType = 0 генерируется случайная гласная буква
//если LetterType = 1 генерируется случайная согласная буква
function NextRandomLetter(LetterType: integer): char;
{
case LetterType of
0: result := VowelLetters[NextRandomNumber(NextRandomNumber(Length(VowelLetters)) + 1) + 1];
1: result := ConsonantLetters[NextRandomNumber(NextRandomNumber(NextRandomNumber(Length(ConsonantLetters)) + 1) + 1) + 1];
else result := Chr(0);
end;
}
//функция генерации слога из случайных букв
//если SyllableType = 0, то слог будет двухбуквенный
//в 30% случаев он будет вида гс (где г - гласная буква, с - согласная),
//в 70% случаев - вида сг.
//если SyllableType = 1, то слог будет трехбуквенный вида сгс
function NextRandomSyllable(SyllableType: integer): string;
{
case SyllableType of
0:
{
case NextRandomNumber(100000) mod 10 of
0..2: result := NextRandomLetter(0) + NextRandomLetter(1);
3..9: result := NextRandomLetter(1) + NextRandomLetter(0);
end;
}
1: result := NextRandomLetter(1) + NextRandomLetter(0) + NextRandomLetter(1);
else result := '';
end;
}
//функция генерации слова из слогов
//с разными вероятностями генерируются слова из двух слогов (4-, 5- либо 6-буквенные)
//или из трех слогов (6- либо 7-буквенные)
function NextRandomWord: string;
{
case longInt(abs(NextRandomNumber(100000))) mod 100 of
0..11: result := NextRandomSyllable(0) + NextRandomSyllable(0);
12..23: result := NextRandomSyllable(1) + NextRandomSyllable(0) + NextRandomSyllable(0);
24..44: result := NextRandomSyllable(0) + NextRandomSyllable(1);
45..52: result := NextRandomSyllable(0) + NextRandomSyllable(1) + NextRandomSyllable(0);
53..73: result := NextRandomSyllable(1) + NextRandomSyllable(0);
74..85: result := NextRandomSyllable(0) + NextRandomSyllable(0) + NextRandomSyllable(1);
86..91: result := NextRandomSyllable(1) + NextRandomSyllable(1);
92..99: result := NextRandomSyllable(0) + NextRandomSyllable(0) + NextRandomSyllable(0);
end;
}
//функция генерации предложения из слов
//количество слов в предложении - случайное число от 1 до 40.
function NextRandomText: string;
{
var WordCount: longInt;
var WordNum: longInt;
var ResultText: string;
ResultText := '';
WordCount := NextRandomNumber(40) + 1;
for(WordNum := 1; WordNum <= WordCount; WordNum++)
ResultText := ResultText + NextRandomWord + ' ';
result := ResultText;
}
End.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 16 фев 2012, 16:02
m0p3e
Насчет GUID-ов это очень хорошая идея.
В MSSQL есть функция NEWID(). Вызыввые прямым скулем и пользуемся результатом.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 16 фев 2012, 20:14
Darikon
m0p3e писал(а):Насчет GUID-ов это очень хорошая идея.
В MSSQL есть функция NEWID(). Вызыввые прямым скулем и пользуемся результатом.
взял на вооружение вашу идею.
Re: как включить случайное формирование nrec в БД на MS SQL?
Добавлено: 17 фев 2012, 12:43
Alpiton
У меня есть DLL (7 kb), с помощью которой можно вызвать паскалевские randomize и random. Если надо, могу выслать.