none
Função para conectar em BD access2000 RRS feed

  • Pergunta

  • Estou usando uma função para conectar em um BD. Esta função esta dentro da CamadaDeNegocios ela é do tipo publica. Por favor se alguem puder dar uma olhada e conferir para ver se ela esta certa, desde já obrigada. Outra coisa estou com duvida tambem de como capturar e passar mensagem de erro da camadadenegocios para a camadadeapresentacao. 

    Public Function Conecta_Smadb() As OleDbConnection

    var_conectaDB.CreateCommand()

    var_conectaDB.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=C:\teste\testeDB.mdb"

    End Function

     

     

    quarta-feira, 17 de maio de 2006 15:28

Respostas

Todas as Respostas

  • Camila,

    O CreateCommand no seu código não tem função alguma, ele não é necessário aí. CreateCommand serve para devolver um objeto OleDbCommand instanciado e com a propriedade Connection já informada.

    Basicamente o que você está fazendo é fornecer uma ConnectionString a um objeto aparentemente de escopo de classe, a partir daí você poderá invocar o método Open dele para estabelecer a conexão. Outra coisa, você criou um Function então você deve devolver um valor - no caso um OleDbConnection. Se não há o que devolver como valor, deveria ser uma Sub, não uma Function.

    Normalmente eu deixo minhas exceptions ir subindo pelos métodos e camadas e se o objetivo é só exibir/logar o erro eu só o trato na camada de apresentação. A menos, é claro, que exista um código onde uma providência pode ser tomada antes ou que a avaliação do erro me coloque em condição de tentar um outro tratamento. Se não é o caso, eu deixo ele sair sem tratamento e o logo/exibo quando bater lá em cima, na apresentação.

    Abraços,
    Francisco
    Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    quarta-feira, 17 de maio de 2006 16:35
    Moderador
  • Francisco, tentei fazer do jeito que vc passou. Não entendi o esquema das exceptions, segue abaixo uma parte do codigo, se vc puder conferir desde ja obrigada.

    Private Sub Conecta_Smadb()

    var_conectaDB.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=C:\teste\testeDB.mdb"

    End Sub


    Public Sub Salva_Cliente(ByVal var_nome As String, ByVal var_endereco As String, ByVal var_fone As String)

    Dim comand_salva As New OleDbCommand

    Conecta_Smadb()  'chama função

    Try

    var_conectaDB.Open()

    With comand_salva

    .CommandText = "INSERT INTO PessoaTB(Nome, Endereco, Fone) VALUES (?,?,?)"

    .Parameters.Add(New OleDbParameter("Nome", OleDbType.VarChar, 40)).Value = var_nome

    .Parameters.Add(New OleDbParameter("Endereco", OleDbType.VarChar, 40)).Value = var_endereco

    .Parameters.Add(New OleDbParameter("Fone", OleDbType.VarChar, 40)).Value = var_fone

    .ExecuteNonQuery()

    End With

    var_conectaDB.Close()

    Catch mErro As Exception

    "aqui como eu faço"

    If var_conectaDB.State.Open Then

    var_conectaDB.Close()

    End If

    End Try

    End Sub

    quarta-feira, 17 de maio de 2006 17:12
  • Camila,

    Então, o que eu vou falar abaixo é o que eu faria, alguma empresas tem políticas diferentes quanto a isto:

    - Nas camadas mais abaixo (business, data, etc...), neste caso eu faria um Try...Finally:

    Try
         ' Código passível de erro
    Finally
         ' Providências para fechar recursos, mudar variáveis de controle, etc...
    End Try

    Eu não faria o Catch nas camadas mais abaixo, eu deixo o erro se propagar para o chamador, pois não há o que fazer aqui. Na camada de apresentação sim eu colocaria o Catch:

    Try
        ' Chamada de métodos de negócio passíveis de erro....
    Catch ex As Exception ' Ou outra exceção em específico...
        ' Trato o erro, seja logando ou o exibindo
    End Try

    Que é onde me faz sentido, pois eu posso exibir o erro e/ou logá-lo. Óbvio, há condições em que eu uso o Catch nas camadas mais abaixo, como quando eu posso reverter o erro ou quando eu quero mandar um erro meu para fora, algo que me confira mais informações no tratamento, mas normalmente a situação que eu descrevi acima é a mais recorrente.

    Abraços,
    Francisco
    Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    quarta-feira, 17 de maio de 2006 17:31
    Moderador
  • Francisco, agora eu entendi +/-. Só que ao executar o codigo esta dando um erro no "executenonquery". "system.invalid operation: executenonquery: connection property has not been initialized". Se vc dar uma olhada no codigo acima e conferir para ver se esta certo, obrigada.

     

     

     

    quarta-feira, 17 de maio de 2006 17:55
  • Camila,

    Faltou você fornecer o Connection para o Command:

    With comand_salva
    .Connection = var_conectaDB
    .CommandText = "INSERT INTO PessoaTB(Nome, Endereco, Fone) VALUES (?,?,?)"

    Abraços,
    Francisco
    Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    quarta-feira, 17 de maio de 2006 18:00
    Moderador
  • Francisco, valeu pela ajuda. Muito obrigada.
    quarta-feira, 17 de maio de 2006 18:08
  • Francisco, aconteceu uma duvida. Atraves das mensagens que vc me passou tentei montar a rotina, só que aconteceu uma duvida, como passar para a CamadaDeApresentacao que os dados foram incluidos com sucesso, por exemplo. Daí montei da forma abaixo e queria sua opnião. Desde já obrigada.

    ... 'codigo do programa que esta na CamadaDeNegocios

    .ExecuteNonQuery()

    End With

    var_conectaDB.Close()

    mErro = "OK"  'criei esta variavel do tipo string e que receberá "OK" se o codigo chegar aqui e será

                            filtrada pela CamadaDeApresentacao 

    Finally

    If var_conectaDB.State.Open Then

    var_conectaDB.Close()

    End If

    End Try

      

     

    quinta-feira, 18 de maio de 2006 15:55
  • Camila,

    Respondi para você na outra thread que você abriu, ok? :-)

    Abraços,
    Francisco
    Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx

    sexta-feira, 19 de maio de 2006 14:46
    Moderador