Форум: "Базы";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];
ВнизМожно ли работать с временной таблицей (напр. #tmp_tab_name ) через Ttable? Найти похожие ветки
← →
Nest (2001-11-29 12:32) [0]Когда в св-ве Table1.TableName значение,начинающееся с #(т.е. временная таблица), при попытке table1.Createtable ругается "Инвалид табле наим", а при Table1.open -
"table does not exist,
Ivalid object name "#view1"". Хотя в этом сеансе таблица точно создана через Query(кстати с его помощью выбирается)
Несудьба ?
← →
sudiv (2001-11-29 13:29) [1]Похоже на то.
← →
Nest (2001-11-29 14:21) [2]Как бы узнать по-точнее?
Уж если здесь люди не знают...
← →
asafr (2001-11-29 14:50) [3]Брось TTable - пользуйся TQuery. Все получится.
← →
sudiv (2001-11-29 15:06) [4]Пробовал,
действительно TTable не "берет" таблицы названия которых c #.
Ничего уж не поделаешь.
А поменять название таблицы нельзя ?
Например tmp3222~.<что-то>.
← →
Nest (2001-11-29 15:27) [5]2sudiv ©
Видишь ли, временные таблицы - это не просто таблицы,которые ты создаёшь,юзаешь а потом мочишь.
В МССКЛ это отдельный вид и они серьёзно отличаются.
1.Они создаются для сеанса,и когда подключение к базе разрывается(штатно ИЛ НЕ ШТАТНО) то не надо заботиться об их уничтожении- за это отвечает сервер.
2.Мне временные таблицы необходимы для формирования НД,отображаемого
пользователю при просмотре-
А теперь представь, что пользователь не сможет просмотреть данные из базы если у него есть только права на просмотр (врем.таблицу та нельзя будет создать)!!!!!!!!!!!!!!!!
А таблицу с # создать можно всегда- они по-моему создаются даже в отдельной базе "TeMP"
3.Оператор
SELECT * INTO temp_table_name FROM source_table_name
Обычно не срабатывает, если не открыты специфические права(опции базы),которые обычно закрыты.
однако
SELECT * INTO #temp_table_name FROM source_table_name
сработает всегда.
может где соврал-не спец я по МССКЛ.
Ну, в общем, поменять название таблицы нельзя.
← →
sudiv (2001-11-29 15:33) [6]М-да, я тем более не спец.
Тогда я поднимаю руки.
Не знаю.
← →
Nest (2001-11-29 15:36) [7]Буду пытаться заменить Ттабле на Ткьюери.
%(
← →
Ега (2001-11-30 09:36) [8]Nest, а временные таблицы точно автоматически удаляются при закрытии сеанса? По-моему нет, т.к. я сколько раз уже натыкался: делаешь Select into, а тебе Object exists
← →
Nest (2001-12-10 11:24) [9]ДАДАДА!!!
Но сеанс действительно должен быть завершён.
Если ты работаешь в интерактиве- то например перезапустить клиента, а если через дельфи - то недостаточно просто закрыть таблицу. Надо делать connection:=false толи у Database толи у Session.
Но удаляются точно!
← →
Roma (2001-12-10 11:56) [10]> Ега (30.11.01 09:36)
Еслиselect into
- это в плане временная будет таблица или нет еще ничего не значит. Чтобы создаваемая таблица была временной, необходимо при создании (select into
- тоже создание таблицы) указывать имя таблицы, начинающееся на #.
Временная таблица создается в tempdb с именем не совсем тем, что вы укажете при ее создании; например, если укажете #mytemptable, создастся таблица с именем #mytemptable плюс длиннючее идентифицирующее окончание. И доступна она будет только для того пользователя и того сеанса, при котором была создана.
2Nest>
Может, стоит перенести часть работы в хранимую процедуру... И еще: правильно делаешь, что прислушиваешься к asafr и переходишь на TQuery, юзать MSSQL с помощью TTable - "это же не наш метод"...
← →
NewComer (2001-12-10 12:54) [11]Попробуй так.
у TDataBase есть метод Execute....
DataBase1.Execute("Create table #tblTemp(a int, b varchar(30))"); и потом по имени обращайся к этой табличке.. вообще то временыые таблички видны сессии, которая их создала.
У меня все заработало когда юзал TAdoConnection.Execute... вроде и сча должно...
← →
Nest (2001-12-10 16:21) [12]2Roma
Всё верно.
2Nest
За совета конечно спасибо, но:
1.В Д3DataBase1.Execute
работать не хочет
2.Проблема не в том чтоб создать врем. таблицу - это можно и запросом сделать.
Проблема потом эту таблицу открыть с пом. Ттабле.
Но, видать, вправду такие попытки обречены...
← →
Nest (2001-12-10 16:23) [13]Да блин, второй абзац адресован NewComer ©.
← →
NewComer (2001-12-10 17:05) [14]Я конечно не специалист, но Несколько мыслей:
Вообще через БДЕ работать с серваком.. енто как то ракообразно.
DataBase.Execute должен сработать(ежели ты запросом создашь временную табличку.. то точно ее потом не увидишь), поковыряйся что ли.. DataBase.FlushSchemaCache - посмотри.. мож сработает после него...
вообще.. поныкайся с глобальными временными табличками.. посмотри, их то видно? И вообше, локальную временную табличку должна создать сессия. т.е. коннект(в данном случае TDataBase).. если например создать ее в SP то только эта SP ее и видит.. и потом уничтожит... не знаю как получше то выразиться.. :-( Ну и конечно лучше отказаться от TTable в пользу TQuery..
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c