ju_rezende Postado Março 31, 2006 Denunciar Share Postado Março 31, 2006 Olá pessoal tenho algumas duvidas de asp, se alguém puder me ajudar a resolve-las ficarei grata.Alguém poderia me explicar response.buffet;cusor type;locktypeTenho algo aqui mas tá escrito de forma difícilSe alguém puder dar alguns explos ficarei muito gratavlw abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ju_rezende Postado Abril 1, 2006 Autor Denunciar Share Postado Abril 1, 2006 já procurei a respeito mas não achei, será qua alguém poderia me dar uma ajudinha? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 .Andreia. Postado Abril 1, 2006 Denunciar Share Postado Abril 1, 2006 você não deve ter achado porque estão escritas erradas, mas aí vai alguns links que pode lhe ajudar:Response.BufferCursorType e Lockype Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ju_rezende Postado Abril 1, 2006 Autor Denunciar Share Postado Abril 1, 2006 Valeu andreia pela dica, desculpe por digitar errado... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 .Andreia. Postado Abril 1, 2006 Denunciar Share Postado Abril 1, 2006 sem problema ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ju_rezende Postado Abril 2, 2006 Autor Denunciar Share Postado Abril 2, 2006 Adreia estou com um probleminha, entrei nos links que me disse, só que ele explica para quem já sabe para que o cursortype e locktype servem, eu preciso entender primeiro para que cada um serve para depois entender suas propriedades.....Será que poderia só me dizer para que serve cada um dele , eu poder enterder o resto depois.......Olha a definição que eu tenho de cursor typeeste parametro opcinal especifica o tipo de cursor que o provedor de dados poderá utilizar na abertura do Recordset.agora a definiç´~ao de locktypeeste parametro opcional especifica o tipo de lock que o provedor de dados poderá utilizar na abertura do recordset.mas só tem um problma, não entendo nehum dos dois pela definição que tenho.....e por isso não consigo entender os tipos de cursores e de locktypeGrata mesmo pela atenção Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ju_rezende Postado Abril 3, 2006 Autor Denunciar Share Postado Abril 3, 2006 me ajudem por favor Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Abril 3, 2006 Denunciar Share Postado Abril 3, 2006 você viu essa parte?CursorType Propriedade que define o tipo de cursor a ser aberto: AdOpenDynamic = melhor tipo de cursor e também o mais caro (exige mais do servidor para mante-lo). Consulta abertas com esse tipo de cursor as linhas do banco não são lidas e sim acessadas dessa forma é possível pegar atualizações, deleções e INSERÇÕES de outros usuários. O Access não da suporte para esse tipo de cursor. AdOpenForwardOnly = este cursor é somente de avanço e também o cursor default(caso você não especifique o tipo de cursor esse será definido automaticamente).Este cursor não permite retornar nas linhas acessadas só pode ser percorrido para frente. AdOpenKeyset = este cursor associa um número para cada linha acessada, ao ser solicitado a linha ele acessa o banco, dessa forma com esse cursor é possível pegar alterações e deleções numa aplicação multiusuario.Esse seria o melhor cursor para o Access. adOpenStatic = este cursor efetua uma copia do banco como se fosse uma foto (snapshot). Não pega alterações nem deleções. Controle de Concorrência (LockType) Propriedade que define o tipo de bloqueio do registro: AdLockReadOnly= Use este tipo de bloqueio para abrir um cursor somente leitura.Neste caso não será possível alterar ou deletar o registro.Normalmente este cursor é utilizado somente para exibir os dados para o usuário. AdLockOptimistic= Esta é a técnica mais comum de bloqueio.O Banco de dados coloca um bloqueio na(s) linha(s) enquanto a(s) atualiza. AdLockPessimistic= Esta é a forma mais rígida de controle de concorrência.A linha é bloqueada enquanto o cursor estiver aberto. AdLockBatchOptimistic= Alguns aplicativos podem descarregar um conjunto de registro para o cliente, cortar a conexão com o servidor, atualizar várias linhas e depois tentar gravar todas as alterações no banco de dados estabelecendo nova conexão.Este método é usado com conjuntos de registros desconectados. O controle de concorrência determina o que acontecerá quando dois usuários tentarem atualizar a mesma linha ao mesmo tempo.No entanto não basta configurar as propriedades do cursor para construir aplicações multiusuarios, primeiro deve ter a política de concorrência do aplicativo.Antes de iniciar um projeto multiusuário deve-se traçar a estratégia de concorrência, primeiro verificar se existe a concorrência ou se o sistema é somente para consulta (o que é pouco provável) deva forma após essa avaliação analisar o tipo de cursor que melhor atenda a sua concorrência. Por exemplo: Dois usuários acessam o mesmo registro numa interface que é possível alterar o registro.Neste caso definindo de forma precisa os cursores somente um usuário vai conseguir alterar, caso isso seja ao mesmo tempo ou então o primeiro usuário altera, e o segundo quando for alterar vai ser a partir dos dados iniciais (sem a alteração do primeiro usuário), ou seja, não existe política de concorrência e um aplicativo assim seria uma "Torre de Babel". O que poderia ser feito acima seria abrir o cursor com um bloqueio pessimista, ou seja, a linha acessada fica bloqueada enquanto estiver aberto o cursor. Dessa forma somente um usuário iria ter acesso ao registro para editá-lo.Mas esse tipo de bloqueio é perigoso, caso o usuário abra o registro e depois vai tomar um cafezinho o registro fica preso para todos os demais usuários. Uma solução que proponho para um caso assim seria fazer uma interface de visualização do registro, com um botão para alterar o registro abrindo assim a janela que permite alterar.Dessa forma o registro no banco teria um campo que indicaria se o registro está sendo editado ou não.Assim se dois usuários ao mesmo tempo tentarem editar o mesmo registro somente para um deles a tela de edição será aberta, para o outro teria uma mensagem de bloqueio que pode ser tratada com uma mensagem amigável tipo: Registro sendo editado no momento. Com essa solução o registro não fica bloqueado para leitura. Para entender melhor, suponha um sistema com duas janelas.Na primeira mostra em uma listview todos os clientes cadastrados, então ao selecionar um cliente abre outra janela com os dados desse cliente.Normalmente ao visualizar esses dados o programador aproveita a mesma janela para alterações colocando um botão "Alterar". Se neste caso ao abrir o cursor para carregar os dados do cliente for um cursor com bloqueio pessimista o registro ficará bloqueado inclusive para leitura pois não será possível abrir dois cursores pessimista para o mesmo registro.Por isso deve-se tomar cuidado ao usar cursores pessimista. Para um caso desse tipo, basta o programador mudar os tipos de cursores, não seria necessário alterar a interface. Quando o usuário selecionar o registro na primeira janela abre um cursor somente leitura, carrega todos os campos e fecha o cursor. No botão "Alterar" abre o cursor novamente neste caso com bloqueio otimista efetua a alteração e fecha o cursor.Assim o registro praticamente não ficaria bloqueado, somente no instante do UPDATE. Nos próximos artigos vou colocar exemplos de códigos explicados, abaixo posto um exemplo simples somente para não ficarmos só na teoria. Em Modulo Public Const pConsNomeBanco As String = "Banco.mdb" 'Nome do Banco de DadosPublic Const pConsSenhaBanco As String = "minhasenha" 'Senha do Banco de DadosPublic pVarConBanco as New ADODB.ConnectionPublic pVarRegBanco As New ADODB.RecordsetPublic pVarPathBanco As String 'Caminho do Banco de DadosNa função Main ou no Load do primeiro Form da aplicação If Not Conexao_Banco(pConsNomeBanco,pVarPathBanco,pConsSenhaBanco) Then EndExemplo para Leitura:With pVarRegBanco .CursorLocation = adUseServer .Open "Select * from Grupo_Produto order by IdGrupo",pVarConBanco, adOpenStatic, adLockReadOnly End WithPrimeiro define se o cursor será do lado cliente ou do servidor.Na segunda linha pelo evento OPEN coloca o comando SQL, depois o variável de conexão seguido do Tipo do cursor e do Tipo de bloqueio usado. Esse tipo de consulta seria para carregar um Grid.No termino de carregar o Grid deve fechar o cursor. OBS: Evite ao máximo ficar com o cursor aberto, sempre tenha o controle de abrir e fechar o cursor, manter cursor aberto além de caro para o servidor pode numa queda de luz aumenta as chances de corromper a base de dados. Exemplo para Update: With pVarRegBanco .CursorLocation = adUseServer.Open "Select IdMesa From ContaMesa where IdMesa=" & RegSelecionado & "", pVarConBanco, adOpenStatic, adLockOptimistic If Not .EOF Then'Se retorna verdadeiro então não achou o registro .MoveFirst 'Posiciona para o primeiro registro retornado Do While Not (.EOF) 'Enquanto não chegar no final !IdMesa = 0 ' Efetua a alteração de IdMesa para 0 .Update 'Efetua o Update para o registro acessado .MoveNext 'Avança com o cursor. Loop End If .Close 'Fecha o cursorEnd WithRepare que neste exemplo o tipo do bloqueio foi adLockOptimistic pois é para efetuar alterações.Essa é apenas uma forma de alterar registro pelo ADO, poderia simplesmente colocar a instrução SQL UPDATE para isso, no entanto caso a instrução UPDATE não encontrar o registro não acontece nada, nem mensagem de erro.Fazendo a alteração igual ao exemplo acima é possível saber se te fato houve ou não alteração.O código acima apenas trata o erro se não achar o registro, mas caso o registro não seja achado não retorna uma mensagem para o usuário. O mesmo problema ocorre no caso da Deleção, se for através da instrução SQL , caso o registro não exista não ocorre nada.Por isso eu não uso as instruções UPDATE e DELETE do SQL, somente uso SELECT e INSERT.As alterações e deleções faço através das propriedades do ADO Exemplo de Deleção: With pVarRegBanco .CursorLocation = adUseServer .Open "Select IdMesa From Mesa where IdMesa=" & RegSelecionado & "", pVarConBanco, adOpenStatic, adLockOptimistic .Delete adAffectCurrent .Close End WithA propriedade adAffectCurrente seria deletar o cursor acessado.Caso a consulta possa retornar mais de uma registro faça um Loop como o do exemplo da alteração colocando .Delete adAffectCurrente no lugar do .Update. Outro detalhe as consultas SQL não foram abertas usando o curinga (*), se utilizar o curinga não tem problema o código funcionária da mesma forma, no entanto iria retornar campos desnecessário, resultando maior trafego na rede sem necessidade.Por isso evite abrir cursores com curinga (*) desnecessariamente, use o curinga quando de fato for para retornar todos os campos de um registro, como por exemplo, exibir um registro para o usuário. Um Exemplo de Inserção: With pVarRegBanco .CursorLocation = adUseServer .Open "Insert Into Mesa values(" & Trim(FTxtIdMesa.text) & "," & CmbFumantes.ItemData(CmbFumantes.ListIndex) & ",'" & Trim(FTxtLugares.text) & "' ,0,1,'" & Trim(TxtLocalizacao.text) & "' )", pVarConBanco.Conection, adOpenStatic, adLockOptimistic End WithBem simples não? Basta usar o comando SQL, com a atenção para o tipo de bloqueio, neste caso "sempre"o otimista.Existe outra forma de incluir registro que seria através das propriedades do ADO usando o ADDNEW, no entanto não acho bom usá-lo, pois ele cria um registro no caso com todos os campos com NULL e depois atribui para cada campo os valores (igual ao UPDATE) e no final chama o evento do ADO .UPDATE, ou seja, a inserção pelo ADO ele simplesmente cria um novo registro e depois o altera.Caso a luz acabe justamente quando tiver sendo atribuído os valores aos campos você terá no seu banco um registro com campos NULL mesmo que tenha configurado para o campo não receber nulo.Sendo assim acho muito mais eficaz usar a instrução SQL INSERT para inserir. No próximo artigo continuamos a abordar o ADO com mais exemplos, e também vamos abordar as transações. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ju_rezende Postado Abril 3, 2006 Autor Denunciar Share Postado Abril 3, 2006 Nem sei como agradecer mesmo.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
ju_rezende
Olá pessoal tenho algumas duvidas de asp, se alguém puder me ajudar a resolve-las ficarei grata.
Alguém poderia me explicar
response.buffet;
cusor type;
locktype
Tenho algo aqui mas tá escrito de forma difícil
Se alguém puder dar alguns explos ficarei muito grata
vlw abraços
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.