edmandc Posted November 7, 2021 Report Share Posted November 7, 2021 A pedido de um cliente vou começar a preparar meu aplicativo para ser utilizado na rede por mais de um usuário ao mesmo tempo. Já implementei um algorítimo para que os usuários possam ter níveis administrativos ou níveis usuários baseado em consulta a um dbf exclusivo para isto. Estou com algumas dúvidas de quando devo travar só o registro e quando devo travar o banco de dados. - Devo travar o registro ("Rlock()") apenas nas edições e exclusões de um único registro ?. - Nas inclusões isto não seria necessário ? - Travo os dbf ("Flock()" ) nos ajustes globais do banco ?. (tipo: PACK REINDEX E ZAP) - Um registro travado por outro usuário é passível de "sómente consulta" por outro usuário ? (read only). ... se sim: o usuário que estará consultando um registro que está sendo editado por outro usuário ... poderá ver informações que poderão não mais representar o estado atual? Grato por qq informação! Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 7, 2021 Report Share Posted November 7, 2021 Minha fonte de Sabedoria, use o BUSCADOR dele, é muito bom. https://vivaclipper.wordpress.com/ Reagrds, saludos. Quote Link to comment Share on other sites More sharing options...
edmandc Posted November 7, 2021 Author Report Share Posted November 7, 2021 4 horas atrás, kapiaba disse: Minha fonte de Sabedoria, use o BUSCADOR dele, é muito bom. https://vivaclipper.wordpress.com/ Reagrds, saludos. grato Sir Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted November 11, 2021 Report Share Posted November 11, 2021 Em 07/11/2021 at 15:19, edmandc disse: A pedido de um cliente vou começar a preparar meu aplicativo para ser utilizado na rede por mais de um usuário ao mesmo tempo. Já implementei um algorítimo para que os usuários possam ter níveis administrativos ou níveis usuários baseado em consulta a um dbf exclusivo para isto. Estou com algumas dúvidas de quando devo travar só o registro e quando devo travar o banco de dados. - Devo travar o registro ("Rlock()") apenas nas edições e exclusões de um único registro ?. - Nas inclusões isto não seria necessário ? - Travo os dbf ("Flock()" ) nos ajustes globais do banco ?. (tipo: PACK REINDEX E ZAP) - Um registro travado por outro usuário é passível de "sómente consulta" por outro usuário ? (read only). ... se sim: o usuário que estará consultando um registro que está sendo editado por outro usuário ... poderá ver informações que poderão não mais representar o estado atual? Grato por qq informação! Amigo, por mais respeito, satisfação e agradecimentos ao DBF, o qual ainda tenho alguns sistemas que utilizam por falta de tempo e capacidade pra migrar todos para o SQ, que no meu caso uso o POSTGRES, como vc está iniciando um novo sistema, sugiro (Não é nome de japonés tá) vc optar um um modo SQL, vc não vai se arrepender, mesmo que não utilize as instruções, vc pode utilizar a SQLRDD ou outra e continuar trabalhando como se fosse DBF. É só uma dica. []s, Quote Link to comment Share on other sites More sharing options...
william Posted November 11, 2021 Report Share Posted November 11, 2021 boa tarde, segue como eu faço com os antigos DBF : * As funcoes que uso: FUNCTION OpenFile( cFile, cAlias, nModo, lRetenta ) DEFAULT cAlias TO Subs( cFile, rAt( '\', cFile )+1), nModo TO 2 DEFAULT lRetenta TO nModo > 1 Do While .T. DO CASE; Case nModo == 1 USE (cFile) ALIAS (cAlias) NEW EXCLUSIVE Case nModo == 2 USE (cFile) ALIAS (cAlias) NEW SHARED Other USE (cFile) ALIAS (cAlias) NEW SHARED READONLY End If neterr() If lRetenta .AND. MsgRetryCancel( 'Arquivo ' + cFile + ; ' sendo usado em outra estacao!', 'Alerta') loop else retu .f. endif Endif exit Enddo return .T. ***** rede *********** FUNCTION REGLOCK(P1) local Local1 if p1=NIL p1:= 5 endif do while (.T.) for Local1:= 1 to p1 if (RLock()) return .T. endif InKey(0.5) next if !msgyesno("Registro Bloqueado! Tenta novamente ?") return .F. endif enddo RETURN( .F. ) function adireg(tempo) local loca1 do while (.T.) for Local1:= 1 to tempo append blank if (!neterr()) return .T. endif InKey(0.5) next if !msgyesno("Arquivo Bloqueado! Tenta novamente ?") return .F. endif enddo return .T. * Exemplos: para abrir os arquivos: if OpenFile( ".\dados\orca","or", 1, .F. ) select or or->(dbgotop()) endif * para travar o registro para alterar ou excluir: if reglock(10) replace confbds->contro with "OK" replace confbds->contro1 with "OK1" dbunlock() endif * para incluir novo registro: if adireg(10) replace numterm with "01" replace conf->t1 with 12 replace conf->t2 with 18 dbunlock() endif Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 11, 2021 Report Share Posted November 11, 2021 // \samples\OPENFIL.PRG FUNCTION OpenFile( cFile, cAlias, nModo, lRetenta ) DEFAULT cAlias TO Subs( cFile, RAt( '\', cFile ) + 1 ), nModo TO 2 DEFAULT lRetenta TO nModo > 1 WHILE( .T. ) SYSREFRESH() DO CASE CASE nModo == 1 USE ( cFile ) ALIAS ( cAlias ) NEW EXCLUSIVE CASE nModo == 2 USE ( cFile ) ALIAS ( cAlias ) NEW SHARED OTHERWISE USE ( cFile ) ALIAS ( cAlias ) NEW SHARED READONLY ENDCASE IF NetErr() IF lRetenta .AND. MsgRetryCancel( 'Arquivo ' + cFile + ; ' sendo usado em outra estacao!', 'Alerta' ) LOOP ELSE RETURN( .F. ) ENDIF ENDIF EXIT ENDDO RETURN( .T. ) // **** rede ********* FUNCTION REGLOCK( P1 ) LOCAL Local1 IF p1 = NIL p1 := 5 ENDIF WHILE( .T. ) SYSREFRESH() FOR Local1 := 1 TO p1 IF ( RLock() ) RETURN( .T. ) ENDIF // Inkey( 0.5 ) //Modo console. SysWait( 0.5 ) // FiveWin NEXT IF .NOT. MsgYesNo( "Registro Bloqueado! Tenta novamente ?" ) RETURN( .F. ) ENDIF ENDDO RETURN( .F. ) FUNCTION Adireg( Tempo ) LOCAL loca1 WHILE( .T. ) SYSREFRESH() FOR Local1 := 1 TO tempo APPEND BLANK IF( .NOT. NetErr() ) RETURN .T. ENDIF SysWait( 0.5 ) NEXT IF .NOT. MsgYesNo( "Arquivo Bloqueado! Tenta novamente ?" ) RETURN( .F. ) ENDIF ENDDO RETURN( .T. ) // Exemplos: PARA abrir os arquivos: IF OpenFile( ".\dados\orca", "or", 1, .F. ) SELECT or or->( dbGoTop() ) ENDIF // para travar o registro para alterar ou excluir: IF reglock( 10 ) REPLACE confbds->contro WITH "OK" REPLACE confbds->contro1 WITH "OK1" dbUnlock() ENDIF // para incluir novo registro: IF adireg( 10 ) REPLACE numterm WITH "01" REPLACE conf->t1 WITH 12 REPLACE conf->t2 WITH 18 dbUnlock() ENDIF Abs Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted November 11, 2021 Report Share Posted November 11, 2021 2 horas atrás, william disse: boa tarde, segue como eu faço com os antigos DBF : * As funcoes que uso: FUNCTION OpenFile( cFile, cAlias, nModo, lRetenta ) DEFAULT cAlias TO Subs( cFile, rAt( '\', cFile )+1), nModo TO 2 DEFAULT lRetenta TO nModo > 1 Do While .T. DO CASE; Case nModo == 1 USE (cFile) ALIAS (cAlias) NEW EXCLUSIVE Case nModo == 2 USE (cFile) ALIAS (cAlias) NEW SHARED Other USE (cFile) ALIAS (cAlias) NEW SHARED READONLY End If neterr() If lRetenta .AND. MsgRetryCancel( 'Arquivo ' + cFile + ; ' sendo usado em outra estacao!', 'Alerta') loop else retu .f. endif Endif exit Enddo return .T. ***** rede *********** FUNCTION REGLOCK(P1) local Local1 if p1=NIL p1:= 5 endif do while (.T.) for Local1:= 1 to p1 if (RLock()) return .T. endif InKey(0.5) next if !msgyesno("Registro Bloqueado! Tenta novamente ?") return .F. endif enddo RETURN( .F. ) function adireg(tempo) local loca1 do while (.T.) for Local1:= 1 to tempo append blank if (!neterr()) return .T. endif InKey(0.5) next if !msgyesno("Arquivo Bloqueado! Tenta novamente ?") return .F. endif enddo return .T. * Exemplos: para abrir os arquivos: if OpenFile( ".\dados\orca","or", 1, .F. ) select or or->(dbgotop()) endif * para travar o registro para alterar ou excluir: if reglock(10) replace confbds->contro with "OK" replace confbds->contro1 with "OK1" dbunlock() endif * para incluir novo registro: if adireg(10) replace numterm with "01" replace conf->t1 with 12 replace conf->t2 with 18 dbunlock() endif Aí vc chutou os bagos do João ahahahaha. Jamais cite a palavra ANTIGO para o DBF, né não fofinho? ahahahaha Quote Link to comment Share on other sites More sharing options...
kapiaba Posted November 11, 2021 Report Share Posted November 11, 2021 kkkkkkkkkkkkkkkkkkkkkkkkkkkkk, AI PAI, PARA!!! kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk Quote Link to comment Share on other sites More sharing options...
william Posted November 12, 2021 Report Share Posted November 12, 2021 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.