Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Проблемы с блокированием записи

 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 22 Mar 2007 14:08    Post subject: Проблемы с блокированием записи Reply with quote

Маленькая программка, которую надо подключить по Ctrl+F5 в Прайс-листе Управления продажами
Code:

#include 'inkey.ch'
function main()

aSet:=saveset()
altd()

*Сперва создаем и открываем монопольно новую таблицу для редактирования
indnomer:=0
do while file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf");
     .or.file(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")
   indnomer++
enddo
dbcreate(LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",;
         {{"code","C",3,0},;
          {"name","C",20,0},;
          {"sumoutr","N",12,2},;
          {"u_neotgr","L",1,0},;
          {"l_avt","L",1,0}})
NETUSE("mag_ce",LoadPath()+"\real\magmm"+ltrim(str(indnomer))+".dbf",,.F.)
index on name tag tag_name to (Loadpath()+"\real\magmm"+ltrim(str(indnomer))+".cdx")

* и создаем в ней одну строку для редактирования
dbappend(); field->name:='Строка'

*Это попытка блокировки текущей записи в mlabel и проверка, заблокирована ли запись
if mlabel->(rlock())
   sayandwait("1 Да"+str(mlabel->(recno())))
   mlabel->marka:='aaaaaa'
else
   sayandwait("1 Нет"+str(mlabel->(recno())))
endif

*Пауза
altd()
dbgotop()
   DISPBOX(5,2,24,62,( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 )+' ' ) ,"W+/B")

   @6,03 say  padc("Таблица для редактирования",59)
   nTop:=7
   nBot:=22
   cColHead:={"       Магазин            Цена     Не отгр-ть"}
   cCurProc:={||2}
   aBlockCols:={{{||field->name},0},{{||str(field->sumoutr,12,2)},21},{{||if(field->u_neotgr,chr(251)," ")},38}}
   _aPic:={"XXXXXXXXXXXXXXXXXXXX","999999999.99"}
   _aHeads:={{"Магазин :","NAME","1","1","0"},{"Цена    :","SUMOUTR","1","1","0"}}
   _bScrInit:={||If(nApp=2,0,1)}
   mag_ce->( INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
                  _aHeads,,_aPic,,,;
                  ,,_bScrInit,,,;
                  ,,,,,;
                  15))

*Это повторная попытка блокировки и проверка, заблокирована ли запись
if mlabel->(rlock())
   sayandwait("2 Да"+str(mlabel->(recno())))
   mlabel->marka:='bbbbbb'
else
   sayandwait("2 Нет"+str(mlabel->(recno())))
endif

restset(aSet)
return 1


В этом тесте редактируется запись в файле mag_ce. А перед этим блокируется запись в mlabel. Странно то, что при редактировании записи в mag_ce слетает блокировка записи в mlabel.

Так вот, первый пользователь из прайс-листа запускает эту программу. На экране сообщение Да про блокирование соответствующей записи в mlabel. Далее, на экране появляется таблица со словом Строка. Исправляем в этой строчке цифру 0 на другую. Не выходим из таблицы, пусть пока повисит!
Второй пользователь теперь тоже заходит в прайс-лист, встает на тот же товар. Запускает эту же программу. Сразу же делается попытка блокирования той же записи в mlabel. Получаем сообщение Да, то есть запись была разблокирована. А кто ее разблокировал? Ведь редактирование происходило в другой таблице!

А вот если первый пользователь не будет редактировать строку Строка, то второму пользователю не удастся заблокировать эту запись в mlabel (Сообщение Нет), то есть все будет работать как над
Back to top
View user's profile Send private message
Марина



Joined: 27 Aug 2002
Posts: 501
Location: Кондрина Марина Александровна
Occupation: ОАО БКО программист
Interests: Боровичи Новгородской обл

PostPosted: 30 Mar 2007 10:15    Post subject: Reply with quote

Константин, эту тему я поднимала еще в конце января и Вы обещали ...
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 30 Mar 2007 11:28    Post subject: Reply with quote

Марина вопрос стоит на первом месте, но вот пока не могу ничего ответить....
Попробую на выходных еще поразбираться
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 03 Apr 2007 12:23    Post subject: Reply with quote

По Вашему вопросу Марина.
Основная идея БЭСТа предполагала, чтобы записи в течении относительно длительного времени не оставались заблокированны, точнее чтобы записи надолго не блокировались,
работа с InitList считается может быть достаточно долгой
Функция InitList. А точнее qinput после выполнения корректировки делает dbunlockall.
Так что Вам либо прдстоит делать свой механизм корректировки, либо возможно стоит пересмотреть постановку задачи.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru