Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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.В Д3 DataBase1.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..




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.025 c
3-42356           bk                    2001-12-09 16:30  2002.01.14  
Probeli V ADO


1-42417           Dim!S                 2001-12-25 07:19  2002.01.14  
Версии программ


4-42626           shiva1                2001-11-15 18:10  2002.01.14  
и опять хук....


3-42386           Oleg_K                2001-12-08 12:42  2002.01.14  
Работа со строками в DBGrid


1-42479           cpp                   2001-12-25 13:11  2002.01.14  
Как изменить свойство в EXE