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