Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1089200259
Васька
2004-07-07 15:37
2004.07.18
Почта и интернет по щелчку


14-1088518930
PenguinX
2004-06-29 18:22
2004.07.18
Вопрос про тег DIV


8-1082823744
Pa5ha
2004-04-24 20:22
2004.07.18
DrawIndexedPrimitives &amp; Baga


1-1089141500
CyBeR
2004-07-06 23:18
2004.07.18
Как проверить открыта ли форма???


14-1088197767
Soft
2004-06-26 01:09
2004.07.18
Пайка алюминия.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский