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