[DUVIDA] CAMPO DATA EM BANCO MYSQL
Galera, tenho um projeto em VB.NET e sempre tenho problemas ao comparar datas, no meu caso uso Mysql e deixo como [Varchar], a pergunta é: essa é uma boa pratica ou devo usar [Date], e como isso pode influenciar na consulta posteriormente?
E uma pessima pratica, o campo date existe exatamente pra isso. De vc quer manipular datas vc tem que usar o date e não varchar. Use date e converta pro formato que vai pro mysql e seja feliz com uma ótima pratica de programação
Entendi, fiz as modificações aqui, mas acredito estar cometendo erros na consulta, acredito que usar BETWEEN seria uma melhor opção, veja meu código e se possÃvel acrescentar alguma sugestão:
Private Sub CarregaTodosPorData()
Dim datainicio As String
Dim datafinal As String
datainicio = Format(DateTimePicker1.Value, [Ô]yyyy-mm-dd[Ô])
datafinal = Format(DateTimePicker2.Value, [Ô]yyyy-mm-dd[Ô])
Using con As MySqlConnection = ConexaoComMysql()
Try
con.Open()
Dim sql As String = [Ô]SELECT * FROM Pagamentos WHERE Data >= @DADAINICIO and Data <= @DATAFINAL ORDER BY @ORDEM[Ô]
Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
cmd.Parameters.Clear()
cmd.Parameters.Add([Ô]@ORDEM[Ô], MySqlDbType.VarChar).Value = ComboBox3.Text
cmd.Parameters.Add([Ô]@DADAINICIO[Ô], MySqlDbType.Date).Value = datainicio
cmd.Parameters.Add([Ô]@DATAFINAL[Ô], MySqlDbType.Date).Value = datafinal
Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Using
End Sub
Se fosse passa o valor pra variáveis vc não precisa passar o tipo do campo por parâmetros no cmd
Passa somente o campo e a variável e use between
Passa somente o campo e a variável e use between
Private Sub CarregaTodosPorData()
Dim datainicio As String
Dim datafinal As String
[ô]datainicio = Format(DateTimePicker1.Value.Date, [Ô]yyyy/MM/dd[Ô]) [ô]Formato data vbnet
[ô]datafinal = Format(DateTimePicker2.Value.Date, [Ô]yyyy/MM/dd[Ô]) [ô]
datainicio = Format(DateTimePicker1.Value.Date, [Ô]yyyy-MM-dd[Ô])
datafinal = Format(DateTimePicker2.Value.Date, [Ô]yyyy-MM-dd[Ô]) [ô]
Using con As MySqlConnection = Getconnectionmysql()
Try
con.Open()
[ô]Dim sql As String = [Ô]SELECT * FROM Pagamentos WHERE Data >= @DADAINICIO and Data <= @DATAFINAL ORDER BY @ORDEM[Ô] [ô]Não tem hábito de usar.
[ô] Dim sql As String = [Ô]SELECT * FROM tb_saida WHERE Datadesaida >= @DADAINICIO and Datadesaida <= @DATAFINAL ORDER BY ORDEM[Ô]
Dim sql As String = [Ô]SELECT * FROM tb_saida WHERE Datadesaida between @DADAINICIO and @DATAFINAL [Ô]
Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
cmd.Parameters.Clear()
[ô]cmd.Parameters.Add([Ô]@ORDEM[Ô], MySqlDbType.VarChar).Value = ComboBox3.Text [ô]Não faço isto
cmd.Parameters.Add([Ô]@DADAINICIO[Ô], MySqlDbType.Date).Value = datainicio
cmd.Parameters.Add([Ô]@DATAFINAL[Ô], MySqlDbType.Date).Value. = datafinal
Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
Catch ex As MySqlException
MsgBox(ex.Message)
End Try
End Using
End Sub
Funcionar com os dois tipos.
Dim datainicio As String
Dim datafinal As String
[ô]datainicio = Format(DateTimePicker1.Value.Date, [Ô]yyyy/MM/dd[Ô]) [ô]Formato data vbnet
[ô]datafinal = Format(DateTimePicker2.Value.Date, [Ô]yyyy/MM/dd[Ô]) [ô]
datainicio = Format(DateTimePicker1.Value.Date, [Ô]yyyy-MM-dd[Ô])
datafinal = Format(DateTimePicker2.Value.Date, [Ô]yyyy-MM-dd[Ô]) [ô]
Using con As MySqlConnection = Getconnectionmysql()
Try
con.Open()
[ô]Dim sql As String = [Ô]SELECT * FROM Pagamentos WHERE Data >= @DADAINICIO and Data <= @DATAFINAL ORDER BY @ORDEM[Ô] [ô]Não tem hábito de usar.
[ô] Dim sql As String = [Ô]SELECT * FROM tb_saida WHERE Datadesaida >= @DADAINICIO and Datadesaida <= @DATAFINAL ORDER BY ORDEM[Ô]
Dim sql As String = [Ô]SELECT * FROM tb_saida WHERE Datadesaida between @DADAINICIO and @DATAFINAL [Ô]
Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
cmd.Parameters.Clear()
[ô]cmd.Parameters.Add([Ô]@ORDEM[Ô], MySqlDbType.VarChar).Value = ComboBox3.Text [ô]Não faço isto
cmd.Parameters.Add([Ô]@DADAINICIO[Ô], MySqlDbType.Date).Value = datainicio
cmd.Parameters.Add([Ô]@DATAFINAL[Ô], MySqlDbType.Date).Value. = datafinal
Dim da As MySqlDataAdapter = New MySqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt
Catch ex As MySqlException
MsgBox(ex.Message)
End Try
End Using
End Sub
Funcionar com os dois tipos.
Salvo como NULL no banco de dados qdo a data está em branco. Acredito que não tenha como salvar em branco.
Campos date salve como date, Salvando como string resultará em gambiarras futuramente.
Campos date salve como date, Salvando como string resultará em gambiarras futuramente.
Tópico encerrado , respostas não são mais permitidas