Форум: "Базы";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизНе работает ОТКАТ в ТРАНЗАКЦИИ Найти похожие ветки
← →
jz6 © (2005-02-26 14:52) [0]У меня на форме компоненты:
1)Database1:TDatabase
2)Query1:TQuery,
3)СheckBox1:TCheckBox;
4)Кнопка...
В Database1 -
1)AliasName - "Псевдоним1"(он зарегестрирован в BDE),
2)DatabaseName - "ИмяБазыДанных1",
3)Database1.Connected:=True;
4)Уровень транзакции - DirtyRead(об этом просит компилятор);
В Query1 -
1)DatabaseName - "ИмяБазыДанных1",
2)Query1.SQL - "Delete from ":ИмяБазыДанных1:Proba.db" where A=3"
Таблица - 3 поля типа Integer;
Мне надо чтобы если CheckBox1.Checked=True то транзакция завершается подтверждением если иначе - откатом.
При нажатии кнопки работает программа:
Database1.StartTransaction;
try
Q.ExecSQL;
if C.Checked=true
then
begin
Database1.Commit;
ShowMessage("Подтверждение");
end
else
begin
ShowMessage("Удаление данных не ведётся");
Database1.Rollback;
ShowMessage("Откат");
end;
except
ShowMessage("Ошибка в выполнении удаления!!");
Database1.Rollback;
ShowMessage("Откат");
Abort;
end;
end;
Если я снимаю галочку(СheckBox1.Checked=False) то Database1.Rollback(ОТКАТ) выполняется, но все равно данные в таблицы - удалены. Отката нет.
Я уверен что тут дело в самом SQL - операторе.
Он напрямую обращается к таблице, и никакие транзакции его не тревожат. Я долго возился с псевдонимами, но ничего не достиг.
Прошу помощи.
← →
DSKalugin © (2005-02-26 15:48) [1]псевдонимы в запросе не нужны
Query1.SQL.Text:="Delete from Proba where A=3";
Уровень изоляции транзакций надо ставить в
tiReadCommitted. Совсем не ясно о чем тебя просит компилятор
разница существенная.
Для tiDirtyRead читаются И неподтвержденные транзакции тоже
для tiReadCommitted только подтвержденные
и пиши красиво, хотя это дело стиля, конечно,но совсем не удобно читать
Database1.StartTransaction;
try
Q.ExecSQL;
if C.Checked then begin
Database1.Commit;
ShowMessage("Подтверждение");
end
else begin
Database1.Rollback;
ShowMessage("Удаление данных не ведётся. Откат");
end;
except
Database1.Rollback;
ShowMessage("Ошибка в выполнении удаления!!");
Abort; //это еще зачем? вызови лучше raise
end; //это еще зачем? лишняя
end;
так сразу видно логику и лишний ЭНД :-)
← →
Вольный Стрелок © (2005-02-26 16:18) [2]paradox не поддерживает транзакции
← →
jz6 © (2005-02-26 17:08) [3]Спасибо за дельные предложения, Дмитрий!
Отката все равно нет. Даже не смешно.
"paradox не поддерживает транзакции" - может быть и так, но не хочу в это верить. Нигде такого не читал.
← →
DiamondShark © (2005-02-26 21:28) [4]
> но не хочу в это верить
Это только горы можно силой веры двигать.
А транзакции если не поддерживаются, значит не поддерживаются. Совсем.
← →
DiamondShark © (2005-02-26 21:42) [5]Но они всё-таки поддерживаются. С ограничениями:
· For standard databases (Paradox, dBASE, FoxPro, Access) there is no automatic crash recovery or DDL-related actions such as table create, restructure, index creation, table/index deletion, and so on.
· To perform transactions on a Paradox table, a valid index must exist. Data cannot be rolled back on Paradox tables lacking an index.
· Inserts rolled back on dBase and FoxPro tables are actually only soft deletes.
· Local transaction do not work for temporary tables.
· Local transactions do not work for the Text driver (ASCII files).
· For Access, if you do not supply a user name and use user-level security you can only have one active transaction. Transactions are occurring at the driver level not at the database level.
Первый и последний пункт нас не интересует, а вот второй -- да.
Есть у таблицы индекс?
← →
jz6 © (2005-03-01 02:06) [6]"Есть у таблицы индекс?"
А вот и нету! Я его удалил давно, так как эта таблица - просто
пробная! Похоже на правду! Проверю!
Спасибо большое!
И вопрос: откуда черпаются такие данные о формате Paradox?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c