Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

VB: algumas funções sempre úteis

Nas atividades cotidianas lidando com banco de dados, é comum o programador ter de formatar datas para introduzir em consultas SQL, testar por valores nulos presentes em campos de recordsets, substituir vírgulas por pontos antes de introduzir um valor fracionado em consulta SQL. Para facilitar este trabalho, abaixo listo  o código fonte de algumas funções que cumprem estas tarefas e aliviam o trabalho de codificar estas tarefas sempre que elas se fizerem necessárias. Você pode tê-las em um módulo padrão que é introduzido em cada projeto novo ou criar uma dll para contê-las como membros de uma classe Global Multiuse.

A função NzNumber é usada para atribuir valores numéricos retornados em um recordset a variáveis do programa. Se o valor do campo for nulo, a função retorna 0 ou um valor estipulado no argumento opcional vOutValue. Se o valor do campo não for nulo, a função retorna o próprio valor.

Public Function NzNumber(vInValue As Variant, _
        Optional vOutValue As Variant) As Long

    Dim lngOutValue As Long

    If IsMissing(vOutValue) Then
        lngOutValue = 0
    Else
        lngOutValue = vOutValue
    End If
    If IsNull(vInValue) Then
        NzNumber = lngOutValue
    Else
        NzNumber = vInValue
    End If

End Function

Exemplo de uso: lngVariavel = NzNumber(rs("Numero")) , onde rs("Numero") é um campo numérico que pode ser nulo no recordset rs.

A seguir, a função NzString faz o mesmo que NzNumber, porém para valores do tipo string.

Public Function NzString(vInValue As Variant, _
        Optional vOutValue As Variant) As String

    Dim strOutValue As String

    If IsMissing(vOutValue) Then
        strOutValue = ""
    Else
        strOutValue = vOutValue
    End If
    If IsNull(vInValue) Then
        NzString = strOutValue
    Else
        NzString = vInValue
    End If

End Function

A função StrToDB é usada para preparar valores do tipo string colhidos de campos de formulários a serem inseridos no corpo de consultas SQL poupando o trabalho de testar pelo que deve ser escrito: ",'" & variável & "'" ou ",NULL", quando o campo tiver que ser nulificado nos casos de string vazia. Caso você queira um outro valor para quando a string estiver vazia, informe-o no parâmetro opcional strOutPut; se não quiser a vírgula antes do valor, informe "" no parâmetro opcional PrefixComma.


Public Function StrToDB(strArg As String, _
    Optional strOutPut As String = "NULL", _
    Optional PrefixComma As String = ",") As String

    If Len(strArg) Then
        StrToDB = PrefixComma & "'" & strArg & "'"
    ElseIf UCase(strOutPut) <> "NULL" Then
        StrToDB = PrefixComma & "'" & strOutPut & "'"
    Else
        StrToDB = PrefixComma & strOutPut
    End If

End Function

Exemplo de uso: 

strSql = "INSERT INTO CLIENTES (Nome, CPF, Endereco, Fone) VALUES (" & StrToDB(txtNome.Text,, "") & StrToDB(txtCPF.Text) & StrToDB(txtEndereco.Text) & StrToDB(txtFone.Text) & ")"  
Repare que, para o primeiro campo, foi passada uma string vazia no argumento PrefixComma para evitar que uma vírgula (default) fosse posta antes do primeiro valor.

A função abaixo pressupõe que o você usa a vírgula como símbolo decimal. É usada para transferir, para consultas SQL, as strings colhidas de campos de formulários representando valores numéricos poupando o trabalho de testar pelo que deve ser escrito: o valor do campo, zero ou 'NULL'. Pressupõe que você quer introduzir NULL na consulta quando o valor for 0 ou vazio, mas se quiser retornar um outro valor nestes casos, informe-o no parâmetro opcional strOutPut; se não quiser a vírgula antes do valor (primeiro valor), informe "" no parâmetro opcional PrefixComma.

Public Function NumToDB(ByVal strArg As String, _
    Optional strOutPut As String = "NULL", _
    Optional PrefixComma As String = ",") As String

    Dim strwk As String

    strwk = Trim(strArg)
    If Len(strwk) = 0 Then
        NumToDB = PrefixComma & strOutPut
    ElseIf Not IsNumeric(strwk) Then
        Err.Raise vbObjectError, "NumToDB", "Valor não numérico."
    ElseIf CDbl(strwk) = 0 Then
        NumToDB = PrefixComma & strOutPut
    Else
        strwk = Replace(strwk, ".", "")
        NumToDB = PrefixComma & Replace(strwk, ",", ".")
    End If

End Function

A próxima função é DataSQL. É usada para formatar a data e introduzir os caracteres # no início e fim da string. No caso de a variável passada conter 0, a string retornada é "NULL". Como você pode precisar de passar diferentes formatos de data, o argumento Formato é um enumeração que facilita a escolha do identificador de formato na hora da digitação. Veja abaixo o código da enumeração e da função.

Public Enum DATASQL_FORMATS
    DSQL_DATE_TIME = 1
    DSQL_SHORT_DATE = 2
    DSQL_SHORT_TIME = 3
End Enum

Public Function DataSQL(Data As Date, Formato As DATASQL_FORMATS) As String

    Dim ret As String
    Dim dd As String, mm As String, yyyy As String
    Dim hh As String, nn As String, ss As String

    If Data = 0 Then
        DataSQL = "NULL"
        Exit Function
    End If

    Select Case Formato
        Case DSQL_SHORT_DATE
            dd = Format(Day(Data), "00")
            mm = Format(Month(Data), "00")
            yyyy = Format(Year(Data), "0000")
            ret = "#" & mm & "/" & dd & "/" & yyyy & "#"
        Case DSQL_DATE_TIME
            dd = Format(Day(Data), "00")
            mm = Format(Month(Data), "00")
            yyyy = Format(Year(Data), "0000")
            ret = "#" & mm & "/" & dd & "/" & yyyy
            hh = Format(Hour(Data), "00")
            nn = Format(Minute(Data), "00")
            ss = Format(Second(Data), "00")
            ret = ret & " " & hh & ":" & nn & ":" & ss & "#"
        Case DSQL_SHORT_TIME
            hh = Format(Hour(Data), "00")
            nn = Format(Minute(Data), "00")
            ss = Format(Second(Data), "00")
            ret = "#" & hh & ":" & nn & ":" & ss & "#"
        Case Else
            Err.Raise vbObjectError, "DataSQL", "Formato de data inválido."
    End Select

    DataSQL = ret

End Function