![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В selecte обработать строку. [D7, Firebird]
worldmen © (2006-08-22 12:40:00)Использую Firebird, локальный, и IBExpert.
Есть таблица клиентов, в ней фамилии имя и отчество полностью в отдельных полях.
Нужно что бы фамилия имя отчество выводилось в таком формате : Иванов И.И.
Т.е. имя отчество было сокращенным.
Я не нашел такой функции в Firebirdе.
worldmen (2006-08-22 17:22:00) [1]> Сергей М. © (22.08.06 16:43) [29]
Спасибо.
Сергей М. (2006-08-22 16:43:00) [2]
> worldmen © (22.08.06 16:15) [28]
На ibase.ru уже был ? Там есть предостаточно инф-ции о UDF: что это такое, с чем едят и т.д. и т.п.
worldmen (2006-08-22 16:15:00) [3]СПАСИБО. С substring разобрался.
А вот насчет UDF-библиотек просветите.
Никогдо не использовал. Я перепутал с ХП.
Виталий Панасенко (2006-08-22 15:33:00) [4]computed by(fam||substring(im from 1 for 1)||'.'||substring(ot from 1 for 1)||'.')?
Сергей М. (2006-08-22 15:04:00) [5]
> Val © (22.08.06 14:53) [21]
>
> не к данному случаю.
А ты замерь производительность PSQL-функции SubString и соответствующих ее аналогов в UDF или на клиенте (на достаточно большом НД) - сразу все встанет на свои места) .. А потом я объясню, почему наблюдается такая ощутимая разница в результатах замеров.
> yaral © (22.08.06 14:56) [22]
> Наример обрабатывает и преобразует данные?
Все зависит от условий, в которых будет востребованы обработка и преобразование.
Dok (2006-08-22 15:02:00) [6]
> Все что сервер делает плохо (точнее - хуже клиента), клиенту
> не нужно)
золотые слова :)
Dok (2006-08-22 15:01:00) [7]
> Дело твое, только вот постоянно делать это там где потребуется.
> .. это только в простых приложениях на таблицу клиентов
> используется один DataSet.
> В чуть посложней оно часто нужно такое поле. И в сетках,
> и в Edit-ах, и в отчетах всевозможных, и что везде делать
> из трех полей? Заняться нечем больше?
не понял. Как три поля этому мешают? Ну сделай на клиенте конкатенацию и покажи юзверю. В чем трабл? А заставлять сервер парсить, то что с клиента и дет, когда клиент это может во много раз лучше - нефиг.
Dok (2006-08-22 14:59:00) [8]
> все что делает сервер, нужно клиенту - посоветуете все на
> клиенте и лопатить? :)
>
почитайте внимательно [6]
yaral (2006-08-22 14:56:00) [9]> Сергей М. © (22.08.06 14:52) [20]
Наример обрабатывает и преобразует данные?
Val (2006-08-22 14:53:00) [10]не к данному случаю.
Сергей М. (2006-08-22 14:52:00) [11]
> все что делает сервер, нужно клиенту
Все что сервер делает плохо(точнее - хуже клиента), клиенту не нужно)
Val (2006-08-22 14:43:00) [12]>[14] Dok (22.08.06 14:11)
все что делает сервер, нужно клиенту - посоветуете все на клиенте и лопатить? :)
yaral (2006-08-22 14:41:00) [13]> Dok (22.08.06 14:26) [17]
Дело твое, только вот постоянно делать это там где потребуется... это только в простых приложениях на таблицу клиентов используется один DataSet.
В чуть посложней оно часто нужно такое поле. И в сетках, и в Edit-ах, и в отчетах всевозможных, и что везде делать из трех полей? Заняться нечем больше?
Dok (2006-08-22 14:26:00) [14]
> yaral © (22.08.06 14:19) [16]
Мдя... А чуток подумать и сделать 3 поля? И потом если надо на клиенте конкатенацию сделать?
yaral (2006-08-22 14:19:00) [15]А кто сказал что клиент может быть только один? Да и вообще в каждом НД, там где это может понадобиться, все это формировать? Один раз написал на сервере и забыл, и пользуешь везде где это поле нужно.
Я тригер написал который в отдельное поле заносит фамилию и инициалы, при внесении и изменении записи, т.к. постоянно грузить сервер вычислениями не хочеться, а такое поле много место не займет.
CREATE TRIGGER PERSPHI_IU FOR PERSPHI
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
AS
DECLARE VARIABLE VLINI VARCHAR(30);
DECLARE VARIABLE VLFS VARCHAR(100);
BEGIN
VLINI = '';
VLFS = '';
IF (NOT NEW.L IS NULL) THEN
BEGIN
NEW.L=F_LTRIM(F_RTRIM(NEW.L));
IF (NEW.L<>'') THEN
BEGIN
NEW.L = UPPERFIRST(NEW.L);
VLINI = NEW.L;
VLFS = NEW.L;
END
END
IF (NOT NEW.F IS NULL) THEN
BEGIN
NEW.F=F_LTRIM(F_RTRIM(NEW.F));
IF (NEW.F<>'') THEN
BEGIN
NEW.F = UPPERFIRST(NEW.F);
IF (:VLINI<>'') THEN
BEGIN
VLINI = :VLINI || ' ' || F_LEFT(NEW.F, 1) || '.';
VLFS = :VLFS || ' ' || NEW.F;
END
END
END
IF (NOT NEW.S IS NULL) THEN
BEGIN
NEW.S=F_LTRIM(F_RTRIM(NEW.S));
IF (NEW.S<>'') THEN
BEGIN
NEW.S = UPPERFIRST(NEW.S);
IF ((:VLINI<>'') AND (NEW.F<>'')) THEN
VLINI = :VLINI || F_LEFT(NEW.S, 1) || '.';
VLFS = :VLFS || ' ' || NEW.S;
END
END
UPDATE PERS
SET SNAME = :VLINI,
NAME = :VLFS
WHERE PERS_ID = NEW.PERS_ID;
END
F_LTRIM и прочие из FreeUDF
atruhin (2006-08-22 14:14:00) [16]Вообще начиная с FB 1.5, SUBSTRING - работает.
Dok (2006-08-22 14:11:00) [17]
> я спрашиваю - зачем заниматься этой ерундой на клиенте,
> если это, обработанное соответственно, поле можно просто
> добавить в обзор, который и будет отображать форма?
потому что эта ерунда нужна клиенту. серверу нефиг этим заниматься.
Val (2006-08-22 14:08:00) [18]тогда уж - вашого...
я спрашиваю - зачем заниматься этой ерундой на клиенте, если это, обработанное соответственно, поле можно просто добавить в обзор, который и будет отображать форма?
Dok (2006-08-22 13:58:00) [19]Вашэ пытання
Val (2006-08-22 13:46:00) [20]>[10] Dok (22.08.06 13:37)
чего именно?