Форум » Clipper » из монопольного режима ---> в сетевой режим? » Ответить

из монопольного режима ---> в сетевой режим?

Marry: Подскажите, пожалуйста, как переделать программу редактирования базы данных в монопольном режиме на редактирование в многопользовательском сетевом режиме?

Ответов - 5

Marry: /* Bd.dbf Field1: Name=Kod, Type=Numeric, Width=3 Field2: Name=Fio, Type=Character, Width=16 */ ================================================================= // Main.prg set deleted on set cursor off set scoreboard off cls use Bd new Edit_bd(2,14,20,65) close Bd ==================================================================== // Compile: /n static Met:={{5,{|Z|Z:up()}},{24,{|Z|Z:down()}},; {19,{|Z|Z:left()}},{4,{|Z|Z:right()}},; {18,{|Z|Z:pageup()}},{3,{|Z|Z:pagedown()}},; {1,{|Z|Z:gotop()}}, {6,{|Z|Z:gobottom()}}} proc Edit_bd(T,L,B,R) local Color:=setcolor('bg+/b,b/bg'),oB,nKey,Jmet,Scr,A Scr:=savescreen(T,L,B,R) @ T,L,B,R box "|=|||=|| " oB := TBrowseDB(T+1,L+1,B-1,R-1) oB:headSep:=".=" oB:colsep:="|" @ T,L+1 say 'ENTER=Edit, ESC=Exit, INS=Append Blank, DEL=Delete' color('r+/b') oB:addColumn(TBColumnNew('Kod',FieldBlock('Kod'))) oB:addColumn(TBColumnNew('Name_',FieldBlock('Fio'))) do while .t. do while nextkey()=0.and.!oB:stabilize() enddo nKey:=inkey(0) Jmet:=ascan(Met,{|Z|nKey=Z[1]}) iif(Jmet!=0,eval(Met[Jmet,2],oB),) do case case nKey=27 //ESC exit case nKey=13 //ENTER=redaktirovanie stroki A:=field(oB:colpos) set cursor on @ row(),col() get &A color('bg+/r') read set cursor off oB:refreshcurrent() case nKey=7 //DEL=udalenie stroki if alert('Delete?',{'N','Y'})=2 delete oB:refreshall() endif case nKey=22 //INS=dobavlenie stroki A:=' ' set cursor on @ B,L+1 say 'Name_:' get A color('bg+/r') read set cursor off @ B,L+1 say '==========================' if !empty(A) append blank fieldput(2,A) A:=recno() endif oB:gotop() go A oB:refreshall() endcase enddo setcolor(Color) restscreen(T,L,B,R,Scr) return

Marry: хм, везде пропали пробелы.. ( Взяла простейшую базу с двумя полями без индексов

Григорьев Владимир: В вашем примере база данных Bd.dbf открывается без указания режима обработки. Если мне память не изменяет, то по умолчанию используется монопольный режим работы.:)


Pasha: открытие: use Bd new shared редактирование/удаление: if RecLock() read или delete dbCommit() dbUnlock() endif добавление: append blank if ! neterr() fieldput(2,A) dbCommit() dbUnlock() endif функция блокировки записи: /*** * RecLock( <nWaitSeconds> ) --> lSuccess * Попытка заблокировать запись базы данных для других пользователей */ FUNCTION RecLock( nSeconds ) LOCAL lForever IF RLOCK() RETURN (.T.) // Заблокирована ENDIF IF nSeconds == NIL nSeconds := 2 ENDIF lForever = (nSeconds = 0) DO WHILE (lForever .OR. nSeconds > 0) IF RLOCK() RETURN (.T.) // Заблокирована ENDIF INKEY(.5) // Ожидание 1/2 секунды nSeconds = nSeconds - .5 ENDDO RETURN (.F.) // Не заблокирована

Marry: Большое спасибо за разъяснения, попробую)). Я про shared только и знала, но не указала, чтоб привести полностью несетевой вариант...



полная версия страницы