Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
ВнизВременные таблицы в MSSql Server 2000 Найти похожие ветки
← →
gsvserg (2004-01-20 13:40) [0]Всем привет! Вопрос такой. Нужно сделать так, чтобы у пользователя была возможность отменить внесенные изменения в таблице. Т.е. все изменения производить во временной таблице, а при сохранении заменять данные. Пытался создавать временные таблицы на сервере
select * into #table_name1 from table_name
select * from #table_name
, но при добавлении новой записи с помощью
insert into #table_name...
выдается сообщение об ошибке "Invalid object name #table_name".
Кто-нибудь может объяснить как это делается. Или есть друе решения?
← →
Delirium (2004-01-20 13:45) [1]Надо insert делать на том-же Connection-е, на котором таблицы создавал.
← →
gsvserg (2004-01-20 13:46) [2]Delirium © (20.01.04 13:45) [1]
У меня один Connect на всю программу.
← →
Delirium (2004-01-20 13:48) [3]Если у тебя один и тот-же Connection, а таблицы пропадают, значит ты его где-то прерываешь, ничего друго-го быть не может.
← →
Ega23 (2004-01-20 13:56) [4]Делай тогда не #table_name1, а ##table_name1.
Только дропнуть не забудь.
← →
gsvserg (2004-01-20 13:58) [5]Перед инсертом ставлю breakpoint и смотрю process info в SQLSERVER - connect присутствует.
← →
sniknik (2004-01-20 14:03) [6]смотри в TADOConnection.Active, и самое главное чтобы оно ни разу от первой команды до второй в false не вставало (при трассировке смотри).
← →
ZrenBy (2004-01-20 14:15) [7]>>Т.е. все изменения производить во временной таблице
А ты на клиенте меняй, отменяй, меняй, отменяй,
добавляй, удаляй, добавляй, удаляй, ...
А потом на сервак скопом лей.
← →
gsvserg (2004-01-20 14:16) [8]Ega23 © (20.01.04 13:56) [4]
Спасибо, проходит. Так и буду делать.
sniknik © (20.01.04 14:03) [6]
Ты имеешь ввиду TAdoconnection.connected=true?
Проверял, всегда true.
← →
gsvserg (2004-01-20 14:17) [9]ZrenBy © (20.01.04 14:15) [7]
Я бы с удовольствием, только как?
← →
sniknik (2004-01-20 14:30) [10]всетаки гдето у тебя конект обрывается, может обрашения есть к другой базе, к 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) [11]
> gsvserg ©
А разве управление транзакциями не дает возможности отмены изменений?
имхо, временные таблицы тут явно лишние...
← →
ZrenBy (2004-01-20 14:38) [12]>>Я бы с удовольствием, только как?
TClientDataSet
или
TADODataSet с ltBatchOptimistic
потом набор данных в виде XML посылается на сервер
и в одной транзакции удаленные удаляются, добавленные добавляются,
измененные изменяются.
← →
gsvserg (2004-01-20 16:55) [13]ZrenBy © (20.01.04 14:38) [12]
Оказывается все просто UpdateBatch() и CancelBatch().
sniknik © (20.01.04 14:30) [10]
Извени, не проверял. То что подсказал ZrenBy мне подходит.
ВСЕМ СПАСИБО!!!
← →
Delirium (2004-01-20 18:29) [14]> "Делай тогда не #table_name1, а ##table_name1"
- если действительно один Connection, то и сессия на MSSQL - одна и взаимодействующий пользователь - один, а следовательно нет никакой необходимости предостовлять временные таблицы на всеобщее обозрение, да ещё и заботиться об уникальности названий таблиц. Куда как грамотнее всё-таки найти ошибку у себя в коде.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c