[firebase-br] Concorrência

Eduardo ev.leite em uol.com.br
Sex Abr 15 21:14:58 -03 2005


> Olá Pessoal, como podem ver pelo horário já estou maluco, mas vamos lá.
>
> Bom, estou com um pequeno problema que é o seguinte:
>    Tenho um componente que chama a base para efetuar uma consulta simples, 
> validação de usuário.
>    Este componente é feito em vb6 e está no COM+ "2003 server", sem 
> transação.
>    Se eu efetuar a chamada de duas maquinas diferentes ao mesmo tempo, o 
> objeto no com+ fica travado e acompanhando por log, vejo que abriu apenas 
> uma conexão no banco.
>    Efetuei diversos testes com vbs, com o isql e diversas chamdas externas 
> e funcionaram, porém faço a mesma coisa com o sql server e o problema não 
> se repete.
>
> Pergunta existe alguma configuração de provider ou banco que possa estar 
> me barrando ?
>
> Estou usando o Firebird 1.5 e Firebird ODBC driver v1.2 para a conexão.
>
> Segue o código para que você possam analisar, Obrigado Eduardo Venâncio.
>
>
>
> Public Function ObterNmFuncionarioLogin(ByRef msgErro As Variant, _
>                                        ByVal nm_login As Variant, _
>                                        ByVal nm_arquivo As String) As 
> Recordset
>
>    On Error GoTo ProcessaErr
>
>        NomeMetodo = "ObterNmFuncionarioLogin"
>
>        'envia a string de conexao para a class que trata a mesma
>        Dim objCnn As Object
>        Dim strSQL As String
>
>        Set objCnn = CreateObject("DataService.clsConnection")
>
>        strSQL = "SELECT tbf.cd_funcionario, tbf.nm_funcionario FROM 
> tbFuncionario tbf" & Chr(13)
>        strSQL = strSQL & "JOIN tbUsuarios tbu" & Chr(13)
>        strSQL = strSQL & "ON tbf.cd_funcionario = tbu.cd_funcionario" & 
> Chr(13)
>        strSQL = strSQL & "WHERE tbu.nm_login = '" & LCase(nm_login) & "'"
>
>        Set ObterNmFuncionarioLogin = objCnn.ExecutaQueryRs(msgErro, 
> strSQL, True, nm_arquivo)
>
>        If msgErro <> "" Then
>            GoTo ProcessaErr
>        End If
>
>        msgErro = ""
>
>        'destruindo o objeto
>        Set objCnn = Nothing
>
>    Exit Function
>
> ProcessaErr:
>
>    Set Erro = CreateObject("Erro.clsErro")
>
>    If msgErro = "" Then
>        msgErro = Err.Number & " - " & Err.Description & " - " & NomeMetodo
>    End If
>
>    Call Erro.GeraLogErro("CallCenter", 1000, msgErro, NomeServico, 
> NomeMetodo)
>
>    Set Erro = Nothing
>
> End Function
>
>
>
> Public Function ExecutaQueryRs(ByRef msgErro As Variant, _
>                               ByVal Query As String, _
>                               ByVal FechaBanco As Boolean, _
>                      Optional ByVal nm_arquivo As String) As Recordset
>
>    On Error GoTo ProcessaErr
>
>        Const NomeMetodo As String = "ExecutaQueryRs"
>
>        Dim rs As Object
>
>        Dim cn As Object
>        Set cn = CreateObject("adodb.connection")
>
>        cn.Open "DSN=teste"
>
>        Open App.Path & "\log.txt" For Append As #1
>            Print #1, "Abriu conexao = " & App.ThreadID
>        Close #1
>
>        Set rs = CreateObject("ADODB.Recordset")
>            rs.ActiveConnection = cn
>            rs.CursorLocation = 3 ' adUseClient
>            rs.CursorType = 0 ' adOpenForwardOnly
>            rs.LockType = 1 ' adLockReadOnly
>            rs.Open Query
>
>        Open App.Path & "\log.txt" For Append As #1
>            Print #1, "Depois do rs.Open = " & App.ThreadID
>        Close #1
>
>        Set ExecutaQueryRs = rs
>
>        Set cn = Nothing
>
>        Open App.Path & "\log.txt" For Append As #1
>            Print #1, "Fechou DB = " & App.ThreadID
>        Close #1
>
>    Exit Function
>
> ProcessaErr:
>
>        msgErro = Err.Number & " - " & Err.Description & " - " & msgErro
>
> End Function
>
>
> 







Mais detalhes sobre a lista de discussão lista