Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.041 c
3-1104246356
Belkova
2004-12-28 18:05
2005.01.30
Копирование БД и монопольный доступ


1-1106129788
vint45
2005-01-19 13:16
2005.01.30
Проблема с дебагом


14-1105479495
Константинов
2005-01-12 00:38
2005.01.30
Microsoft Virtual PC Trial


4-1102520132
Тёмыч
2004-12-08 18:35
2005.01.30
ID устройства


1-1105981595
Никита
2005-01-17 20:06
2005.01.30
Как программно эмулировать: а) Щелчок мышью....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский