![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
InterBase не хочет сохранять изменения ( [D7, IB6.x]
Russko © (2004-12-25 20:46:00)Есть небольшая самописная процедура, в которой исходя из опр. условий в базу навигационным способом прописываются некоторые изменения, но по окончании и выходе из процедуры выявляется, что никаких изменений не произошло абсолютно ((
Пример:
otc.Query3.SQL.Clear;
otc.Query3.SQL.Add('select * from main_base_svod_met');
otc.Query3.RequestLive:=true;
otc.Query3.OPen;
if otc.Query3.FieldByName('profil').AsString='Пруток' then begin
otc.DataSource3.DataSet.Edit;
if otc.Query3.FieldByName('F_S').AsFloat<=50 then
otc.Query3.FieldByName('L').AsFloat:=otc.Query3.FieldByName('L').AsFloat*nn2+(nn2)*5
end;
Russko (2004-12-26 15:03:00) [1]Вы были правы, сохранения не происходило потому как не везде были записи типа: ApplayUpdate и CommitUpdate. Поставил я эти 2 строчки в обработчик события AfterPost у компонента query И вроде всё нормально, но выскакиевает:
Couldn't perform the edit because another user changed th record
Zacho (2004-12-26 12:41:00) [2]Russko (26.12.04 12:24) [18]
Вроде разобрался с сохранением данных,
А в чём дело было ? Любопытно.
> что мол запись редактируется другим юзером
Приведи полностью текст сообщения об ошибке (как есть, не переводя на русский), включая класс ошибки.
Russko (2004-12-26 12:24:00) [3]Вроде разобрался с сохранением данных, но теперь в одном месте на строчке Qyery3.Post выкидывает, что мол запись редактируется другим юзером ))) это почему, если я до этого все изменения уже запостил и закоментировал
Vanes (2004-12-25 23:22:00) [4]54
Zacho (2004-12-25 22:49:00) [5]Russko (25.12.04 22:34) [15]
В общем, что могу посоветовать:
1. Покажи запрос в TUpdateSQL.ModifySQL - может дело всё-таки в нём.
2. Явно стартуй и завершай транзакции.
3. Где-то на http://www.ibase.ru/develop.htmесть статьи про работу с IB с BDE. И в FAQ там тоже что-то было про BDE. Почитай. Я уже весьма смутно помню особенности работы BDE c IB, может что-то важное и забыл.
Russko (2004-12-25 22:34:00) [6]Извини, выслать не как не удасться ( Код даже куском - ограменный, в нём собираются металлы (их размеры и веса)).
А транзакцию я вроде специаольно и не открывал ))
Иногда на ApplyUpdates у меня ещё вылетает: "Эта запись уже редактируется другим юзером" ))
Zacho (2004-12-25 22:31:00) [7]Russko (25.12.04 22:24) [13]
Явно транзакция не коммитится. Или в UpdateSQL запрос кривой. Разбирайся.
Если программа небольшая, то вышли её + БД + XLReport мне на мыло. БД - в виде архивированного бэкапа.
Впрочем, не надо даже всю - попробуй из неё (и из БД) выдрать минимально работоспособный кусок и вышли.
Russko (2004-12-25 22:24:00) [8]их нет и в БД, проверял с помощью IBAdmin'a
ЧТо делать не знаю (( в понедельник шефу сдавать ((
Zacho (2004-12-25 22:20:00) [9]Russko (25.12.04 22:14) [11]
И всё-таки: в БД изменения есть и только в твоей программе их "не видно", или и в БД их нет ?
Russko (2004-12-25 22:14:00) [10]ApplyUpdates делать не забываю, а формирую тем же database
Zacho (2004-12-25 22:13:00) [11]Russko (25.12.04 22:01) [9]
Ты главное скажи: формируется в этой же программе ? Database тот же ?
И что в БД (посмотри isql или IBExpert'ом, или SQL Explorer'ом) - есть изменения или нет ?
Да, ещё: раз ты используешь TQuery+TUpdateSQL, значит у тебя включено CachedUpdates. А ApplyUpdates делать не забываешь ?
Russko (2004-12-25 22:01:00) [12]отчёт формируется в Excel из "изменённой" таблицы через XLReport
Zacho (2004-12-25 21:54:00) [13]Russko (25.12.04 21:52) [6]
Проблема в том, что изменения проводятся не реляционным способом, а навигационным )
Без разницы. Всё равно BDE генерирует запросы, которые и выполняются.
Подозреваю, что у тебя всё-таки какая-то фигня с транзакциями. Отчёт, в котором не видно изменений в той же программе, и работает через тот же Database или нет ?
Zacho (2004-12-25 21:52:00) [14]Russko (25.12.04 21:44) [4]
Посмотри непосредственно в БД - изменилась запись или нет. Если в БД изменения есть, то подробнее описывай как работает у тебя отчёт.
И всё-таки лучше перейди на IBX. Конечно, придётся повозиться, но оно того стоит, по крайней мере транзакциями сможешь полноценно управлять, а не гадать что и как делает BDE.
Russko (2004-12-25 21:52:00) [15]Да нет, UpdateSQL есть и всё прописано. Проблема в том, что изменения проводятся не реляционным способом, а навигационным )
Step[B.M.] (2004-12-25 21:46:00) [16]Для того чтоб Query таботал как Table пристроить к Query компоненту TUpdateQuery (или как там ее?) и написать SQL для каждого действий (вставка, обновление, удаление). Прости, Дельфи нет по руками чтоб посмотреть.
Russko (2004-12-25 21:44:00) [17]Дело в том, что я тока что перешёл с paradox на FireBird. Чтобы прогу не переписывать я оставил всё как есть, т.е. query и database, только добавил новые алиасы для интербейса. Commit делаю, post тоже после каждого исправления. Пошагово смотрю - всё считает правильно: otc.Query3.FieldByName('L').AsFloat увеличивается,но в итоге, в отчёте - остаётся старая неизменённая цифра ((
Zacho (2004-12-25 21:34:00) [18]Russko (25.12.04 21:24) [2]
Это хорошо, что есть :) А выполняется ?
И что такое DataSource3.DataSet ? И в очередной раз спрошу: Commit делаешь ? :) И как именно определяешь, что изменений не произошло ? И признайся, наконец, :) какими компонентами доступа пользуешься ?
Russko (2004-12-25 21:24:00) [19]дальше он тоже есть ))
Zacho (2004-12-25 21:18:00) [20]Ну Edit у тебя есть.
А Post где ?