Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];

Вниз

Interbase +Transaction....   Найти похожие ветки 

 
$hade   (2002-01-03 08:08) [0]

Народ...Или лыжи не едут или где? :-)
Вощщем...Работаю с IB без BDE (через стандартные компоненты IB в Delphi)...Транзакции стартую и подтверждаю вручную (т.е NOAUTOCOMMIT )...тока вот я не понял где указать что не мне нужно именно NOAUTOCOMMIT? В BDEAdministrator ->Drivers ? так это на все Interbase"овские прогои как я понял...и какая гарантия что другая прога не поменяет настройки?


 
penguin   (2002-01-03 10:48) [1]

Вы указываете параметры только для того алиаса, с которым хотите работать. При этом на другие алиасы, в том числе Interbase, и в том числе на те другие алиасы, которые связаны с Вашей базой данных, эти изменения не распротраняются. Другие программы, работающие с Вашей БД через другие алиасы, ничего не почувствуют.


 
Davojan   (2002-01-03 11:13) [2]

О чём вы, народ? Какой BDEAdministrator? Какие Alias? Они тут вообще не причем. Ведь сказано ж было, что НЕ через BDE. Если испозьзуются компоненты IBExpress, то прога будет работать на клиенте, на котором не установлена BDE.
Насколько я знаю, при использовании этих компонентов и так никакого автокоммита не происходит. Явным признаком этого служит такой глюк: когда производится коммит или роллбэк, все наборы данных (IBTable, IBQuery и т.д.) почему-то разрывают связь с базой данных и их приходится коннектить заново и возращать на место указатели. Выглядит это примерно так (я объединяю этот процесс в одну процедуру):
procedure TDM.Commit;
const BMCOUNT = 3;
var bm:array[1..BMCOUNT] of TBookMark;
begin
try
bm[1] := quGroups. GetBookmark;
bm[2] := quGoods. GetBookmark;
bm[3] := quGoodsPrices.GetBookmark;
trShopNet.Commit;
try
quGroups.Open;
quGroups. GotoBookmark(bm[1]);
quGoods.Open;
quGoods. GotoBookmark(bm[2]);
quGoodsPrices.Open;
quGoodsPrices.GotoBookmark(bm[3]);
except
end
finally
quGroups. FreeBookmark(bm[1]);
quGoods. FreeBookmark(bm[2]);
quGoodsPrices.FreeBookmark(bm[3]);
end
end;



 
kaif   (2002-01-03 15:42) [3]

Чтобы после Commit не закрывались запросы, нужно использовать не Commit, а CommitRetaining. Аналогично, вместо Rollback нужно использовать RollbackRetaining (но последнее работает только с IB6.0). Любой Open компонентов TIBQuery автоматически вызывает StartTransaction соответствующего TIBTransaction. Если нужно явно стартовать транзакцию, например, перед "INSERT INTO..." используйте метод TIBTransaction.StartTransaction. До этого всегда желательно проверить, что Transaction.UnTransaction <> True. Никаких Autocommit в IBExpress нет. Это всегда делается вручную, даже в утилитах типа IBSQL. Вообще Autocommit используют только для DDL (для "CREATE TABLE..." и.п. команд).


 
kaif   (2002-01-03 15:43) [4]

Простите, описался.
Transaction.InTransaction
:))


 
Davojan   (2002-01-04 12:39) [5]

Спасибо за совет, но я знал про CommitRetaining. Его в моем случае неудобно было использовать, потому что в основном все операции производил через хранимые процедуры, а если использовать эту процедуру, то изменения не отобразятся в наборе данных.
И вообще, это неудобно, если сервер сам производит какие либо изменения (например триггер формирует уникальный ключ), потому что об этом опять же не узнаёт набор данных клиента.


 
kaif   (2002-01-04 14:32) [6]

Согласен, есть такая проблема. Нужно разделить понятия Commit и Refresh. Как правило, я поступаю так:
1. Использую свойство Generator компонента TIBQuery, чтобы не получать уникальный ключ в триггере, а потом искать запись по альтернативным ключам, к тому же не всегда таковые можно сыскать...
2. Использую метод Refresh компонента TIBQuery. чтобы все это заработало, использую дополнительно компонент типа IBUpdateSQL. Разумеется, Refresh пересвечивает только текущую строку набора. Это происходит даже без Commit и результаты работы хранимой процедуры видны, если она в той же транзакции, что и запрос. Если что-то не так, то, как правило, это ошибка в тексте RefreshSQL.
Но я не наставиваю на таких решениях. Возможно, я просто не умею пользоваться закладками.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
1-8838
Чел
2002-01-19 00:53
2002.02.04
Инсталятор как у Office XP


1-8891
Unholy()
2002-01-16 00:39
2002.02.04
Помогите найти следующие компоненты...


4-9042
Leviathan
2001-12-06 23:36
2002.02.04
ScreenShot


1-8835
tavwizard
2002-01-19 16:49
2002.02.04
add-in для Delphi


4-9020
sanyaMM
2001-12-04 16:39
2002.02.04
Как перехватить Ctrl+Alt+Del?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский