USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Duvida Recordset (avançado)
Everest
BARRA MANSA
RJ - BRASIL
ENUNCIADA !
Postada em 10/07/2006 11:19 hs            
Desta vez vo tentar ser o mais claro possivel.....
 
' CursorType
'
'  2 - adOpenDynamic
'  0 - adOpenForwardOnly
'  1 - adOpenKeyset
'  3 - adOpenStatic
'
' LockType
'
'  4 - adLockBatchOptimistic
'  3 - adLockOptimistic
'  2 - adLockPessimistic
'  1 - adLockReadOnly
'
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open "sp_geral('2')", DBConn, _
          adOpenDynamic, adLockPessimistic, _
          adCmdStoredProc
 
Debug.Print "CursorType: "; rst.CursorType; "LockType: " & rst.LockType
 
Estou usando o banco de dados MSDE que esta no servidor e estou acessando o banco por uma estação (client/server).
 
É o seguinte, quero abrir uma tela de cadastro, mas para isso quero abrir a tabela deste cadastro como CursorType: adOpenDynamic para que eu possa navegar nos registros em todas as direçoes e LockType: adLockPessimistic para que o registro que eu esteja editando possa estar bloqueado para qualquer outro usuário, só que o problema é o seguinte quando eu do um Debug.Print "CursorType: "; rst.CursorType; "LockType: " & rst.LockType vejo que o CursorType foi rebaixado para adOpenKeyset e o LockType foi para adLockBatchOptimistic.
 
Por que isso acontece???
 
Quer dizer que eu nunca vo poder usar adOpenDynamic e adLockPessimistic???
 
Quando eu posso fazer isso junto?
 
O que eu devo fazer para quando um usuário estiver editando um registro ele esteja bloqueado para os outros usuários? e com esse mesmo recordset eu possa navegar em todas as direções, movenext, moveprevious, etc..
 
   
Elieser Topassi
Pontos: 2843 Pontos: 2843
SÃO JOSÉ DO RIO PRETO
SP - BRASIL
ENUNCIADA !
Postada em 10/07/2006 12:00 hs            
O MSDE e a maioria dos bancos não suportam o LockPessimistic... é pouco seguro, extremamente lento e acaba com a performance do servidor...
Prefira usar sempre o LockOptimistic... em 5 anos programando nunca encontrei necessidade de travar um registro como Pessimistic...
 
Qto ao OpenDinamic, ele só funciona com cursores do lado do servidor... como vc usou o adUseClient, precisa usar o adOpenKeyset... funciona exatamente como o Dinamic, mas do lado do cliente...
 
Outra coisa: não adianta tentar mudar o CursorLocation do Recordset, como vc fez... ele vai herdar a propriedade CursorLocation da conexao...
 
Uma ultima consideração: Nunca passe o nome da conexao como vc fez, no metodo Open do recordset... isso faz abrir uma nova instancia da conexao... vc perde em desempenho... sempre abra seus recordsets assim:
Set rst = New ADODB.Recordset
Set rst.ActiveConnection = DBConn
rst.Open "sp_geral('2')", , adOpenKeyset, adLockOptimistic, adCmdStoredProc
 
Bem, espero ter ajudado...
Flw! t+


Elieser Carlos Topassi
Analista de Sistemas - Desenvolvedor VB/ASP/.Net

e-mail/msn:
elieser_topassi@yahoo.com.br
São José do Rio Preto,SP - Brasil
_____________________________________________________
Emoções "O caminho do tolo aos seus prórios olhos lhe parece reto, mas o sábio ouve conselhos" (Pv 12:15)

   
Everest
não registrado
ENUNCIADA !
Postada em 10/07/2006 12:08 hs   
Topassi minha ideia é a seguinte,

Vamos supor que eu tennha um cadastro de clientes, ok?!

Entao uma pessoa em uma determinada estação (pc) coloque o registro do cliente Numero '5' em edição, ou seja, ele esta fazendo uma alteração no cadastro, neste mesmo momento uma outra pessoa em uma outra estação (pc) acessa o cadastro de clientes e navega pelos registros no momento que ele vizualiza o cliente numero '5' ele resolve editar (alterar) este registro, neste momento que quero que o sistema seja capaz de informar a este usuário que este registro ja esta em edição por outro usuário.

Como eu faço isso?
   
Cardoso G
Pontos: 2843 Pontos: 2843
PATOS DE MINAS
MG - BRASIL
Postada em 10/07/2006 13:48 hs            
everest, eu faço da seguinte maneira: tenho uma tabela de logs, quando o usuario edita um registro eu gravo nessa tabela um log , com nome do usuario, data, hora e a chave primaria da tabela, etc... quando outro usuario tenta editar o mesmo registro, eu verifico nessa tabela se o registro esta sendo editado, se sim, nao deixo ele alterar, dou uma mensagem dizendo que ja esta sendo utilizado, caso contrario, ele edita o registro, e assim que termino a edição, quando vou gravar apago o log na tabela.
     
Everest
não registrado
ENUNCIADA !
Postada em 10/07/2006 13:57 hs   
Mas este procedimento é viavel tecnicamente? o recordset do ADO nao possui este recurso de bloquear o registro para outros usuarios somente para edição/alteração (e pra consultar fica livre)?
 
 
 
 
   
Elieser Topassi
Pontos: 2843 Pontos: 2843
SÃO JOSÉ DO RIO PRETO
SP - BRASIL
ENUNCIADA !
Postada em 11/07/2006 16:04 hs            
Cardoso, vc ja pensou em como vai funcionar esse seu método em uma rede com 100 maquinas, acessando um banco com 16GB de informações... só na tabela de clientes, mais de 50.000 registros, e cerca de 100 alterações por dia nesses registros, após uns 5 anos de operação do sistema???
bem, vc vai ter uma tabela de log com mais de 150.000 registros e vai levar pelo menos 5 minutos para um servidor decente responder se o registro esta liberado ou nao...
 
Outro problema seria um usuario "gravar" nessa tabela que esta alterando um registro, e de repente cai a rede dele, reinicia a maquina, cai a energia... coisas do tipo... ai o registro esta travado... para sempre!!! (ou até vc ir la destravar manualmente na tabela)


Elieser Carlos Topassi
Analista de Sistemas - Desenvolvedor VB/ASP/.Net

e-mail/msn:
elieser_topassi@yahoo.com.br
São José do Rio Preto,SP - Brasil
_____________________________________________________
Emoções "O caminho do tolo aos seus prórios olhos lhe parece reto, mas o sábio ouve conselhos" (Pv 12:15)

   
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página