![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Печать справок [D7, Paradox]
Инна © (2008-04-04 20:22:00)Есть БД студентов, ФИО написаны как Иванов Иван Иванович, нужно чтобы печаталась справка автоматически заполняя ФИО, меняя окончания (например справка Дана Иванову Ивану Ивановичу.....). Можно ли так сделать?
Kolan (2008-04-09 10:58:00) [1]> Но функцию с именем
Наверно автору не понравился перевод (case)
clickmaker (2008-04-09 10:51:00) [2]
> жесть, интересно, работет без глюков?
да нет, конечно. Вообще не работает. Просто настроение такое сегодня
brother (2008-04-09 10:41:00) [3]про [11] жесть, интересно, работет без глюков? ) тестить пока за ненадобностью, но вот реализация....
Jeer (2008-04-09 10:02:00) [4]Это сколько ж надо было выкурить и чего:)
Ega23 (2008-04-09 09:53:00) [5]
> clickmaker © (09.04.08 09:50) [11]
Как интересно...
clickmaker (2008-04-09 09:50:00) [6]/* Возвращает склоненные имя, фамилию, отчество.
@Case - падеж: 0 - именительный, 1 - винительный, 2 - дательный, 3 -
родительный */
create procedure Employee_GetFullNameEx
(
@Object_ID int,
@Case smallint,
@Value varchar(255) out
)
as begin
set nocount on
declare @RetCode int, @Name varchar(64), @FirstName varchar(64),
@Patronymic varchar(64), @Gender char(1), @Len int, @Ending varchar(4)
-- Именительный
if @Case = 0
begin
exec @RetCode = Employee_GetFullName @Object_ID, @Value out
end else begin
select @Name = Name, @FirstName = FirstName, @Patronymic = Patronymic,
@Gender = Gender
from Employee where Object_ID = @Object_ID
-- Винительный
if @Case = 1
begin
-- Мужики
if @Gender = 'М'
begin
select @Len = len(@Name)
select @Ending = substring(@Name, @Len-1, 2)
select @Ending =
(case
when @Ending in ('ий','ой') then 'ого'
when @Ending = 'ец' then (case when substring(@Name, @Len-2,
1)='и' then 'йца' else 'ца' end)
when @Ending = 'ко' then 'ко'
when @Ending = 'ок' then 'ка'
else (case when substring(@Ending, 2, 1) in ('ь','й') then
substring(@Ending, 1, 1)+ 'я'
when substring(@Ending, 2, 1) = 'а' then @Ending
else @Ending + 'а' end)
end)
select @Name = substring(@Name, 1, @Len-2) + @Ending
if @FirstName is not null
begin
select @Len = len(@FirstName)
select @Ending = substring(@FirstName, @Len, 1)
select @Ending =
(case
when @Ending in ('й','ь') then 'я'
when @Ending = 'я' then 'ю'
else @Ending + 'а'
end)
select @FirstName = substring(@FirstName, 1, @Len-1) + @Ending
end
if @Patronymic is not null
begin
select @Patronymic = @Patronymic + 'а'
end
-- Тетки
end else begin
select @Len = len(@Name)
select @Ending = substring(@Name, @Len-1, 2)
select @Ending =
(case
when @Ending in ('ва','на') then substring(@Ending, 1, 1) + 'у'
when @Ending = 'ая' then 'ую'
else @Ending
end)
select @Name = substring(@Name, 1, @Len-2) + @Ending
if @FirstName is not null
begin
select @Len = len(@FirstName)
select @Ending = substring(@FirstName, @Len, 1)
select @Ending =
(case
when @Ending = 'а' then 'у'
when @Ending = 'я' then 'ю'
else @Ending
end)
select @FirstName = substring(@FirstName, 1, @Len-1) + @Ending
end
if @Patronymic is not null
begin
select @Patronymic = substring(@Patronymic, 1, Len(@Patronymic)-1) + 'у'
end
end
select @Value = @Name + isnull(SPACE(1) +@FirstName, '') +
isnull(SPACE(1) + @Patronymic, '')
end else
-- Дательный
if @Case = 2
begin
-- Мужики
if @Gender = 'М'
begin
select @Len = len(@Name)
select @Ending = substring(@Name, @Len-1, 2)
select @Ending =
(case
when @Ending in ('ий','ой') then 'ому'
when @Ending = 'ец' then (case when substring(@Name, @Len-2,
1)='и' then 'йцу' else 'цу' end)
when @Ending = 'ко' then 'ко'
when @Ending = 'ок' then 'ку'
else (case when substring(@Ending, 2, 1) in ('ь','й') then
substring(@Ending, 1, 1)+ 'ю'
when substring(@Ending, 2, 1) = 'а' then @Ending
else @Ending + 'у' end)
end)
select @Name = substring(@Name, 1, @Len-2) + @Ending
if @FirstName is not null
begin
select @Len = len(@FirstName)
select @Ending = substring(@FirstName, @Len, 1)
select @Ending =
(case
when @Ending in ('й','ь') then 'ю'
when @Ending = 'я' then 'е'
else @Ending + 'у'
end)
select @FirstName = substring(@FirstName, 1, @Len-1) + @Ending
end
if @Patronymic is not null
begin
select @Patronymic = @Patronymic + 'у'
end
-- Тетки
end else begin
select @Len = len(@Name)
select @Ending = substring(@Name, @Len-1, 2)
select @Ending =
(case
when @Ending in ('ва','на') then substring(@Ending, 1, 1) + 'ой'
when @Ending = 'ая' then 'ой'
else @Ending
end)
select @Name = substring(@Name, 1, @Len-2) + @Ending
if @FirstName is not null
begin
select @Len = len(@FirstName)
select @Ending = substring(@FirstName, @Len, 1)
select @Ending =
(case
when @Ending in ('а','я') then
(case when substring(@FirstName, @Len-1, 1) = 'и' then 'и' else
'е' end)
else @Ending
end)
select @FirstName = substring(@FirstName, 1, @Len-1) + @Ending
end
if @Patronymic is not null
begin
select @Patronymic = substring(@Patronymic, 1, Len(@Patronymic)-1) + 'е'
end
end
select @Value = @Name + isnull(SPACE(1) +@FirstName, '') +
isnull(SPACE(1) + @Patronymic, '')
end else
-- Родительный
begin
-- Мужики
if @Gender = 'М'
begin
select @Len = len(@Name)
select @Ending = substring(@Name, @Len-1, 2)
select @Ending =
(case
when @Ending in ('ий','ой') then 'ого'
when @Ending = 'ец' then (case when substring(@Name, @Len-2,
1)='и' then 'йца' else 'ца' end)
when @Ending = 'ко' then 'ко'
when @Ending = 'ок' then 'ка'
else (case when substring(@Ending, 2, 1) in ('ь','й') then
substring(@Ending, 1, 1)+ 'я'
when substring(@Ending, 2, 1) = 'а' then @Ending
else @Ending + 'а' end)
end)
select @Name = substring(@Name, 1, @Len-2) + @Ending
if @FirstName is not null
begin
select @Len = len(@FirstName)
select @Ending = substring(@FirstName, @Len, 1)
select @Ending =
(case
when @Ending in ('й','ь') then 'я'
when @Ending = 'я' then 'ю'
else @Ending + 'а'
end)
select @FirstName = substring(@FirstName, 1, @Len-1) + @Ending
end
if @Patronymic is not null
begin
select @Patronymic = @Patronymic + 'а'
end
-- Тетки
end else begin
select @Len = len(@Name)
select @Ending = substring(@Name, @Len-1, 2)
select @Ending =
(case
when @Ending in ('ва','на') then substring(@Ending, 1, 1) + 'ой'
when @Ending = 'ая' then 'ой'
else @Ending
end)
select @Name = substring(@Name, 1, @Len-2) + @Ending
if @FirstName is not null
begin
select @Len = len(@FirstName)
select @Ending = substring(@FirstName, @Len, 1)
select @Ending =
(case
when @Ending = 'а' then 'ы'
when @Ending = 'я' then 'и'
else @Ending
end)
select @FirstName = substring(@FirstName, 1, @Len-1) + @Ending
end
if @Patronymic is not null
begin
select @Patronymic = substring(@Patronymic, 1, Len(@Patronymic)-1) + 'ы'
end
end
select @Value = @Name + isnull(SPACE(1) +@FirstName, '') +
isnull(SPACE(1) + @Patronymic, '')
end
end
return @RetCode
end
Германн (2008-04-09 00:36:00) [7]
> Игорь Шевченко © (08.04.08 22:47) [9]
Эт точно!
Не, ну блин. Либо только транслит, либо только английский.
Тело содрогалось в судорогах в течение минуты (как минимум) после прочтения имени сей функции. Сколько будет в будущем рецидивов таких судорог пока даже представить трудно. :)
Как вспомнишь, так вздрогнешь. (с) Народная мудрость.
Игорь Шевченко (2008-04-08 22:47:00) [8]Простой (08.04.08 21:26) [8]
Охотно верю, что статья неплохая.
Но функцию с именем GetFullAppointmentPadegя не буду использовать никогда. Потому что как вы лодку назовете, так она и поплывет.
Простой (2008-04-08 21:26:00) [9]Прочитай эту статью http://www.delphikingdom.com/asp/viewitem.asp?catalogid=412"Склонение фамилий, имен и отчеств по падежам Библиотека функций".
Скачай библиотечку, скачай примеры использования. Очень мощная библиотека. Использую давно, устраивает для твоего вопроса на все 100%.
Удачи
Сергей М. (2008-04-04 21:32:00) [10]А... понял)
Ему любой падеж по)
Сергей М. (2008-04-04 21:30:00) [11]Не соображу - ему в каком падеже неуютно ?)
Johnmen (2008-04-04 21:24:00) [12]А Донг По?
Сергей М. (2008-04-04 21:15:00) [13]Бедный-бедный студент Су Ху !
easy (2008-04-04 20:45:00) [14]или Приходько Петра?
easy (2008-04-04 20:43:00) [15]
showmessage(stringreplace('Иванов Иван Иванович',' ','у ',[rfreplaceall])+'у');
вот только Иванову Ирину Ивановну куда девать? :|
Германн (2008-04-04 20:38:00) [16]
> Инна (04.04.08 20:22)
>
> Есть БД студентов, ФИО написаны как Иванов Иван Иванович,
> нужно чтобы печаталась справка автоматически заполняя ФИО,
> меняя окончания (например справка Дана Иванову Ивану Ивановичу.
> ....). Можно ли так сделать?
>
Добавить в таблицу ещё одно поле, в которое внести ФИО в виде Иванову Ивану Ивановичу.