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

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

Функция в MSSQL2000 [D7, XP]


Страницы:   1 2

deras ©   (2008-05-30 01:34:00) 

Описание. Есть таблица: ID, ContrNum (int), Name
Задача.
Создать функцию, которая возвращает номер контракта (ContrNum = ID + 100000), предварительно проверив, нет ли такого номера контр. в таблице.

Спасибо


Palladin   (2008-05-30 13:58:00) [21]


> deras   (30.05.08 13:55) [19]

так выбирай максимально существующий номер+1 из таблицы и показывай предварительно, раз абсолютно не критично, что он поменяется...


deras   (2008-05-30 13:55:00) [22]


> 4. А по уму это всё бред, почему нельзя сделать номер контракта=ID?


а разве это меняет суть? Вот вывел я форму. Что я должен показать в поле "Номер контракта", если контракт еще не сохранен? А показать что-то надо. Пускай даже предварительный номер, который может при сохранении измениться "10 раз" (цит.) ID показывать или ID + 100000 - суть не поменяется.
Бред или не бред, а сделать-то надо


Palladin   (2008-05-30 13:53:00) [23]


> не ну человек просто настаивает чтобы номер контракта зависел
> от ID, вот я и предлагаю

так если он зависит от ID, а ID это PK, на кой черт свистопляски с ID+100000 ? ведь ID+100000 тоже PK и тоже уникален, зачем функция?


> Ega23 ©   (30.05.08 13:48) [17]

это никак не решает проблему с предпросмотром номера незафиксированного контракта


Ega23   (2008-05-30 13:48:00) [24]

Простой совет: хоть номер контракта и является семантически ключевым полем, делать его таковым не стоит.
Введи "суррогатный" ключ ( ContractID int Identity (1,1)) и поле номер контракта ( ContractNr varchar(255)) с уникальным индексом.
По опыту: номер контракта - штука сложная. Это может быть, к примеру,
ФДС № 05.2008/174
где ФДС - общий шифр документов (какая-нибудь Федеральная Дорожная Служба), 05.2008 - период за май 2008 года, а 174 - порядковый номер документа, относящегося к ФДС, сделанного в мае 2008.


Azize   (2008-05-30 13:47:00) [25]


> Palladin ©   (30.05.08 13:37) [15]

не ну человек просто настаивает чтобы номер контракта зависел от ID, вот я и предлагаю

> сделать номер контракта=ID?


> бо как сказал RME никакого функционала он не несет так как
> может на 10 раз поменятся...

мне кажется, что паренёк делает лабу или курсак поэтому номер контракта у него меняться не будет


Palladin   (2008-05-30 13:37:00) [26]


> Azize ©   (30.05.08 13:34) [14]
> 4. А по уму это всё бред, почему нельзя сделать номер контракта=ID?

потому что, показывать предварительный номер незафиксированного контракта это тоже бред, бо как сказал RME никакого функционала он не несет так как может на 10 раз поменятся...


Azize   (2008-05-30 13:34:00) [27]

смотря как у тебя генерируется ID это раз
2. если у тебя все записи в таблице подвержены такому правилу как ты описал, то ты просто не сможешь добавить эту запись ID совпадёт
3. исходя из 2. если ID генерируется случайно, просто генерируй его до того как открывается форма и ставь проверку на существование ID, если существует генерируй по новой
4. А по уму это всё бред, почему нельзя сделать номер контракта=ID?


Palladin   (2008-05-30 13:21:00) [28]


> Оч. прошу без неприятных шуток - все когда-то начинали

если ты считаешь себя начинающим, то я папа римский. пока непонятно, что ты хочешь конкретно.

кода?  - какого?
мыслей? - все уже сказали.


> ф-ция должна вернуть номер контракта, которго нет в БД

твои слова: "номер контракта сделать ContrNum = ID + 100000" и тут же говоришь "номер контракта которого нет в БД", но если есть ContrNum=ID+100000, то что же должна она вернуть? откуда вообще взялось это "магическое" +100000 ? почему не мильен?


deras   (2008-05-30 13:13:00) [29]


> Palladin ©   (30.05.08 13:01) [10]

да, оч. плохо знаю SQL.


> Palladin ©   (30.05.08 13:03) [11]

ф-ция должна вернуть номер контракта, которго нет в БД


Palladin   (2008-05-30 13:03:00) [30]

... а идея, кстати, порочна по сути своей да ты так и не определился с тем, что же должна вернуть функция если все таки номер существует...


Palladin   (2008-05-30 13:01:00) [31]

а в чем же конкретно то затруднения? SQL не знаешь? ну так возьми да узнай, почитай что нибудь про него.


deras   (2008-05-30 12:54:00) [32]


> Stas ©   (30.05.08 12:28) [7]

проблема в том, что
нвдо знать  ID для этой записи (запись еще не сохранена), чтоб ном. нового контракта сделать ContrNum = ID + 100000. Но в момент сохранения опять проверить, нет ли такого номера контракта.
Т.е. схема такова: показали форму, есть 2 едита (1 - для ном. контракта, он Enable=false и в нем должен стоять предварительный номер контракта; 2- для ввода названия). После ввода названия, делаем insert записи, но перед этим проверить, нет ли уже такого названия в БД. Так вот проверить надо этой самой функцией. Она же и должна вернуть номер провереного контракта. Надо реализовать именно функцией MSSQL.
Оч. прошу без неприятных шуток - все когда-то начинали


DiamondShark   (2008-05-30 12:53:00) [33]


> Создать функцию, которая возвращает номер контракта (ContrNum
> = ID + 100000), предварительно проверив, нет ли такого номера
> контр. в таблице.

Создать -- как два пальца об асфальт.
Беда в том, что значение, возвращаемое функцией, абсолютно не пригодно к какому-либо осмысленному использованию.
А если так, то нафига функция?


Stas   (2008-05-30 12:28:00) [34]

Ну а в чем проблема?
как создаь функцию?

Create function fmyfunction ()
returns int
as
begin
return...
end


Плохиш   (2008-05-30 10:29:00) [35]


> deras   (30.05.08 01:34)  

Спасибо за описание, но мне лабораторные и контрольные уже не нужны.


Palladin   (2008-05-30 10:26:00) [36]

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


ЮЮ   (2008-05-30 04:06:00) [37]

> предварительно проверив, нет ли такого номера контр. в таблице.

И что делать функции в этом случае?


Германн   (2008-05-30 02:17:00) [38]


> deras   (30.05.08 02:02) [2]
>
>
> > Германн ©   (30.05.08 01:45) [1]
>
> а посерйезней
>
Посерйёзней. Хм. Кто бы мне сказал что это слово значит?

P.S. А вопрос то какой?


deras   (2008-05-30 02:02:00) [39]


> Германн ©   (30.05.08 01:45) [1]

а посерйезней


Германн   (2008-05-30 01:45:00) [40]


> Функция в MSSQL2000 [D7, XP]
>
> deras   (30.05.08 01:34)
>
> Описание. Есть таблица: ID, ContrNum (int), Name
> Задача.
> Создать функцию, которая возвращает номер контракта (ContrNum
> = ID + 100000), предварительно проверив, нет ли такого номера
> контр. в таблице.
>
> Спасибо
>

Да не за что.


Страницы:   1 2

Наверх

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