Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизОшибка: "Данные редактируются другим пользователем" Найти похожие ветки
← →
Russko (2004-12-27 12:14) [0]После выполнения запроса:
otc.Query9.SQL.Clear;
otc.Query9.SQL.Add("delete from main_base_svod where shifr=""+shifr+"" ");
otc.Query9.RequestLive:=true;
otc.Query9.ExecSQL;
на строчке
otc.Query3.edit;
otc.Query3.FieldByName("ves").AsFloat:=round(V*ro*100)/100;
otc.Query3.Post;
выкидывает такую ошибку.
Query3 тоже подцеплен к main_base_svod.
← →
Александр Иванов © (2004-12-27 12:21) [1]Вот это лишнее: otc.Query9.RequestLive:=true;
← →
stud © (2004-12-27 12:25) [2]после выполнения otc.Query9.ExecSQL;
нужно закомитить действия
← →
Russko (2004-12-27 12:32) [3]Каким образом закомить, если я транзакцию явням образом не открываю, а на otc.Query9.CommitUpdate говорит что не в режиме редактирвоания )
← →
msguns © (2004-12-27 12:37) [4]Правильно говорит. Ты путаешь открытый датасет в режиме редактирования с запросом на разовые изменения (DELETE, INSERT, UPDATE). Это во-первых. А во-вторых, не разобравшись с транзакциями, не поймешь как работает интербэйз и, как следствие, поимеешь массу "непоняток"
← →
stud © (2004-12-27 12:52) [5]для действий типа
> "delete from main_base_svod where shifr=""+shifr+"" "
лучше использовать TIBsql желательно с отдельной транзакцией, тогда например
TIBsql .SQL.Close;
TIBsql.transaction.starttans..;
TIBsql .SQL.Add("delete from main_base_svod where shifr=""+shifr+"" ");
TIBsql .Exe....;
TIBsql.transaction.commit;
теперь необходимо переоткрыть (обновить) набор otc.Query3 чтобы он содержал актуальные данные и пытаться его редактировать
← →
PSH (2004-12-27 13:01) [6]Как я понимаю, набор данных Query3 устарел. Надо его Close, потом Open.
Ну и транзакции надо аккуратнее использовать, лучше явно завершать текущую, стартовать новую, делать все в рамках этой транзакции, потом подтверждать.
← →
Zacho © (2004-12-27 13:07) [7]stud © (27.12.04 12:52) [5]
Он BDE использует. Насколько я понимаю, старый проект, который сейчас переводится на IB.
Так что все эти "запись редактируется другим пользователем" - чисто BDE-шные приколы, насколько помню, никакого отношения к lock conflict в IB не имеющие.
2 Russko: Статьи и FAQ на http://www.ibase.ru/develop.htm читал ?
← →
stud © (2004-12-27 13:22) [8]
> Zacho © (27.12.04 13:07) [7]
молчит ведь. партизан наверное)))
← →
Russko (2004-12-27 13:46) [9]Читал, но ничего сущного не нарыл ))
Да работаю через BDE, т.к. прога была написана для PARADOX.
Дело в том что в проге целый цикл:
Сущесвует 2 анологичные базы (для сверки)
1.берётся запись в БД1
2.сверяется с др.записями по опр.алгоритму,
если выполняется, то записи с которыми произошли "совпадения" удаляются из БД1(чтобы дважды не встречалась) и БД2
3.цикл заканчивается и берётся следующая запись в БД1.
Так вот ошибка выскакивает потому как фактического удаления из БД1 не происходит и при повторе цикла курсор становится и пытается работать с записью, которая должна была бы быть удалена
← →
Zacho © (2004-12-27 13:47) [10]stud © (27.12.04 13:22) [8]
Он в другой ветке это говорил :) Правда, так и не сказал, что использует именно BDE, но из контекста это было понятно :)
← →
msguns © (2004-12-27 13:49) [11]>Russko (27.12.04 13:46) [9]
Это, что, репликация ? Ты привел бы фрагмент кода, где это самое "не удаляется"
← →
Russko (2004-12-27 13:56) [12]Я бы привёл, но думаю не влезет ))
Вопрос остался только один - каким образом мне обновить данные в таблице main_base_svod так, чтобы Query3 не потерял места где стоит без использования закладок.
Например:
Query3.SQL.Clear;
Query3.SQL.Add("select * from main_base_svod ");
Query3.OPen;
Query3.First;
while not otc.Query3.Eof do begin
.................................
Query9.SQL.Clear;
Query9.SQL.Add("delete from main_base_svod where shifr=""+shifr+"" ");
Query9.ExecSQL;
Query3.Next; end;
← →
Zacho © (2004-12-27 13:58) [13]Russko (27.12.04 13:46) [9]
Две базы или две таблицы ? Есть у меня подозрение, что всё-таки таблицы, а не БД.
> Так вот ошибка выскакивает потому как фактического
> удаления из БД1 не происходит и при повторе цикла
> курсор становится и пытается работать с записью,
> которая должна была бы быть удалена
Вот это я не совсем понял. Объясни подробнее, по шагам.
← →
Russko (2004-12-27 14:07) [14]Query9.SQL.Clear;
Query9.SQL.Add("delete from main_base_svod where shifr=""+shifr+"" ");
Query9.ExecSQL;
Этим запросом я удаляю некоторую запись с shifr=""+shifr+""
затем я попадаю в цикл по Query3 и следующая запись на которую встаёт Query3 оказывается та, которую я вроде удалил Query9. ПО идее он должен был бы её пропустить, но поскольку удаления фактического не произошло (набор данных не обновился), то он пытается работать с "удалённой" записью ))
← →
msguns © (2004-12-27 14:10) [15]>Russko (27.12.04 13:56) [12]
>Вопрос остался только один - каким образом мне обновить данные в таблице main_base_svod так, чтобы Query3 не потерял места где стоит без использования закладок
Никак.
← →
Zacho © (2004-12-27 14:16) [16]Russko (27.12.04 13:56) [12]
Попытайся всё-таки объяснять более понятно, а то не совсем понятно, что конкретно ты пытаешься сделать, и в чём проблема.
В смысле "обновить в таблице" ? В наборе данных в приложении или где ? Почему закладки не подходят ? При чём здесь приведённый ниже код ? И зачем отдельный Query с запросом, а не просто Query3.Delete ?
>Query9.SQL.Clear;
> Query9.SQL.Add("delete from main_base_svod where
> shifr=""+shifr+"" ");
Вместо этого лучше используй параметризированный запрос.
← →
Zacho © (2004-12-27 14:18) [17]Russko (27.12.04 14:07) [14]
Просто используй один датасет и всё.
Или переоткрывай Query3 и позиционируйся locate"ом по первичному ключу.
← →
stud © (2004-12-27 14:43) [18]
>сверяется с др.записями по опр.алгоритму,
> если выполняется, то записи с которыми произошли
> "совпадения" удаляются из БД1(чтобы дважды не
> встречалась) и БД2
т.е. чтобы вообще нигде не встречались????
а вообще это наверное можно сделать одним запросом
например
"delete from main_base_svod where shifr=(select ... from ... where условие)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c