|
|
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Пишу в Builder 6.0 , используя DBExpress. Есть две таблицы в базе данных MySQL. Они связаны по полю номер телефона. В компоненту DBGrid1 вывожу содержимое одной таблицы, в DBGrid2 вывожу в зависимости от указателя в первой таблице соотвествующую инфу из второй таблицы. Есть DBNavigator. Нажимаю кнопочку "Удалить" запись в нем. Происходит удаление. Выхожу из программы, захожу снова, а запись как была, так и осталась. Пытался засунуть куда-нить ApplyUpdate(), но так и не понял куда всунуть, так как получал постоянно сообщение о том, что нельзя использовать данную команду в данном месте/текущий момент. Что делать? На форме следующие компоненты: ClientDataSet1 ClientDataSet2 DataSetProvider1 DataSetProvider2 SQLConnection1 SQLTable1 SQLTable2 DataSource1 DataSource2 MySQLQuery1 DBNavigator DBGrid1 DBGrid2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2005, 00:58:56 |
|
||
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
тип таблиц я так понимаю InnoDB ? транзакция не сохраняется. Нужно задать autocommit=1 или в компоненте задать сомитенье транзакций. Или написать вручную после удаления или после поста connection.commt; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2005, 16:18:16 |
|
||
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
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. Как понимаю, не своевременно вызываю функцию. Тогда в какое событие ее нужно вставить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 00:21:34 |
|
||
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
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 либо глючат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 13:45:15 |
|
||
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
ROMANTI На форме следующие компоненты: ClientDataSet1 ClientDataSet2 DataSetProvider1 DataSetProvider2 Зачет использовать эти коннекты? для этого специальная задача? рекомендую их использовать если нужно делать 3-х звенную архитектуру, для 2-х звенной они тяжелые и не всегда корректно отрабатывают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2005, 13:47:30 |
|
||
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
1 . У компоненты Connection может и есть свойство AutoCommit, у SQLConnection данного свойства нет. 2. Что такое ключ транзакции? vvod_firm->ClientDataSet2->ApplyUpdates(-1); vvod_firm->SQLConnection1->Commit(ID_Transaction); Если это ID_Transaction, то его я присваиваю при создании формы. Так приведено в примере книги, если я хочу только 1 транзакцию иметь. 3) Какие компоненты использовать для 2-х звенной структуры? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 00:14:40 |
|
||
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
Разобрался. Оказывается проблема в том, что у меня таблицы были формата не InnoDB. Все работает, но вот только интересно, почему свойство SQLConnection->TransactionsSupported=-1 , т.е. как бы не поддерживаются транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 23:52:52 |
|
||
|
Применение изменения в базе данных MySQL
|
|||
|---|---|---|---|
|
#18+
ROMANTIРазобрался. Оказывается проблема в том, что у меня таблицы были формата не InnoDB. Все работает, но вот только интересно, почему свойство SQLConnection->TransactionsSupported=-1 , т.е. как бы не поддерживаются транзакции? Видимо TransactionsSupported=1 и есть поддержка транзакционности, обычно 1-да, 0-нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2005, 17:20:03 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=643&tid=1853454]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 305ms |

| 0 / 0 |
