![]() |
|
|
![]()
|
|
| ROMANTI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
Пишу в Builder 6.0 , используя DBExpress. Есть две таблицы в базе данных MySQL. Они связаны по полю номер телефона. В компоненту DBGrid1 вывожу содержимое одной таблицы, в DBGrid2 вывожу в зависимости от указателя в первой таблице соотвествующую инфу из второй таблицы. Есть DBNavigator. Нажимаю кнопочку "Удалить" запись в нем. Происходит удаление. Выхожу из программы, захожу снова, а запись как была, так и осталась. Пытался засунуть куда-нить ApplyUpdate(), но так и не понял куда всунуть, так как получал постоянно сообщение о том, что нельзя использовать данную команду в данном месте/текущий момент. Что делать?
На форме следующие компоненты: ClientDataSet1 ClientDataSet2 DataSetProvider1 DataSetProvider2 SQLConnection1 SQLTable1 SQLTable2 DataSource1 DataSource2 MySQLQuery1 DBNavigator DBGrid1 DBGrid2 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
стартуй транзакцию перед удалением ( SQLConnection1->StartTransaction(TD) ) и коммить после SQLConnection1->Commit(TD)
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| ROMANTI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
Спасибо hunter, за оперативность ответа и полезность его. Попробывал сейчас , что вы написали + наткнулся в доках на данные функции. После их вставки , получаю сообщение об ошибке. Но обо всем по порядку.
Старт транзакции вставил в событие компоненты ClientDataSetBeforeDelete. Вид такой: vvod_firm->SQLConnection1->StartTransaction(ID_Transaction); В событие этого же компонента ClientDataSet2AfterDelete вставил vvod_firm->ClientDataSet2->ApplyUpdates(-1); vvod_firm->SQLConnection1->Commit(ID_Transaction); но получаю в первом же событии ClientDataSetBeforeDelete следующую ошибку: Commands out of sync; You can't run this command now. Как понимаю, не своевременно вызываю функцию. Тогда в какое событие ее нужно вставить? Очень жду вашего очередного ответа. СПАСИБО. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
а что у тебя ID_Transaction? ( какой тип -- должен быть TTransactionDesc )
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Гость_ROMANTI |
|
|||
|
Unregistered |
ВОт откуда я взял данную переменную (см. ниже текст). Она у меня для простоты пока равна 1. Не хочу усложняться несколькими транзакциями, тут хоть с одной разобраться. Мне вот другое предположение высказали на одном из форумов, проверить на значение свойство SQLConnection1->InTransaction ?
Компоненты TDatabase и SQLConnection имеют методы StartTransaction, Commit и Rollback. В отличие от BDE dbExpress позволяет работать с несколькими транзакциями, активными в один и тот же момент. Для поддержки такого режима методы StartTransaction, Commit и Rollback принимают параметр TTransactionDesc. Он объявлен как: TTransactionDesc = packed record TransactionID : longword; GlobalID : longword; IsolationLevel : TTransactionIsolationLevel; CustomIsolation: longword; end; Для каждой отдельной транзакции вы должны объявить переменную типа TTransactionDesc и установить TransactionId в число, которое должно быть уникально между всеми активными транзакциями. Поле GlobalId используется только в Oracle. IsolationLevel может быть xilDirtyRead, xilReadCommitted или xilRepeatableRead. Поле CustomIsolation пока не поддерживается. Поскольку BDE не поддерживает более одной одновременной транзакции, все, что вам нужно это объявить одну переменную типа TTransactionDesc в интерфейсной части модуля, который используется всеми остальными модулями приложения (которые используют явные транзакции). В коде, обрабатываемом при старте приложения, установите TransactionID этой переменной в 1, а IsolationLevel в xilReadCommitted или xilRepeatableRead. Далее, измените все вызовы StartTransaction, Commit и Rollback на вызовы, принимающие эту переменную как параметр. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |