Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Внизне сохраняются данные Найти похожие ветки
← →
bambry (2004-12-06 00:08) [0]У меня база данных interbase,архитектура клиент-сервер.При выполнении в клиентском приложении метода applyupdate на сервере данные не сохраняются.Подскажите,что я не так делаю или недоделываю.
← →
GanibalLector © (2004-12-06 01:54) [1]IbTransaction.commit ?
← →
bambry (2004-12-06 19:12) [2]а без транзакций никак?
← →
Zacho © (2004-12-06 19:27) [3]Никак. Вообще. Любой запрос работает только в контексте транзакции.
Правда, некоторые компоненты (например, BDE) могут сами стартовать/завершать транзакции.
Читать учебники и http://www.ibase.ru
← →
bambry (2004-12-06 21:20) [4]Смотри,я на сервере пишу
ibtransaction.starttransaction;
try
ibquery.post;
except
ibtransaction.Rollback;
end;
ibtransaction.Commit;
end;
потом вызываю эту процедуру на клиенте ,и при запуске выдаётся сообщение transaction is active
Чего я напутал?
← →
Zacho © (2004-12-06 21:47) [5]Как это ты этот код "пишешь на сервере", а вызываешь на клиенте ? Или у тебя 3-х звенка и ещё и сервер приложений есть ?
А такое сообщене об ошибке означает, что в момент StartTransaction транзакция уже была стартована. Т.е. ты или где-то до этого явно стартовал транзакцию и не завершил, или транзакция была запущена неявно, компонентами IBX. Лично я всегда использую только явное управление транзакциями, т.ч. как в IBX с неявным запуском транзакций сказать не могу, просто не помню. Читай документацию. И ещё раз настоятельно советую прочитать статьи на http://www.ibase.ru/develop.htm , кстати, там была статья и о транзакциях в IBX.
И ещё:except
ibtransaction.Rollback;
end;
- лишнее, т.к. каждая SQL-команда атомарна.
И ещё один совет - лучше используй TIBDataSet, а не TIBQuery, потенциальных проблем меньше.
← →
jack128 © (2004-12-06 22:02) [6]Zacho © (06.12.04 21:47) [5]
except
ibtransaction.Rollback;
end;
- лишнее, т.к. каждая SQL-команда атомарна.
Хе, причем тут атомарность sql-команд, при нынешнем коде у человека банально "Transaction is not active" будет..
← →
bambry (2004-12-06 22:54) [7]Почему тогда выдаётся transaction active?
← →
jack128 © (2004-12-06 22:59) [8]bambry (06.12.04 22:54) [7]
Нет, я глючу "Transaction is not active" будет если у тя запрос ошибку выдаст.
А твоя ошибка не из-за приведенного кода.. Обычно можно писать так:f := not IBTransaction.InTransaction;
if f then
IBTransaction.StartTransaction;
try
IBQuery.Post;
finally
if f then
IBTransaction.Commit;
end;
← →
Zacho © (2004-12-06 23:22) [9]jack128 © (06.12.04 22:02) [6]
Хе, причем тут атомарность sql-команд,
Ни причём, просто к слову пришлось, что Rollback в данном случае лишний.
bambry (06.12.04 22:54) [7]
Я тебе уже объяснил - потому что транзакция уже активна, а ты пытаешься запустить её ещё раз. Впрочем, jack128 © (06.12.04 22:59) [8] уже дал тебе возможное решение.
← →
GanibalLector © (2004-12-07 00:47) [10]скорее всего у тебя ТIbTransaction.Active=true. Убери и все сразу заработает.
← →
ksa2002 (2004-12-07 07:07) [11]Всё проще ... посмототри у себя установки IbTransaction
AvtostopAction и DefaultAction
AvtostopAction - предназначена для автоматического старта и завершение транзакций . То что тебе походу и надо .
← →
bambry (2004-12-18 20:16) [12]Почему когда я на сервере пишу query.post,на клиенте мне пишут,что приложение не может выполняться при закрытом наборе данных,хотя query.active=true?
← →
jack128 © (2004-12-19 01:52) [13]bambry (18.12.04 20:16) [12]
Почему когда я на сервере пишу query.post,
Ты так и нет ответил на вопрос Zacho [5]
← →
bambry (2004-12-20 19:43) [14]отвечаю...
да, у меня трехзвенка(MIDAS)
← →
bambry (2005-01-07 17:06) [15]помогите,пожалуйста
← →
Erik1 © (2005-01-07 17:13) [16]У тебя очень тяжелый случай, сначала надо сохранять на AppServer. Но разные компонеты по разному реализуют интерфейс IProvider. В результате очень небрежной реализвции, может вобще ничего неработать. Коректно работает только BDE. Проверь когда у тебя приходит команда на сервер?
← →
kaif © (2005-01-07 17:15) [17]вместо
ibtransaction.starttransaction;
пиши всегда
if not ibtransaction.InTransaction then
ibtransaction.starttransaction;
А твоя транзакция сама активизируется, когда ты открываешь запрос. Так как ты используешь метод Post, надо полагать, что у тебя был редактируемый набор, который до того активизировался методом Open. Этот метод и активизировал транзакцию (IBQuery1.Active := True)
Кстати, мето commit закроет открытый запрос и придется его заново активизировать.
Метод CommitRetaining оставит запрос открытым. Многие возражают против метода Transaction.CommitRetaining, но я лично нахожу эти возражения снованными на предрассудках, а не на практических экспериментах.
← →
sniknik © (2005-01-07 19:56) [18]> Коректно работает только BDE
забожись.
пробовал трехзвенку для IB на компонентах DBExpress и ADO, все отлично работает, корректно.
← →
bambry (2005-01-28 23:00) [19]люди, ничего не получается, а казалось бы все элементарно...
3-ёх звенка: с сервера на клиент все данные поступают, реализуется хранимая процедура, но на клиенте выполняю applyupdates, а сервер никак не реагирует (данные не сохраняются), кто-нибудь может четко написать, что, где и как надо делать?Если нетрудно оставьте аську,чтобы можно было проконсультироваться в режиме реального времени
← →
bambry (2005-01-28 23:00) [20]Удалено модератором
Примечание: дубль
← →
sniknik © (2005-01-29 00:06) [21]> реализуется хранимая процедура
а вот с этого места поподробнее... и ее результат ты хочеш править?
> кто-нибудь может четко написать, что, где и как надо делать?
конечно, ктото может. (книги же ктото пишет, только книги под одного не пишут... за редким исключением)
← →
bambry (2005-01-29 12:08) [22]нет, не хочу ничего кроме того, чтобы у меня на сервере сохранялись данные, посланные клиентом...
← →
sniknik © (2005-01-29 21:54) [23]результат работы процедуры может и не быть данными на сервере, а просто какими нибуть случайными (к примеру) значениями, или сборкой из разных таблиц даже без уточнений что откуда. как их править?
но дело хозяйское, не хочеш так не хочеш (в смысле, не отвечаеш на уточняющие вопросы это = "не хочу решения, хочу поплакатся на тяжолую долю программиста")
← →
bambry (2005-01-29 23:44) [24]Я слишком нагородил свой вопрос,забудьте про процедуру.Короче говоря вся проблема в том,что данные не сохраняются на сервере,метод ApplyUpdates не помогает.И чего делать?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.041 c