|
|
|
|
|
Dicas
|
|
Visual Basic (Datas/Números/Strings)
|
|
|
Título da Dica: Gravar data/hora em Access ou SqlServer
|
|
|
|
Postada em 11/2/2004 por Semmer
semmer@infoinsight.com.br
Aqui está uma função que pode resolver todos os problemas com formato de data/hora no momento de gravar num banco Access ou SqlServer. Passando como parâmetro o campo do formulário ou a variável que contém a data, a função retorna o formato correto para criar a instrução de Insert ou Update:
'No módulo: Public Function SqlDT(ByVal varData As Variant, Optional ByVal BancoAccess As Boolean = True, _ Optional ByVal Hora As Boolean = False) As String 'Retorna a varData convertida em expresão que a linguagem SQL entende: 'YYYY-MM-DD hh:mm:ss' 'BancoAccess = Quando é True indica que o banco é Access, False indica que é SqlServer 'Hora = Quando é True retorna a hora junto com a data, False retorna apenas a data SqlDT = "Null" If Not IsDate(varData) Then Exit Function Dim DtSql, DtAspas DtSql = CDate(varData) DtAspas = IIf(BancoAccess, "#", "'") SqlDT = DtAspas & Year(DtSql) & "-" & Format(Month(DtSql), "00") & "-" _ & Format(Day(DtSql), "00") & IIf(Hora, " " & Format(Hour(DtSql), "00") & ":" _ & Format(Minute(DtSql), "00") & ":" & Format(Second(DtSql), "00"), "") & DtAspas End Function
'No código do form - banco Access: Dim xSql xSql = "insert into tabela (cod, nome, emissao, gravacao) " _ & "values (" & txtCod.Text & ", '" & txtNome.Text & "', " _ & SqlDT(txtEmissao.Text) & ", " & SqlDT(Now, , True) & ")"
'No código do form - banco SqlServer: Dim xSql xSql = "insert into tabela (cod, nome, emissao, gravacao) " _ & "values (" & txtCod.Text & ", '" & txtNome.Text & "', " _ & SqlDT(txtEmissao.Text, False) & ", " & SqlDT(Now, False, True) & ")"
'O parâmetro opcional BancoAccess pode ser retirado da função desde que seja alterada a linha 5 do código, fixando um único tipo de banco de dados: DtAspas = IIf(BancoAccess, "#", "'") ---> DtAspas = "#" 'para Access DtAspas = IIf(BancoAccess, "#", "'") ---> DtAspas = "'" 'para SqlServer
|
|
|
|
|