![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работа с временной таблицей [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).