Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Внесение изменений в таблицу MySQL 
:(
    Опции темы
ROMANTI
Дата 7.11.2005, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
_hunter
Дата 7.11.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



стартуй транзакцию перед удалением ( SQLConnection1->StartTransaction(TD) ) и коммить после SQLConnection1->Commit(TD)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ROMANTI
Дата 7.11.2005, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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.

Как понимаю, не своевременно вызываю функцию. Тогда в какое событие ее нужно вставить?

Очень жду вашего очередного ответа. СПАСИБО.
PM MAIL   Вверх
_hunter
Дата 8.11.2005, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



а что у тебя ID_Transaction? ( какой тип -- должен быть TTransactionDesc )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_ROMANTI
Дата 8.11.2005, 19:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.