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

Вниз

Ошибка: "Данные редактируются другим пользователем"   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.042 c
14-1105019399
VEG
2005-01-06 16:49
2005.01.30
ОС будущего - как вы ее себе представляете?


3-1104069953
NEEDHELP
2004-12-26 17:05
2005.01.30
kak sohranit jpg kartinku v bazu dannih ??


3-1104148727
denis24
2004-12-27 14:58
2005.01.30
EHLib


14-1105421027
Layner
2005-01-11 08:23
2005.01.30
Здравствуйте! Вот проблемка есть, есть 2 exe файла


11-1087067965
Андрей2
2004-06-12 23:19
2005.01.30
Не происходит переключение между формами