Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с временной таблицей [D6, MSSQL]


Tananda ©   (2003-04-23 13:04:00) 

Люди,помогите!
Вначале работы создаю временную таблицу в ADOQuery, в ней же ее и заполняю. Всё нормально. Другой Query хочу выбрать полученные данные из этой таблицы, а она говорит, что нет такой таблицы!
Временная локальная таблица должна быть видна в пределах данной сессии. Неужели каждая Кверя запускает свою сессию? И как это обойти?


AM   (2003-04-23 16:46:00) [1]

>>Tananda (23.04.03 13:55)
>>Табличка то у меня с определенным именем. Если на 3-х местах
>>запустят эту прогу, одна создаст, другая очистит, третья
>>уничтожит, а первая будет в недоумении куда всё делось :(
>>Как же ш мне быть?

Если я правильно понял, тебе нужна временная таблица, к которой имел доступ только тот человек, который его создает.

Вот один из вариантов:
Создается глобальная временная таблица ##table_name, где в место table_name генерируешь уникальное имя именно для данного клиента БД.
Как это сделать? Например в названии создаваемой таблицы использовать имя компьютера на котором она (программа) запускается, ведь в локальной сети могут быть только уникальные имена компьютеров. Например имя компьютера Nikolay, то название таблицы можно сделать ##TabTmpNikolay. Но тут конечно надо поставить (внутри программы) ограничение, что на одной машине может запускаться только одна копия программы.

Примечание: В названии таблиц символ "-"нельзя использовать (по крайней мере в MSSQL7.0), а компьютерам давать можно, так что тебе надо следить за этим и заменять его на другой символ.

А на самом деле вариантов много...


NAlexey   (2003-04-23 16:42:00) [2]

>Не используете ли GO?
Правильная мысль.


MOA   (2003-04-23 16:29:00) [3]

А как Вы в одном запросе и создаёте и вставляете? Не используете ли GO? Или процедуры?
Удачи!


Tananda   (2003-04-23 16:04:00) [4]

Дарогой NAlexey! (Ну и все кто может)
Что же тогда предусмотрено для таких целей??? У меня сложный запрос, который бегает по куче табличек и возвращает результирующий набор данных. С этим набором данных мне надо еще работать - сортировать, выбирать и т.п. Причем желательно быстро. Люди, посоветуйте что-нить! ICQ 112384899


NAlexey   (2003-04-23 14:22:00) [5]

>Если на 3-х местах запустят эту прогу, одна создаст, другая очистит, третья уничтожит, а первая будет в недоумении куда всё делось
При таком подходе не должна мне кажется использоваться временная таблица, она служит другим целям.


Tananda   (2003-04-23 13:55:00) [6]

Табличка то у меня с определенным именем. Если на 3-х местах запустят эту прогу, одна создаст, другая очистит, третья уничтожит, а первая будет в недоумении куда всё делось :(
Как же ш мне быть?


NAlexey   (2003-04-23 13:38:00) [7]

>Глобальную временную заводить не могу - программа работает на нескольких рабочих местах.
А причем здесь рабочие места? Глобальная временная таблица заводится на сервере, и уничтожается когда создавший её запрос уходит и все ссылки на нее тоже.


stone   (2003-04-23 13:28:00) [8]

K #table_name ты можешь обратиться только из той процедуры (запроса), в которой она была создана, т.к. после окончания работы данной процедуры, #table_name автоматически уничтожается


Tananda   (2003-04-23 13:18:00) [9]

Ну да, эт я знаю. Локальная она у меня. и обе Квери к одному Коннекшену. В принципе, они ж должны в обной сессии быть? или я что-то не понимаю про сессии? А получается, что в разных :(
Глобальную временную заводить не могу - программа работает на нескольких рабочих местах.


NAlexey   (2003-04-23 13:14:00) [10]

Смотря какую таблицу создаешь, существует временная локальная и временная глобальная соответственно префиксы разные для локальноой - # для глобальной - ##.
Ну собственно вот:

Temporary Tables
You can create local and global temporary tables. Local temporary tables are visible only in the current session; global temporary tables are visible to all sessions.

Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).


Наверх

Титульная страница Поиск, карта сайта Написать письмо