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

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

Зависание программы при редактировании таблицы базы [D5, MSSQL]


r9000 ©   (2004-06-10 11:58:00) 

Добрый день!
Можно спросить? Использую транзакции когда одна копия программы, редактирует данные таблицы скажем  выбранные по одному полю и другая копия программы пытается отобразить эти данные то эта копия программы виснет. Из-за чего это возникает? Что делать, чтобы это устранить?


sniknik   (2004-06-14 09:41:00) [1]

UpdateSQL это всего лиш механизм для облегчения изменений кешированных данных, не нравится этот используй другой. можеш сам придумать.

Курдль ©   (10.06.04 14:49) [12]
> Тогда я в растерянности, как сделать для MS SQL программу, где можно открыть транзакцию с утра, весь день, ковыряясь в носу,
> править данные в режиме прямых изменений, закрыть транзакцию вечером и при этом чтобы другие пользователи не висли.
надеюсь ты этого делать не будеш, или хотябы чтобы мне с твоими творениями сталкиватся не придется. ;о)
а сделать можно, ставить уровень изоляции транзакции "грязное чтение" или обращатся запросами с with(nolock) на случай если попадеш на открытую транзакцию.
но это мало того что неправильно но добавит тебе еще много проблем решив всего одну сомнительную. тем более тут мне кажется транзакция не нужна вовсе (датасет один(??) какие связки тогда боимся потерять?).


r9000   (2004-06-14 07:19:00) [2]

Почему не совсем хочется использовать компонент TUpdateSQL?Потому что если он настроен для работы через ODBC-драйвера в BDE, а не через драйвера SQL Servera в BDE, то если в таблицу с
компонентом TUpdateSQL при редактировании вставляются не все в строку редактирования данные потом сохраняются, и при попытке довставить в эту строку данные и сохранить не хотят сохранятся данные,при использовании драйверов SQL Servera в BDE этого не происходит, т.е. все нормально(это проверено на практике).Полбзователи частенько не вписывают все данные. А так как не я выбираю, какие драйвера использовать, то поэтому не очень хочется использовать компонент TUpdateSQL.


Курдль   (2004-06-10 14:54:00) [3]

Так чем не нравятся кэшированные изменения? (Уверяю, что это ничуть не хуже временных таблиц).


r9000   (2004-06-10 14:52:00) [4]

И я тоже в растерянности


Курдль   (2004-06-10 14:49:00) [5]

Тогда я в растерянности, как сделать для MS SQL программу, где можно открыть транзакцию с утра, весь день, ковыряясь в носу, править данные в режиме прямых изменений, закрыть транзакцию вечером и при этом чтобы другие пользователи не висли.


bushmen   (2004-06-10 14:41:00) [6]

>DataBase.ApplyUpdates([DataSet1, DataSet2, DataSet3]);

Да нету там DataSet2, DataSet3. Читай вопрос. У него имеется один DataSet.


Курдль   (2004-06-10 14:19:00) [7]

Ok!

DataBase.ApplyUpdates([DataSet1, DataSet2, DataSet3]);


или


try DataBase.BeginTransaction;
 Ouery1.ExecSQL; //с запросом на INSERT, UPDATE или DELETE
 Ouery2.ExecSQL; //с запросом на INSERT, UPDATE или DELETE
 Ouery3.ExecSQL; //с запросом на INSERT, UPDATE или DELETE
 DataBase.CommitTransaction;
except
 DataBase.RollbackTransaction;
end;


bushmen   (2004-06-10 13:45:00) [8]

> Курдль ©   (10.06.04 13:29) [8]

Тут речь идет совсем о другом. У него не проблема с сохранением цепочек данных.


Курдль   (2004-06-10 13:29:00) [9]

Если не подойдет - почитайте мои прошлые посты про транзакции.
Используйте лучше это слово в досужих разговорах для повышения собственной значимости. В программах воздерживайтесь, пока не припечет!
Если Вы умеете использовать TUpdateSQL, то сам Бог велел включить CashedUpdates, а запись в базу утверждайть методом
DataBase.ApplyUpdates([DataSet]).
Он сам откроет транзакцию на короткий моментзаписи изменений в БД, утвердит ее в случае успеха или откатит в случае ошибки.


asp   (2004-06-10 13:28:00) [10]

r9000   (10.06.04 13:09) [5]>
> компонент TUpdateSQL использовать не хочется
Причины?


Курдль   (2004-06-10 13:14:00) [11]


> Что делать, чтобы это устранить?

Выбрать другую СУБД :)


r9000   (2004-06-10 13:09:00) [12]

А как <долго долго их обрабатывать/редактировать> данные не сбрасывая изменения в таблицу без использования транзакций или копонента TUpdateSQL(неужели для этого надо создавать локальные таблицы сбрасывать в них данные, редактировать, а потом обратно)? Мне необходимо положить данные одним куском, либо отменить изменения компонент TUpdateSQL использовать не хочется.


sniknik   (2004-06-10 12:27:00) [13]

по логике клиент должен - считать данные, отключится, долго долго их обрабатывать/редактировать, подключится и быстро быстро записать изменения вот это уже можно в транзакции, да и то если данные связаны и должны быть положены одним куском или не положены вообще а частичные приведут с сбою.

я бы к примеру предпочел чтобы у меня хоть часть накладной сохранилась (допустим 3 часа набивал) при сбое чем вообще ничего, только изза того что комуто захотелось поиграть в транзакции ничего в них не понимая.


sniknik   (2004-06-10 12:18:00) [14]

изза транзакции естественно и изза того что используется "подтвержденное чтение".

устранять это лучше не надо(хотя и можно), логику программы лучше поменяй.


r9000   (2004-06-10 12:18:00) [15]

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


asp   (2004-06-10 12:04:00) [16]

Не стартовать транзакцию при редактировании записи. Сбрасывай данные на сервер после.


Наверх

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