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

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

Временные таблицы в MSSql Server 2000 [D6, MSSQL]


gsvserg ©   (2004-01-20 13:40:00) 

Всем привет! Вопрос такой. Нужно сделать так, чтобы у пользователя была возможность отменить внесенные изменения в таблице. Т.е. все изменения производить во временной таблице, а при сохранении заменять данные. Пытался создавать временные таблицы на сервере
select * into #table_name1 from table_name
select * from #table_name

, но при добавлении новой записи с помощью
insert into #table_name...
выдается сообщение об ошибке "Invalid object name #table_name".
Кто-нибудь может объяснить как это делается. Или есть друе решения?


Delirium   (2004-01-20 18:29:00) [1]

> "Делай тогда не #table_name1, а ##table_name1"
- если действительно один Connection, то и сессия на MSSQL - одна и взаимодействующий пользователь - один, а следовательно нет никакой необходимости предостовлять временные таблицы на всеобщее обозрение, да ещё и заботиться об уникальности названий таблиц. Куда как грамотнее всё-таки найти ошибку у себя в коде.


gsvserg   (2004-01-20 16:55:00) [2]

ZrenBy © (20.01.04 14:38) [12]
Оказывается все просто UpdateBatch() и CancelBatch().

sniknik © (20.01.04 14:30) [10]
Извени, не проверял. То что подсказал ZrenBy мне подходит.

ВСЕМ СПАСИБО!!!


ZrenBy   (2004-01-20 14:38:00) [3]

>>Я бы с удовольствием, только как?

TClientDataSet

или

TADODataSet с ltBatchOptimistic

потом набор данных в виде XML посылается на сервер
и в одной транзакции удаленные удаляются, добавленные добавляются,
измененные изменяются.


sniknik   (2004-01-20 14:30:00) [4]

всетаки гдето у тебя конект обрывается, может обрашения есть к другой базе, к master к примеру, тогда это на уровне сервера происходит (можно посмотреть в профайлере), а так как временная таблица локальная то смена базы равна разрыву коннекта.
вот проверь так (всю пачку в один ADODataSet) сработает, нет других комманд между, действий никаких и следовательно сработает

SELECT * into #table_name FROM table_name
INSERT INTO #table_name (Name) VALUES ("jkhj1234khlhjkhkj")
select * from #table_name


stone   (2004-01-20 14:30:00) [5]


> gsvserg ©

А разве управление транзакциями не дает возможности отмены изменений?

имхо, временные таблицы тут явно лишние...


gsvserg   (2004-01-20 14:17:00) [6]

ZrenBy © (20.01.04 14:15) [7]
Я бы с удовольствием, только как?


gsvserg   (2004-01-20 14:16:00) [7]

Ega23 © (20.01.04 13:56) [4]
Спасибо, проходит. Так и буду делать.
sniknik © (20.01.04 14:03) [6]
Ты имеешь ввиду TAdoconnection.connected=true?
Проверял, всегда true.


ZrenBy   (2004-01-20 14:15:00) [8]

>>Т.е. все изменения производить во временной таблице

А ты на клиенте меняй, отменяй, меняй, отменяй,
добавляй, удаляй, добавляй, удаляй, ...

А потом на сервак скопом лей.


sniknik   (2004-01-20 14:03:00) [9]

смотри в TADOConnection.Active, и самое главное чтобы оно ни разу от первой команды до второй в false не вставало (при трассировке смотри).


gsvserg   (2004-01-20 13:58:00) [10]

Перед инсертом ставлю breakpoint и смотрю process info в SQLSERVER - connect присутствует.


Ega23   (2004-01-20 13:56:00) [11]

Делай тогда не #table_name1, а ##table_name1.
Только дропнуть не забудь.


Delirium   (2004-01-20 13:48:00) [12]

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


gsvserg   (2004-01-20 13:46:00) [13]

Delirium © (20.01.04 13:45) [1]
У меня один Connect на всю программу.


Delirium   (2004-01-20 13:45:00) [14]

Надо insert делать на том-же Connection-е, на котором таблицы создавал.


Наверх

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