как включить случайное формирование nrec в БД на MS SQL?
Модераторы: m0p3e, edward_K, Модераторы
-
- Постоянный обитатель
- Сообщения: 188
- Зарегистрирован: 17 июн 2008, 17:07
- Откуда: Москва
- Контактная информация:
как включить случайное формирование nrec в БД на MS SQL?
Народ, поможите! )
как переключить последовательный инкремент на псевдослучайное формирование nrec в БД на MS SQL?
делал сам когда то (года четыре назад и именно на MS SQL ). сейчас или не помню откуда делал или убрали из функционала, не пойму.
очень нужно.
как переключить последовательный инкремент на псевдослучайное формирование nrec в БД на MS SQL?
делал сам когда то (года четыре назад и именно на MS SQL ). сейчас или не помню откуда делал или убрали из функционала, не пойму.
очень нужно.
Re: как включить случайное формирование nrec в БД на MS SQL?
На сколько я понимаю, есть два случая формирования nrec: средствами галактики и внешними средствами.Darikon писал(а):Народ, поможите! )
как переключить последовательный инкремент на псевдослучайное формирование nrec в БД на MS SQL?
делал сам когда то (года четыре назад и именно на MS SQL ). сейчас или не помню откуда делал или убрали из функционала, не пойму.
очень нужно.
В первом случае Nrec выдает Nap Server.
Во втором триггеры.
Для первого случая, как я понимаю, в конфиге в секции DataBase можно прописать RandomSurrKeys=ON.
Во втором случае надо смотреть как работает триггер.
-
- Постоянный обитатель
- Сообщения: 188
- Зарегистрирован: 17 июн 2008, 17:07
- Откуда: Москва
- Контактная информация:
Re: как включить случайное формирование nrec в БД на MS SQL?
меня вот в этом ключе RandomSurrKeys остановило то, что в документации везде прописано, что это только для первазива, да и у самого в памяти осталось так, что вроде переключал через фейсы какие то.Для первого случая, как я понимаю, в конфиге в секции DataBase можно прописать RandomSurrKeys=ON.
Во втором случае надо смотреть как работает триггер.
а как работает второй случай - я знаю )
Re: как включить случайное формирование nrec в БД на MS SQL?
Точно... извинтиляюсь =)Darikon писал(а):меня вот в этом ключе RandomSurrKeys остановило то, что в документации везде прописано, что это только для первасива
Re: как включить случайное формирование nrec в БД на MS SQL?
Код: Выделить всё
BlaBLa.nRec := 0; // или GetNextNRec, но лучше не юзать
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Re: как включить случайное формирование nrec в БД на MS SQL?
Алгоритм случайной генерации Nrec-ов мог быть влкючен только в драйвере Первасива.
В MS SQL, Oracle (теперь еще и в PostgreSQL) только по порядку.
В MS SQL, Oracle (теперь еще и в PostgreSQL) только по порядку.
-
- Постоянный обитатель
- Сообщения: 188
- Зарегистрирован: 17 июн 2008, 17:07
- Откуда: Москва
- Контактная информация:
Re: как включить случайное формирование nrec в БД на MS SQL?
спасибо за ответ. а жаль.. удобный генератор был ))LaaLaa писал(а):Алгоритм случайной генерации Nrec-ов мог быть влкючен только в драйвере Первасива.
В MS SQL, Oracle (теперь еще и в PostgreSQL) только по порядку.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: как включить случайное формирование nrec в БД на MS SQL?
пользуйтесь номером офисса - в nrec он присутсвует. В конце концов в любой базе вы можете работать от имени пользователя другого офисса.
Re: как включить случайное формирование nrec в БД на MS SQL?
А вам, что просто функция генерации случайных чисел нужна?
-
- Постоянный обитатель
- Сообщения: 188
- Зарегистрирован: 17 июн 2008, 17:07
- Откуда: Москва
- Контактная информация:
Re: как включить случайное формирование nrec в БД на MS SQL?
нужен длинный шестнадцатеричный код. цель заказчика - видеть его в фейсе и в квитанции(числом и штрихкодом). чтобы значит, проверять честность плательщика. говорят, были инциденты.
чтобы не заморачиваться своим кодом и местом хранения, хотел воспользоваться стандартным функционалом ))
именно длинный и шестнадцатеричный хочет заказчик.
чтобы не заморачиваться своим кодом и местом хранения, хотел воспользоваться стандартным функционалом ))
именно длинный и шестнадцатеричный хочет заказчик.
Re: как включить случайное формирование nrec в БД на MS SQL?
Воспользуйтесь GUID-ами http://ru.wikipedia.org/wiki/GUID
Re: как включить случайное формирование nrec в БД на MS SQL?
Возможно вам пригодится объектный интерфейс для генерации псевдослучайных значений
RandomGenerator.vih
RandomGenerator.vip
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
Код: Выделить всё
#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?
Насчет GUID-ов это очень хорошая идея.
В MSSQL есть функция NEWID(). Вызыввые прямым скулем и пользуемся результатом.
В MSSQL есть функция NEWID(). Вызыввые прямым скулем и пользуемся результатом.
-
- Постоянный обитатель
- Сообщения: 188
- Зарегистрирован: 17 июн 2008, 17:07
- Откуда: Москва
- Контактная информация:
Re: как включить случайное формирование nrec в БД на MS SQL?
взял на вооружение вашу идею.m0p3e писал(а):Насчет GUID-ов это очень хорошая идея.
В MSSQL есть функция NEWID(). Вызыввые прямым скулем и пользуемся результатом.
Re: как включить случайное формирование nrec в БД на MS SQL?
У меня есть DLL (7 kb), с помощью которой можно вызвать паскалевские randomize и random. Если надо, могу выслать.