Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

InterBase не хочет сохранять изменения (   Найти похожие ветки 

 
Russko   (2004-12-25 20:46) [0]

Есть небольшая самописная процедура, в которой исходя из опр. условий в базу навигационным способом прописываются некоторые изменения, но по окончании и выходе из процедуры выявляется, что никаких изменений не произошло абсолютно ((
Пример:
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;


 
Zacho ©   (2004-12-25 21:18) [1]

Ну Edit у тебя есть.
А Post где ?


 
Russko   (2004-12-25 21:24) [2]

дальше он тоже есть ))


 
Zacho ©   (2004-12-25 21:34) [3]

Russko   (25.12.04 21:24) [2]

Это хорошо, что есть :) А выполняется ?

И что такое DataSource3.DataSet ? И в очередной раз спрошу: Commit делаешь ? :) И как именно определяешь, что изменений не произошло ? И признайся, наконец, :) какими компонентами доступа пользуешься ?


 
Russko   (2004-12-25 21:44) [4]

Дело в том, что я тока что перешёл с paradox на FireBird. Чтобы прогу не переписывать я оставил всё как есть, т.е. query и database, только добавил новые алиасы для интербейса. Commit делаю, post тоже после каждого исправления. Пошагово смотрю - всё считает правильно: otc.Query3.FieldByName("L").AsFloat увеличивается,но в итоге, в отчёте - остаётся старая неизменённая цифра ((


 
Step[B.M.]   (2004-12-25 21:46) [5]

Для того чтоб Query таботал как Table пристроить к Query компоненту TUpdateQuery (или как там ее?) и написать SQL для каждого действий (вставка, обновление, удаление). Прости, Дельфи нет по руками чтоб посмотреть.


 
Russko   (2004-12-25 21:52) [6]

Да нет, UpdateSQL есть и всё прописано. Проблема в том, что изменения проводятся не реляционным способом, а навигационным )


 
Zacho ©   (2004-12-25 21:52) [7]

Russko   (25.12.04 21:44) [4]

Посмотри непосредственно в БД - изменилась запись или нет. Если в БД изменения есть, то подробнее описывай как работает у тебя отчёт.

И всё-таки лучше перейди на IBX. Конечно, придётся повозиться, но оно того стоит, по крайней мере транзакциями сможешь полноценно управлять, а не гадать что и как делает BDE.


 
Zacho ©   (2004-12-25 21:54) [8]

Russko   (25.12.04 21:52) [6]
Проблема в том, что изменения проводятся не реляционным способом, а навигационным )


Без разницы. Всё равно BDE генерирует запросы, которые и выполняются.
Подозреваю, что у тебя всё-таки какая-то фигня с транзакциями. Отчёт, в котором не видно изменений в той же программе, и работает через тот же Database или нет ?


 
Russko   (2004-12-25 22:01) [9]

отчёт формируется в Excel из "изменённой" таблицы через XLReport


 
Zacho ©   (2004-12-25 22:13) [10]

Russko   (25.12.04 22:01) [9]

Ты главное скажи: формируется в этой же программе ? Database тот же ?
И что в БД (посмотри isql или IBExpert"ом, или SQL Explorer"ом) - есть изменения или нет ?

Да, ещё: раз ты используешь TQuery+TUpdateSQL, значит у тебя включено CachedUpdates. А ApplyUpdates делать не забываешь ?


 
Russko   (2004-12-25 22:14) [11]

ApplyUpdates делать не забываю, а формирую тем же database


 
Zacho ©   (2004-12-25 22:20) [12]

Russko   (25.12.04 22:14) [11]

И всё-таки: в БД изменения есть и только в твоей программе их "не видно", или и в БД их нет ?


 
Russko   (2004-12-25 22:24) [13]

их нет и в БД, проверял с помощью IBAdmin"a
ЧТо делать не знаю (( в понедельник шефу сдавать ((


 
Zacho ©   (2004-12-25 22:31) [14]

Russko   (25.12.04 22:24) [13]

Явно транзакция не коммитится. Или в UpdateSQL запрос кривой. Разбирайся.

Если программа небольшая, то вышли её + БД + XLReport мне на мыло. БД - в виде архивированного бэкапа.

Впрочем, не надо даже всю - попробуй из неё (и из БД) выдрать минимально работоспособный кусок и вышли.


 
Russko   (2004-12-25 22:34) [15]

Извини, выслать не как не удасться ( Код даже куском - ограменный, в нём собираются металлы (их размеры и веса)).
А транзакцию я вроде специаольно и не открывал ))
Иногда на  ApplyUpdates у меня ещё вылетает: "Эта запись уже редактируется другим юзером" ))


 
Zacho ©   (2004-12-25 22:49) [16]

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, может что-то важное и забыл.


 
Vanes ©   (2004-12-25 23:22) [17]

54


 
Russko   (2004-12-26 12:24) [18]

Вроде разобрался с сохранением данных, но теперь в одном месте на строчке Qyery3.Post выкидывает, что мол запись редактируется другим юзером ))) это почему, если я до этого все изменения уже запостил и закоментировал


 
Zacho ©   (2004-12-26 12:41) [19]

Russko   (26.12.04 12:24) [18]
Вроде разобрался с сохранением данных,


А в чём дело было ? Любопытно.

> что мол запись редактируется другим юзером

Приведи полностью текст сообщения об ошибке (как есть, не переводя на русский), включая класс ошибки.


 
Russko   (2004-12-26 15:03) [20]

Вы были правы, сохранения не происходило потому как не везде были записи типа: ApplayUpdate и CommitUpdate. Поставил я эти 2 строчки в обработчик события AfterPost у компонента query И вроде всё нормально, но выскакиевает:
Couldn"t perform the edit because another user changed th record



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

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
14-1105623760
Kerk
2005-01-13 16:42
2005.01.30
Философская сторона модерирования


1-1106143494
vic1
2005-01-19 17:04
2005.01.30
ComboBox


1-1105633489
The X
2005-01-13 19:24
2005.01.30
Как экспортировать данные в HTML?


3-1103797344
juice
2004-12-23 13:22
2005.01.30
Insert, ключевое поле


1-1105889648
Exit
2005-01-16 18:34
2005.01.30
RichEdit