Форум: "Базы";
Текущий архив: 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.042 c