powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Применение изменения в базе данных MySQL
8 сообщений из 8, страница 1 из 1
Применение изменения в базе данных MySQL
    #33363151
ROMANTI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу в Builder 6.0 , используя DBExpress. Есть две таблицы в базе данных MySQL. Они связаны по полю номер телефона. В компоненту DBGrid1 вывожу содержимое одной таблицы, в DBGrid2 вывожу в зависимости от указателя в первой таблице соотвествующую инфу из второй таблицы. Есть DBNavigator. Нажимаю кнопочку "Удалить" запись в нем. Происходит удаление. Выхожу из программы, захожу снова, а запись как была, так и осталась. Пытался засунуть куда-нить ApplyUpdate(), но так и не понял куда всунуть, так как получал постоянно сообщение о том, что нельзя использовать данную команду в данном месте/текущий момент. Что делать?

На форме следующие компоненты:
ClientDataSet1
ClientDataSet2
DataSetProvider1
DataSetProvider2
SQLConnection1
SQLTable1
SQLTable2
DataSource1
DataSource2
MySQLQuery1
DBNavigator
DBGrid1
DBGrid2
...
Рейтинг: 0 / 0
Применение изменения в базе данных MySQL
    #33364566
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тип таблиц я так понимаю InnoDB ?
транзакция не сохраняется. Нужно задать autocommit=1
или в компоненте задать сомитенье транзакций.
Или написать вручную после удаления или после поста connection.commt;
...
Рейтинг: 0 / 0
Применение изменения в базе данных MySQL
    #33365337
ROMANTI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) А в какой компоненте задается AutoCommit.

2) В компоненте задал, только вот...

Старт транзакции вставил в событие компоненты 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.

Как понимаю, не своевременно вызываю функцию. Тогда в какое событие ее нужно вставить?
...
Рейтинг: 0 / 0
Применение изменения в базе данных MySQL
    #33366520
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROMANTI1) А в какой компоненте задается AutoCommit.

2) В компоненте задал, только вот...

Старт транзакции вставил в событие компоненты 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.

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

Попорядку.
свойство autocommit может быть только у компонента Connection, если оно задано в true - не нужно специально коммитить транзакцию.

По ошибке - откуда ты знаешь ключ транзакции?
Что происходит в трассировке? если есть компонент монитор транзакции - поставь его и все команжы с сервером запиши в факл - это и будт трассировка. Поможет прояснить вопрос по ошибке.

и в завершение - НЕ рекомендую использовать компонента DBExpress для работы с MySQL - они либо не могут работать с версиями 4.1-5.0 либо глючат.
...
Рейтинг: 0 / 0
Применение изменения в базе данных MySQL
    #33366529
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROMANTI
На форме следующие компоненты:
ClientDataSet1
ClientDataSet2
DataSetProvider1
DataSetProvider2


Зачет использовать эти коннекты? для этого специальная задача? рекомендую их использовать если нужно делать 3-х звенную архитектуру, для 2-х звенной они тяжелые и не всегда корректно отрабатывают.
...
Рейтинг: 0 / 0
Применение изменения в базе данных MySQL
    #33370086
ROMANTI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1 . У компоненты Connection может и есть свойство AutoCommit, у SQLConnection данного свойства нет.

2. Что такое ключ транзакции?

vvod_firm->ClientDataSet2->ApplyUpdates(-1);
vvod_firm->SQLConnection1->Commit(ID_Transaction);

Если это ID_Transaction, то его я присваиваю при создании формы. Так приведено в примере книги, если я хочу только 1 транзакцию иметь.

3) Какие компоненты использовать для 2-х звенной структуры?

Спасибо
...
Рейтинг: 0 / 0
Применение изменения в базе данных MySQL
    #33374794
ROMANTI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался. Оказывается проблема в том, что у меня таблицы были формата не InnoDB. Все работает, но вот только интересно, почему свойство SQLConnection->TransactionsSupported=-1 , т.е. как бы не поддерживаются транзакции?
...
Рейтинг: 0 / 0
Применение изменения в базе данных MySQL
    #33377279
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROMANTIРазобрался. Оказывается проблема в том, что у меня таблицы были формата не InnoDB. Все работает, но вот только интересно, почему свойство SQLConnection->TransactionsSupported=-1 , т.е. как бы не поддерживаются транзакции?
Видимо TransactionsSupported=1 и есть поддержка транзакционности, обычно 1-да, 0-нет
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Применение изменения в базе данных MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]