[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