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

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

Печать справок [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)
>
> Есть БД студентов, ФИО написаны как Иванов Иван Иванович,
>  нужно чтобы печаталась справка автоматически заполняя ФИО,
>  меняя окончания (например  справка Дана Иванову Ивану Ивановичу.
> ....). Можно ли так сделать?
>

Добавить в таблицу ещё одно поле, в которое внести ФИО в виде Иванову Ивану Ивановичу.


Наверх

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