[firebase-br] Mais duvidas

Alexandre [FiveTech] alexandre em fivetech.info
Qui Jan 22 14:32:31 -03 2009


   Boa tarde a todos,

   Só pelo código que mandou não dá para ter muita certeza do que está 
acontecendo, mas concordo com o Wilson. Provavelmente você está tentando 
abrir mais de uma conexão com o mesmo nome ao mesmo tempo.

   Faço quase igual ao Wilson, porém utilizo mais funções que facilitam 
durante o código.

Tenho um módulo com uma função Sub Main(). Nesta função abro a única 
conexão do sistema:

Public DB As ADODB.Connection
Public sSql As String

Public Sub Main()
    If App.PrevInstance Then
        MsgBox "Este programa já está sendo executado.", vbCritical
        End
    Else
        Dim bStatus As Boolean
        Call ConectaDB(bStatus)
        If bStatus = True Then
            frmLogin.Show
        Else
            End
        End If
    End If
end sub

Função ConectaDB

Public Function ConectaDB(ByRef bStatus As Boolean) As Boolean
    On Error GoTo ERR_conectarDB
    Call LeArquivoInicial   'Esta função busca em um arquivo .INI alguns 
parametros do banco
   
    sConnect = "DRIVER=Firebird/InterBase(r) driver; "
    sConnect = sConnect & "UID=SYSDBA; "
    sConnect = sConnect & "PASSWORD=MASTERKEY; "
    sConnect = sConnect & "DATABASE=" & sDataBase    'sDataBase é o 
local e nome do banco que veio pela função LeArquivoInicial()
   
    Set DB = New ADODB.Connection
    DB.ConnectionTimeout = 180 'Segundos
    DB.CommandTimeout = 180    'Segundos
    DB.CursorLocation = adUseClient
    DB.Open sConnect
    bStatus = True
    Exit Function

ERR_conectarDB:

    Select Case ERR
        Case 3146
            Beep
            Call MsgBox(Error(0), 16, "Atenção")
        Case Is <> 0
            Beep
            Call MsgBox("Ocorreu o erro " & ERR & ", " & 
ERR.Description, 16, "Atenção")
            End
    End Select

End Function


E essa aqui é a função que utilizo em todo o sistema para executar as 
selects no banco.

Sub Query(ByRef rs, sSql)

' Executa uma query no banco especificado
' Parametros: rs - variavel ADODB RecordSet
'             sql - comando sql que será executado no banco
'             db - variavel ADODB Connection
'
' Exemplo de chamada da função: call query(rsPesquisa,ssql)
'                         onde: rsPesquisa receberá o resultado da select
'                               ssql deve conter a select desejada
  
    On Error Resume Next
   
    Set rs = New ADODB.Recordset
    rs.Open sSql, DB, 3, 3, 1  'adOpenStatic, adLockOptimistic, adCmdText
    If ERR.Number <> 0 Then
        MsgBox Sql & vbCrLf & ERR.Description & vbCrLf & sSql
    End If
   
End Sub


Abraços,

Alexandre Sanches Bazan




Cmte Wilson wrote:
> Julio, faço da seguinte maneira:
>
> abertura de conexão feita numa procedure em um módulo a parte
> Tenho um arquivo .txt onde coloco os dados que preciso (ip do 
> servidor, path até o banco, e um metodo que pode ser obdc ou oledb)
>
>   Global Conn As New ADODB.Connection
>    Set Conn = CreateObject("Adodb.connection")
>    Conn.CursorLocation = adUseServer
>    If vmetod = "1" Then
>       Conn.Open "DRIVER=Firebird/Interbase(r) driver; UID=SYSDBA; 
> PWD=masterkey; DBNAME=" & vipip & ":" & vcami & "\TRANSPORTE.FDB"
>    ElseIf vmetod = "2" Then
>       Conn.Open "Provider=IbOleDb.1;Location=" & vipip & ";Data 
> Source=" & vcami & "\TRANSPORTE.FDB;User 
> ID=SYSDBA;Password=masterkey;Extended Properties='sql 
> Dialect=3;Character Set=ISO8859_1;Collate = PT_BR'"
>    Else
>    msgbox "Erro"
>   endif
>
>
> minhas consultas sao da seguinte forma:
> como já tenho a conexão aberta o mdiform só realizo os select, insert, 
> update,...
>                     Dim teste As New ADODB.Recordset: Set teste = 
> CreateObject("ADODB.RECORDSET")
>                    Set teste = Conn.Execute("Select 
> gen_id(gen_aluno,1) from rdb$database")
>                    txtcodigo.text = teste!gen_id
>                    teste.Close: Set teste = Nothing
>                    txtnome.SetFocus
>
> ou um outro exemplo
>
>        Dim setor As New ADODB.Recordset: Set setor = 
> CreateObject("ADODB.RECORDSET")
>        Set setor = Conn.Execute("Select A.dataalteracao, 
> A.datacadastro, A.hora, A.codigooperador, A.codigoaluno, A.endereco, 
> A.rg, A.cpf, A.telefone, A.fax, A.celular, A.nascimento, A.nome, 
> A.pai, A.mae, A.km, A.casaescola, A.cidadeviagem, A.codigobairro, 
> A.codigosituacao, A.codigotransporte, " & _
>                                 "S.descricaosituacao, " & _
>                                 "B.descricaobairro, " & _
>                                 "T.descricaotransporte " & _
>                                 "from ALUNO A, SITUACAO S, TRANSPORTE 
> T, BAIRRO B " & _
>                                 "where A.codigoaluno=" & 
> txtcodigo.text & "  " & _
>                                 "and A.codigosituacao=S.codigosituacao 
> " & _
>                                 "and 
> A.codigotransporte=T.codigotransporte " & _
>                                 "and A.codigobairro=B.codigobairro " & _
>                                 "order by A.codigoaluno asc")
>        If Not setor.EOF Then
>           msknascimento.Mask = ""
>           mskrg.Mask = ""
> .....
>
> Espero ter auxiliado.
> Wilson
>
>
>
> Julio Oliveira escreveu:
>> Gente desculpe se estou enchendo o saco de vocês com duvidas bobas, 
>> já que
>> tenho acompanhado o fórum e as perguntas são bem especificas e difíceis,
>> pelo menos pra mim neste momento, porem é o seguinte :
>>
>>  
>>
>> Estou reescrevendo uma aplicação em VB6 que eu tenho aqui, de Software
>> Hoteleiro, que está rodando perfeitamente com access e DAO, porem 
>> resolvi
>> utilizar e ao mesmo tempo estudar o FIREBIRD com o ADO, já era hora de
>> migrar. Bom meu primeiro dilema foi acessar o firebird, consegui 
>> resolver
>> depois de muito penar, agora estou com o segundo problema que é o 
>> seguinte.
>> O meu sistema quando inicia primeiramente ele pede um login e uma 
>> senha de
>> acesso que é o acesso ao SISTEMA e nao ao banco de dados, perfeito, o
>> usuario digita login e senha e eu acesso a tabela de usuarios no 
>> firebird
>> perfeitamente sem problema nenhum, e autentico a entrada do mesmo, em
>> seguida eu executo um MDIFORM que é onde existe o menu da aplicação e 
>> acesso
>> novamente o FIREBIRD a fim de pegar os seus acessos, e dar enable ou 
>> nao nas
>> opções do menu. Bom o meu problema esta na hora em que vou abrir o 
>> recordset
>> deste acesso, pois, o VB me retorna o erro Runtime error
>> -2147467259(80004005) erro desconhecido e nao abre de forma nenhuma o
>> recordset, abaixo forneço como estou abrindo o RS.
>> Function SETARS()
>> dim mbanco as adodb.connection
>> dim mparam as adodb.recordset
>> dim CONEXAO as string
>> CONEXAO = "Provider=IbOleDb;Location=x.ddns.com.br:;Data
>> Source=d:\dados\database\hotel.gdb;user
>> id=SYSDBA;password=masterkey;Extended Properties=Character 
>> Set=ISO8859_1;SQL
>> Dialect=3;User Role=;"
>> set mBanco = New ADODB.Connection
>> mBanco.CursorLocation = adUseClient
>> mBanco.Open funcoes.CONEXAO
>> Set mtabparam = New ADODB.Recordset
>> mtabparam.CursorType = adOpenStatic
>> mtabparam.CursorLocation = adUseClient
>> mtabparam.LockType = adLockPessimistic
>> mtabparam.Source = "SELECT * FROM USRTELAS WHERE USRID =" & 
>> FUNCOES.MCODUSER
>> mtabparam.ActiveConnection = funcoes.mBanco
>> mtabparam.Open
>> End Function
>>
>> O VALOR DE FUNCOES.MCODUSER é 1, pois bem é a mesma instrução de quando
>> autentico o usuario a unica coisa diferente é a instrução select que 
>> é em
>> outra tabela.
>>
>> Sera que alguem poderia me ajudar ou pelo menos tentar me dar uma luz 
>> do que
>> esta acontecendo ? isso ocorre com qualquer outra tabela que eu tente
>> acessar, ou seja, o primeiro acesso do meu sistema em qualquer tabela
>> funciona 100 % porem no segundo acesso em diante dá o erro mencionado
>> anteriormente, ja encontrei que esse erro poderia se referir a 
>> direitos das
>> tabelas, porem estou com o usuario ADMINISTRADOR do FIREBIRD e já 
>> conferi os
>> seus direitos e ele tem acesso a fazer tudo no BANCO e em QUALQUER 
>> TABELA.
>>
>> Pelo amor de deus, estou a ponto de desistir e voltar para o bom e 
>> velho DAO
>> com ACCESS onde tudo funcionava maravilhosamente bem (rsrsrsrsrs)...
>>
>> Obrigado a todos pela atenção.
>>  
>>
>>  
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use: 
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>   
>> ------------------------------------------------------------------------
>>
>>
>> No virus found in this incoming message.
>> Checked by AVG - http://www.avg.com Version: 8.0.176 / Virus 
>> Database: 270.10.12/1908 - Release Date: 21/1/2009 21:15
>>
>>   
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>





Mais detalhes sobre a lista de discussão lista