ERRO NA ABERTURA DA CONEXÃO DA BASE DE DADOS

MOREIRA 07/08/2017 04:26:38
#475632
Bom dia,
ao realizar uma query, retorna o erro [Ô]não há conexão[Ô]
[txt-color=#e80000]Additional information: Connection must be valid and open.[/txt-color]

porem, apenas ao tentar usar o using
 Using conexao As FbConnection = ConectarBD()
Dim sCmd As FbCommand
Dim sql As String
Dim ds As FbDataReader
sql = [Ô]SELECT LOGIN_USER FROM TBLOGIN[Ô]

sCmd = New FbCommand()
sCmd.Connection = conexao
sCmd.CommandText = sql
ds = sCmd.ExecuteReader
While (ds.Read)
MsgBox(ds.Item([Ô]LOGIN_USER[Ô]))
End While

End Using


segue a conexão com o banco
A conexão com o banco de dados funcionando certinho

  Public strConexao As FbConnection

Public Function ConectarBD() As FbConnection

Dim SB As New FbConnectionStringBuilder()
SB.Database = [Ô]D:\LUNOS\SCI\bin\Debug\BDADOS.FDB[Ô]
SB.UserID = [Ô]SYSDBA[Ô]
SB.Password = [Ô]masterkey[Ô]
SB.Dialect = 3
SB.Port = 3050
SB.DataSource = [Ô]192.168.0.20[Ô]
strConexao = New FbConnection(SB.ToString())

Try
If strConexao.State = ConnectionState.Closed Then
Cursor.Current = Cursors.WaitCursor
strConexao.Open()
Cursor.Current = Cursors.Default
End If

Catch ex As Exception
MessageBox.Show([Ô]Ocorreu um erro ao Estabelecer a Comunicação com o Banco de Dados, por favor verifique se todas as configurações[Ô] & [Ô]foram informadas corretamente![Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try

Return New FbConnection(SB.ToString)

End Function


DS2T 07/08/2017 08:05:54
#475633
Você esqueceu de chamar o método Open do objeto de conexão.
MARCELOKROL 07/08/2017 08:52:04
#475634
Resposta escolhida
Bom se vai usar do modo apresentado acima mude essa função para:
  
Public Function ConectarBD() As FbConnection
Dim SB As New FbConnectionStringBuilder()
SB.Database = [Ô]D:\LUNOS\SCI\bin\Debug\BDADOS.FDB[Ô]
SB.UserID = [Ô]SYSDBA[Ô]
SB.Password = [Ô]masterkey[Ô]
SB.Dialect = 3
SB.Port = 3050
SB.DataSource = [Ô]192.168.0.20[Ô]
dim strConexao = New FbConnection(SB.ToString())

Try
If strConexao.State = ConnectionState.Closed Then
Cursor.Current = Cursors.WaitCursor
strConexao.Open()
Cursor.Current = Cursors.Default
End If

Catch ex As Exception
MessageBox.Show([Ô]Ocorreu um erro ao Estabelecer a Comunicação com o Banco de Dados, por favor verifique se todas as configurações[Ô] & [Ô]foram informadas corretamente![Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try

Return strConexao

End Function


Obs. Não testei digitei direto no browser
KERPLUNK 07/08/2017 09:18:56
#475635
O que essa mensagem diz é que a conexão deve estar válida e aberta. Sugiro tentar entender o que está fazendo e não simplesmente copiar e colar código.
MOREIRA 07/08/2017 09:33:56
#475636
Citação:

:
Bom se vai usar do modo apresentado acima mude essa função para:

  
Public Function ConectarBD() As FbConnection
Dim SB As New FbConnectionStringBuilder()
SB.Database = [Ô]D:LUNOSSCIinDebugBDADOS.FDB[Ô]
SB.UserID = [Ô]SYSDBA[Ô]
SB.Password = [Ô]masterkey[Ô]
SB.Dialect = 3
SB.Port = 3050
SB.DataSource = [Ô]192.168.0.20[Ô]
dim strConexao = New FbConnection(SB.ToString())

Try
If strConexao.State = ConnectionState.Closed Then
Cursor.Current = Cursors.WaitCursor
strConexao.Open()
Cursor.Current = Cursors.Default
End If

Catch ex As Exception
MessageBox.Show([Ô]Ocorreu um erro ao Estabelecer a Comunicação com o Banco de Dados, por favor verifique se todas as configurações[Ô] & [Ô]foram informadas corretamente![Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try

Return strConexao

End Function


Obs. Não testei digitei direto no browser



assim não deveria funcionar. ?

retorna erro, imagem em anexo.

  Public strConexao As FbConnection

Public Function ConectarBD() As FbConnection

Dim SB As New FbConnectionStringBuilder()
SB.Database = [Ô]D:\LUNOS\SCI\bin\Debug\BDADOS.FDB[Ô]
SB.UserID = [Ô]SYSDBA[Ô]
SB.Password = [Ô]masterkey[Ô]
SB.Dialect = 3
SB.Port = 3050
SB.DataSource = [Ô]192.168.0.20[Ô]
strConexao = New FbConnection(SB.ToString()) [ô]OBS: strConexao coloquei como public - desculpa se estiver errado.

Try
If strConexao.State = ConnectionState.Closed Then
Cursor.Current = Cursors.WaitCursor
strConexao.Open()
Cursor.Current = Cursors.Default
End If

Catch ex As Exception
MessageBox.Show([Ô]Ocorreu um erro ao Estabelecer a Comunicação com o Banco de Dados, por favor verifique se todas as configurações[Ô] & [Ô]foram informadas corretamente![Ô], [Ô]Atenção![Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
Return New FbConnection()

End Function
MARCELOKROL 07/08/2017 09:40:05
#475637
mude a linha:
   dim strConexao = New FbConnection(SB.ToString()) 

para:
  dim strConexao as New FbConnection(SB.ToString()) 


Mas como o amigo KERPLUNK citou: procure entender o funcionamento da coisa, pois um CTRL+C e CTRL+V nao resolve problemas, so multiplica eles, sendo agora ou no futuro.
MOREIRA 07/08/2017 09:44:07
#475638
Citação:

:
O que essa mensagem diz é que a conexão deve estar válida e aberta. Sugiro tentar entender o que está fazendo e não simplesmente copiar e colar código.



O propósito é esse, entender como funciona a receita do bolo. e não simplesmente comer e encher o bucho.
por outro lado, perguntando que se aprende.



KERPLUNK 07/08/2017 11:12:12
#475639
Citação:

:
:
O que essa mensagem diz é que a conexão deve estar válida e aberta. Sugiro tentar entender o que está fazendo e não simplesmente copiar e colar código.

O propósito é esse, entender como funciona a receita do bolo. e não simplesmente comer e encher o bucho.
por outro lado, perguntando que se aprende.




Ok, você entende o que está acontecendo nesse código que você postou?
MOREIRA 07/08/2017 11:45:54
#475640
Citação:

:
:
:
O que essa mensagem diz é que a conexão deve estar válida e aberta. Sugiro tentar entender o que está fazendo e não simplesmente copiar e colar código.

O propósito é esse, entender como funciona a receita do bolo. e não simplesmente comer e encher o bucho.
por outro lado, perguntando que se aprende.




Ok, você entende o que está acontecendo nesse código que você postou?



bom vamos ao teste,

Armazena os [Ô]PARÂMETROS[Ô] da conexão
  Dim SB As New FbConnectionStringBuilder()
SB.Database = [Ô]D:\LUNOS\SCI\bin\Debug\BDADOS.FDB[Ô]
SB.UserID = [Ô]SYSDBA[Ô]
SB.Password = [Ô]masterkey[Ô]
SB.Dialect = 3
SB.Port = 3050
SB.DataSource = [Ô]192.168.0.20[Ô]



Recebe o caminho dos paramentros [Ô]base de dados[Ô]
  Dim strConexao As New FbConnection(SB.ToString()) 


!º é o segredo da coisa, onde ainda não entendi.. deveria receber a conexão como realizada.
  Return New FbConnection(strConexao.ToString) 


2º Ao abrir a conexão em outro formulário. informa que a conexão não é válida.
 Private Sub btn_entrar_Click(sender As Object, e As EventArgs) Handles btn_entrar.Click

Dim dr As FbDataReader
Using con As FbConnection = GetConnection()

---> aqui seria pra abrir a con.open

Dim sql As String = [Ô]SELECT LOGIN_USER FROM TBLOGIN[Ô]
Dim cmd As New FbCommand(sql, con)
cmd.CommandText = sql
dr = cmd.ExecuteReader

While (dr.Read)
MsgBox(dr.Item([Ô]LOGIN_USER[Ô]))
End While

End Using
End Sub


se estiver errado, por favor, desconsidere !!
MARCELOKROL 07/08/2017 12:48:50
#475642
Então...
  Public Function ConectarBD() As FbConnection 

é uma function, e sendo função deve retornar alguma coisa, nesse caso ela retorna um FbConnection

  Return New FbConnection(strConexao.ToString) 

Se você retornar desse modo estará retornado uma FbConnection com a string de conexão dentro, mais nada, e não seria necessário realizar a abertura do banco de dados:
   If strConexao.State = ConnectionState.Closed Then
Cursor.Current = Cursors.WaitCursor
strConexao.Open()
Cursor.Current = Cursors.Default
End If


Mas se voce retornar:
  Return strConexao 

Ai sim, estará retornando a conexão aberta e já pronta para usar.

outra coisa:
  Dim strConexao As New FbConnection(SB.ToString()) 

Aqui voce declara a variavel conexão e ja informa pra ela a string de conexão que será utilizada que, nesse caso pode ser declarada dentro da função, pois como ja citei acima, será retornado na função, inviabilizando manter uma variável publica.

  ---> aqui seria pra abrir a con.open 

não precisa abrir ela, pois a função já faz isso pra voce.

espero ter ajudado e ter sido claro.
Tópico encerrado , respostas não são mais permitidas