![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Локальные временные таблицы (MSSQL) + ADO [D6, MSSQL]
Рыжик © (2002-12-15 14:02:00)Есть ADOQuery, который создаёт локальные временные таблицы:
CREATE TABLE [#TempTable] ([Field1] [bit] NOT NULL ).
Если я правильно понимаю, то когда пользователь отконнектится от сервера, эти таблицы должны удалиться автоматически.
Однако, повторяю следующие действия:
AdoConnection1.Connected:=true;
AdoQuery1.ExecSQL;//здесь создаются таблицы
...
AdoConnection1.Connected:=false;
Первые 2 раза всё работает, таблицы создаются. Но когда пытаюсь повторить те же действия в 3-ий раз, получаю ошибку:"There is already an object named "#TempTable" in database". И таблицы имеют вид, какими они остались после первого редактирования. При четвёртом вызове таблицы как после второго редактирования, и т.д.
Ничего не понимаю...
Причём через BDE всё работает как положено.
Рыжик (2002-12-18 08:22:00) [21]
> sniknik © (16.12.02 15:45)
У меня и через TestMdb работает только 2 раза :((
sniknik (2002-12-17 18:14:00) [22]А ты наверное Exe - вариант скачивал (он старее), скачай исходники под D6 скомпилится должен без проблем.
Или даже подожди я тебе вышлю (добавил еще изменение Font/charset для грида, можно игратся подбирать нужный).
(гдето минут через 20 от сего поста)
Владислав (2002-12-17 17:37:00) [23]sniknik © (16.12.02 15:45)
Нет у меня там Popup никакого.
passm (2002-12-16 15:50:00) [24]sniknik © (16.12.02 15:48)> Ничего кроме выше перечисленного :))
sniknik (2002-12-16 15:48:00) [25]passm © (16.12.02 15:42)
гдето 150г, норма. :-))
в смысле? ошибок не дает значит нормально, и перетирает при реконнекте. или чтото другое имееш ввиду?
sniknik (2002-12-16 15:45:00) [26]Владислав © (16.12.02 15:37)
>Глюк ADO.
ну только если у нас версии разные, у меня MDAC 2.7 и 3 апгрейда для D6(может тоже различия).
проверял своей программой (точно ADO), хочеш скачай из кладовки (TestMdb), Reconect там делается по правой кнопке мыши на поле запроса пункт попап Reconect. (сделать одинаковые условия, если и через нее глюки... :-(((, то точно ADO)
passm (2002-12-16 15:42:00) [27]sniknik © (16.12.02 15:38)> Что считать за норму?
sniknik (2002-12-16 15:38:00) [28]Нормально, 24 раза так сделал, дальше умаялся :о), но наверно и дальше тоже нормально.
Владислав (2002-12-16 15:37:00) [29]Глюк ADO.
Рыжик (2002-12-16 15:32:00) [30]
> sniknik © (16.12.02 14:58)
А если так:
1.CREATE TABLE #TempTable (Field1 bit NOT NULL )
2.реконнект (ADOConnection.close, замена строки коннекта на ту же самую, ADOConnection.open)
3.и опять CREATE TABLE #TempTable (Field1 bit NOT NULL )
4.реконнект (ADOConnection.close, замена строки коннекта на ту же самую, ADOConnection.open)
5.и опять CREATE TABLE #TempTable (Field1 bit NOT NULL )
У меня на 3-м этапе тоже нет ошибки, а на 5-м есть, и если дальше повторять, то тоже ошибка.
sniknik (2002-12-16 14:58:00) [31]посмотрел, то же самое, если sp_who в query analizer-е смотреть. но
делаю
CREATE TABLE #TempTable (Field1 bit NOT NULL )
реконнект (ADOConnection.close, замена строки коннекта на ту же самую, ADOConnection.open)
и опять
CREATE TABLE #TempTable (Field1 bit NOT NULL )
ошибки нет, то есть удаляется
(если 2 раза подряд то "таблица уже есть")
Рыжик (2002-12-16 14:29:00) [32]
> sniknik © (16.12.02 12:48)
Так и есть.
> Polevi © (16.12.02 12:55)
Да, # таблицы можно заменить постоянными, но я хочу так ;)
Теперь уже просто интересно разобраться.
>All
Люди добрые, вы мне лучше скажите, это у всех так происходит, что после Connected:=false соединение продолжает жить на сервере, или только у меня?
Я проверяю процедурой sp_who. Если делаю Database1.Connected:=false (для BDE) - то коннект исчезает, если ADOConnection.Connected:=false (для ADO) - то остаётся пока программу не закроешь.
Может это какие-то особенности ADO, которых я не знаю? Раньше с ADO работать не приходилось, а тут шлёп - и сразу в лужу. И ни где ничего по этому поводу не могу найти...
Polevi (2002-12-16 12:55:00) [33]# таблицы можно заменить постоянными, добавив в них поле SPID, в которое помещать @@SPID, кот идентифицирует тек сессию
Написать SP Login
CREATE PROCEDURE Login AS
DELETE FROM TempTable WHERE SPID=@@SPID
и вызывать ее сразу после коннекта
sniknik (2002-12-16 12:48:00) [34]проверь чтобы AdoConnection1.Connected = false и в дельфи было IDE. т.е. стартовать программу с таким значением и в проге вначеле коннект подымать.
passm (2002-12-16 12:08:00) [35]Рыжик © (16.12.02 11:41)> Не знаю :( . Я работаю через BDE.
Рыжик (2002-12-16 11:41:00) [36]
> Picco (15.12.02 15:49)
Уничтожать временные таблицы помогает, но моя душа протестует. Надо, чтоб работало как положено, а не прятать глюки.
> passm © (15.12.02 14:39)
А disconnecta действительно не происходит. Но почему????????
AdoConnection1.Connected:=false; - работает без ошибок, в Delphi вроде всё ОК, а SQLServer по прежнему видит этот коннект.
Как тогда правильно отконнектиться?
Picco (2002-12-15 15:49:00) [37]попробуй програмно создавать соединения и потом их же уничтожать
или же удалять временные таблицы в процедуре по выходу из неё
passm (2002-12-15 14:39:00) [38]Рыжик © (15.12.02 14:02)> Первое что приходит в голову - убедись, что происходит disconnect с BD. Посмотри список подключенных приложений средствами MSSQL (если возможно).