Перейти к публикации
forum-okna.ru

Рекомендованные сообщения

Опубликовано:

Периодически приходится писать знакомым сложные отчеты ... давно хотел такую вещь и наконец нашел и дописал.
Очень надеюсь, что она поможет не только мне.

В тексте пример процедуры ( запуск через ibexpert) которая позволяет искать все вхождения текста во все таблицы базы.

Те, кто реально писал отчеты, знает что найти нетривиальную информацию в "схеме"  очень и очень непросто.
Первый раз что то подобное мне понадобилось на моей основной работе, там используем MS SQL.
В результате   был написан скрипт, который выполняет эту задачу.
После этого, захотелось что то "эдакое"  и для Firebird .
В результате достаточно долго искал "идею", тем более что комьюнити fb несколько своеобразно :ph34r:.
Но вот и итог - идея найдена на просторах интернета и процедура капитально доработана.

Кому она станет интересна - тем, кто пользуется ibexpert и любит(или не любит но надо) делать нестандартные отчеты.
Привожу код процедуры и  видео ее использования.
По тестам работает на FB 2.1, 2.5   (её можно использовать далеко не только для ПС4 )

Код процедуры
character_set_id <> 4 - тут отрезаем юникодные поля.  При поиске по ним русских символов была ошибка.
Текст не ищем  по служебным таблицам с $
Также прилагаю видео  https://www.youtube.com/watch?v=h_93UU8jWQI

Очень надеюсь, что данная идея будет полезной

Код процедуры , можно скачать текстом...
 

SET TERM ^ ;

create or alter procedure dvim_SEARCH (
SEARCHPARAM varchar(100))
returns (
RESULT varchar(2000))
as
declare variable SQL varchar(1000);
declare variable TNAME varchar(32);
declare variable FNAME varchar(32);
declare variable FTYPE smallint;
begin
for select rdb$relations.rdb$relation_name from rdb$relations
where not rdb$relations.rdb$relation_name like '%$%'
into :tname
do begin
for select rdb$relation_fields.rdb$field_name,rdb$fields.rdb$field_type
from rdb$relation_fields
join rdb$fields on (rdb$relation_fields.rdb$field_source=rdb$fields.rdb$field_name)
where rdb$relation_fields.rdb$relation_name=:tname and rdb$fields.rdb$field_type in (35,37) /char and varchar/
and rdb$fields.rdb$character_set_id <> 4
into :fname,:ftype
do begin
SQL='SELECT ' || FNAME || ' || '' table ' || TNAME || ' column ' || FNAME ||''' FROM '||TNAME||' WHERE '||FNAME||' LIKE ''%' || SEARCHPARAM || '%''';
for execute statement SQL into :RESULT
--- RESULT = sql || ' union all' ;

    do

        suspend;
     end
end

end^

SET TERM ; ^

 

  • Like 1


Оконный портал tybet.ru | Подписка на новости | Бесплатные объявления | Наша телега | База оконных знаний | ОНЛАЙН-ВЫСТАВКА



Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

Условия и правила использования форума Правила.