Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Динамическое создание таблиц   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.033 c
1-1088142740
igorol
2004-06-25 09:52
2004.07.18
Недоступны ярлыки печати в QReport


6-1084968516
_un_kloun_
2004-05-19 16:08
2004.07.18
Как скачать из Интернета файл?


1-1089163683
Артем К.
2004-07-07 05:28
2004.07.18
Как сделать прозрачный Edit?


1-1089126602
Buster
2004-07-06 19:10
2004.07.18
Как написать у CheckBox текст в две строки?


3-1087823153
Митяй
2004-06-21 17:05
2004.07.18
ADO "Чудеса в решете"