Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизДинамическое создание таблиц Найти похожие ветки
← →
YurikGL © (2004-06-26 19:45) [0]В процессе формирования отчета появилась необходимость динамически создавать таблицу, которую заполняет рекурентная функция. Проблема в том, как подобрать имя таблицы так, что-бы с разных компьтеров создавались таблицы под разными именами. На данный момент в имя таблицы простоа вставляю имя пользователя и имя компьтера.
Может существуют другие более корректные способы?
← →
Anatoly Podgoretsky © (2004-06-26 19:52) [1]<ComputerName>+X
← →
YurikGL © (2004-06-26 20:02) [2]
> Anatoly Podgoretsky ©
В принципер, так и делаю. Проблема в том, что в имени компьютера могут содержаться символы, которые недопустимы в имени таблицы, приходится их исключать.
Хотел узнать, может в самом IB (пользую в качестве сервера FB 1.5) есть подобные функции генерации имени таблицы или существует другое "классическое" решение проблемы.
← →
YurikGL © (2004-06-26 20:05) [3]Кстати, с одного компьютера потенциально под разными сеансами могут работать два пользователя :)
← →
Anatoly Podgoretsky © (2004-06-26 20:16) [4]YurikGL © (26.06.04 20:02) [2]
Нет в принципе ты делаешь не так, UserName<>ComputerName
Пользователь может работать более чем с одной машины одновременно.
По именам нет разницы, более того у имени пользователя вероятность недопустимых символов больше.
Если нужна юольшая уникальность, то <ComputerName>+<UserName>+Random
В конце концов в последнее время у микрософта принять использовать для таких целей GUID
← →
Romkin © (2004-06-26 20:18) [5]Вот чего бы я не советовал, так это динамически менять метаданные. Они кешируются, и неприятностей может быть много.
Если так уж понадобились временные таблицы, то их можно эмулировать, используя генератор
http://www.ibase.ru/devinfo/generator.htm#extra
← →
YurikGL © (2004-06-26 20:19) [6]
> Anatoly Podgoretsky © (26.06.04 20:16) [4]
Я делаю Trnas(ИмяПользователя+ИмяКомпьютера)+Random где Truns транслитерирует русские буквы в английские и удаляет недопустимые символы.
Но ИМХО это все равно не корректный способ.
← →
YurikGL © (2004-06-26 20:22) [7]А генератор это - идея.
Другой идей была работа с локальной базой Access в которой и создается временная таблица, но возникла проблема создания запроса к обоим базам одновременно.
← →
Sergey Masloff (2004-06-26 20:54) [8]Romkin © (26.06.04 20:18) [5]
>Вот чего бы я не советовал, так это динамически менять метаданные. Они кешируются, и неприятностей может быть много.
Золотые слова
← →
YurikGL © (2004-06-26 21:03) [9]
> Sergey Masloff (26.06.04 20:54) [8]
А как можно еще решить эту проблему?
← →
Sergey Masloff (2004-06-26 21:28) [10]Пусть функция заполняет общую статическую таблицу вставляя туда допустим дополнительный столбец идентифицирующий конкретную сессию. Это будет лучше чем временная таблица. По скорости все будет нормально.
Ну не знаю что там у тебя за отчеты я уже много лет делаю все отчеты в виде XML. То есть процедура формирующая отчет сразу формирует XML который я построчно читаю. Ну и у меня есть самописная (не мной но ничего военного нет - самому написать можно, по крайней мере правлю я ее регулярно) DLL которая умеет этот XML печатать в Word и Excel, я прямо из XML управляю форматированием, именами полей и так далее. Можно печатать по букмаркам можно в заранее подготовленый шаблон с таблицами. Можно всякие объединения-деления ячеек и все через XML. Ну вернее это некий самодельный XML, но от стандартного он почти не отличается. Очень удобно.
Процедуры выглядят примерно так
CREATE PROCEDURE PRNT(LIST : INTEGER)
RETURNS (RESULT VARCHAR(2000))
as
BEGIN
RESULT = "<worddoc>";
suspend;
for select x1,x2,x3... from... where... into... do...
RESULT = <row>;
suspend;
RESULT = "<cell1>x1</cell1><cell2>x2</cell2...
suspend;
/// и так далее
END;
потом делаю селект из этой процедуры и результат подсовываю в DLL. Все дико довольны ;-)
← →
YurikGL © (2004-06-26 21:34) [11]Отчет просто формируется в этой таблице, а проблем с экспортом у меня нет.
> Пусть функция заполняет общую статическую таблицу вставляя
> туда допустим дополнительный столбец идентифицирующий конкретную
> сессию
А насколько корректно идентефикатор сессии генерировать можно с помощью генератора?
← →
Sergey Masloff (2004-06-26 21:48) [12]А какой сервер у тебя? Если FB из последних там же есть переменные соотв. А так по фиг любой идентификатор хоть генератором. То есть запоминаешь любой интежер и передаешь его в процедуру которая формирует отчет. Потом из общей таблицы отчетов читаешь по этому идентификатору.
← →
YurikGL © (2004-06-26 21:57) [13]
> Sergey Masloff (26.06.04 21:48) [12]
Спасибо. Ваш способ меня устраивает на все 99.(9)%.
← →
Sergey Masloff (2004-06-26 22:27) [14]YurikGL © (26.06.04 21:57) [13]
Дык, не мой он. Довольно-таки общепринятый. Насколько я помню в ссылке Romkin-а примерно то же советуют.
← →
YurikGL © (2004-06-26 22:32) [15]
> Sergey Masloff (26.06.04 22:27) [14]
В ссылке я такого совета не нашел, либо его не понял. Мне ж нужно по простому, как в [10]. Так и буду делать.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c