Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 где ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо