sábado, 2 de julho de 2011

Camada de acesso a Banco de Dados - Visual Basic

Visando facilitar o dia-a-dia dos desenvolvedores estou disponibilizando essa camada de acesso a banco de dados Sql Server. 


Todas os métodos retornam um type com as seguintes informações:

Situacao ("0" - OK; "1" - Duplicado; "2" - Inexistente; 9 - "Erro")
Mensagem (Quando situação = "9", retorna a mensagem do erro) 
rsDadosRetorno (Recordset com os dados retornado)
CaminhoDownloadArquivo (Caminho onde o arquivo foi baixado do banco de dados)


Abaixo listo as assinaturas dos métodos que constam nessa camada: 



[Estabelece conexão com o Banco de Dados]
Public Function AbreConexao(ByVal p_sServidor As String, ByVal p_sBanco As String, ByVal p_sUsuario As String, ByVal p_sSenha As String, ByVal p_iConexao As Integer, Optional ByVal p_iTimeOutConexao As Integer = 30, Optional ByVal p_iTimeOutComando As Integer = 360) As Variant
 

p_sServidor  = Nome ou Ip do Servidor
p_sBanco Nome do Banco de Dados
p_sUsuario Nome do Usuário do Banco de Dados
p_sSenha  Senha do Usuário do Banco de Dados
p_iConexao Número da Instância da Conexão
p_iTimeOutConexao = Tempo limite para estabelecer conexão em segundos (Valor padrão: 30)
p_iTimeOutComando = Tempo limite para executar um comando em segundos (Valor padrão: 360)


[Fecha a conexão com o Banco de Dados]
Public Function FechaConexao (ByVal p_iConexao As Integer)


p_iConexao Número da Instância da Conexão


[Executa um comando]
Public Function ExecutaComando(ByVal p_iConexao As Integer, ByVal p_sSQL As String, Optional ByVal p_bUsaBeginTran As Boolean = True, Optional ByVal p_TipoCursorRecordset As Integer = 3) As Variant


p_iConexao Número da Instância da Conexão
p_sSQL Comando a ser executado (INSERT, SELECT, UPDATE, STORED PROCEDURE, CREATE, DROP entre outros)
p_bUsaBeginTran = True (-1) abre uma transação (Valor Padrão); False (0) não abre uma transação
p_TipoCursorRecordset = Tipo de Cursor do Recordset (0 - Somente Leitura; 1 - Não Visualiza Registros excluídos por outros usuários; 2 -Dinâmico; 3 - Estático)


[Confirma a execução do comando se existir uma transação aberta]
Public Function Commit(ByVal p_iConexao As Integer) As Variant


p_iConexao Número da Instância da Conexão


[Desfaz a execução do comando se existir uma transação aberta]
Public Function Rollback(ByVal p_iConexao As Integer) As Variant


p_iConexao Número da Instância da Conexão


[Grava um arquivo no banco de dados]
Public Function GravaArquivo(ByVal p_iConexao As Integer, ByVal p_sSQL As String, ByVal p_sNomeCampo As String, ByVal p_sCaminhoArquivo As String) As Variant


p_iConexao Número da Instância da Conexão
p_sSQL = Consulta (Select) apontando para o registro onde será salvo o arquivo
p_sNomeCampo = Nome do campo onde será gravado o arquivo
p_sCaminhoArquivo = Caminho completo do arquivo que será salvo


[Baixa o arquivo do banco de dados]
Public Function BaixaArquivo(ByVal p_iConexao As Integer, ByVal p_sSQL As String, ByVal p_sNomeCampo As String, ByVal p_sCaminhoArquivoDownload As String) As Variant 


p_iConexao Número da Instância da Conexão
p_sSQL = Consulta (Select) apontando para o registro onde será salvo o arquivo 
p_sNomeCampo = Nome do campo onde será gravado o arquivo
p_sCaminhoArquivoDownload = Caminho completo do arquivo que será baixado. Poderá recer outro nome





Exemplo em Visual Basic:


    Dim vRetorno As Variant
    Dim objBanco As New BancoDeDados.SqlServer
    Dim iConexao As Integer
   
    iConexao = 1
   
    'Abertura de Conexao
    vRetorno = objBanco.AbreConexao("localhost", "master", "sa", "", iConexao)
    If vRetorno.Situacao = 0 Then
        MsgBox "Banco de Dados conectado"
    Else
        MsgBox "Problema na Conexao. Erro = " & vRetorno.Mensagem
        Exit Sub
    End If
   
    Set vRetorno = Nothing
   
    'Criacao de Tabela
    vRetorno = objBanco.ExecutaComando(iConexao, "CREATE TABLE USUARIO (ID INT  PRIMARY KEY, NOME VARCHAR(50), FOTO IMAGE)", False)
    If vRetorno.Situacao = 0 Then
        MsgBox "Tabela criada com sucesso"
    Else
        MsgBox "Problema na criacao da tabela. Erro = " & vRetorno.Mensagem
    End If
   
    Set vRetorno = Nothing
   
    'Inclui registro
    vRetorno = objBanco.ExecutaComando(iConexao, "INSERT INTO USUARIO (ID,NOME) VALUES (1, 'JOAO')")
    If vRetorno.Situacao = 0 Then
        Call objBanco.Commit(iConexao)
        MsgBox "Usuario incluido com sucesso"
    ElseIf vRetorno.Situacao = 1 Then
        MsgBox "Usuario ja existe"
    Else
        MsgBox "Problema na inclusao. Erro = " & vRetorno.Mensagem
    End If
   
    Set vRetorno = Nothing
   
    'Grava arquivo no banco
    vRetorno = objBanco.GravaArquivo(iConexao, "SELECT FOTO FROM USUARIO WHERE NOME = 'JOAO'", "FOTO", "C:\IMAGEM.JPG")
    If vRetorno.Situacao = 0 Then
        MsgBox "Arquivo gravado com sucesso"
    ElseIf vRetorno.Situacao = 2 Then
        MsgBox "Usuario nao encontrado"
    Else
        MsgBox "Problema no upload do arquivo. Erro = " & vRetorno.Mensagem
    End If
   
    Set vRetorno = Nothing
       
    'Consulta os dados da Tabela
    vRetorno = objBanco.ExecutaComando(iConexao, "SELECT * FROM USUARIO", False, 0)
    If vRetorno.Situacao = 0 Then
        Do While Not vRetorno.rsDadosRetorno.EOF
            MsgBox vRetorno.rsDadosRetorno.fields("NOME")
       
            vRetorno.rsDadosRetorno.MoveNext
        Loop
    ElseIf vRetorno.Situacao = 2 Then
        MsgBox "Usuario nao encontrado"
    Else
        MsgBox "Problema na Consulta. Erro = " & vRetorno.Mensagem
    End If
   
    Set vRetorno = Nothing
   
    'Grava arquivo no banco
    vRetorno = objBanco.BaixaArquivo(iConexao, "SELECT FOTO FROM USUARIO WHERE NOME = 'JOAO'", "FOTO", "C:\FOTO_BAIXADA.JPG")
    If vRetorno.Situacao = 0 Then
        MsgBox "Arquivo baixado do banco de dados com sucesso"
    ElseIf vRetorno.Situacao = 2 Then
        MsgBox "Usuario nao encontrado"
    Else
        MsgBox "Problema no upload do arquivo. Erro = " & vRetorno.Mensagem
    End If
   
    Set vRetorno = Nothing
   
    'Fecha conexao
    Call objBanco.FechaConexao(iConexao)
   
    MsgBox "Banco de dados desconectado"



Nenhum comentário:

Postar um comentário