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