CONSULTA SQL COM DATAS NO VB.NET 2012
Boa tarde para todos!
Peço desculpas por alguma falha. Sou iniciante no VB.NET e novato no Forum.
Depois de pesquisar na internet e consultar vários trabalhos publicados, consegui fazer o código abaixo, destinado a listar os aniversariantes existentes no meu banco de dados (Cadastro.accdb). Estou estudando com a versão VB.NET 2012.
Imports System.Data.OleDb
Imports System.Data.DataSet
Imports System.Data
Public Class frm02_01
Inherits System.Windows.Forms.Form
Dim CON As OleDbConnection
Dim CMD As OleDbCommand
Dim DA As OleDbDataAdapter
Dim DS As CadastroDataSet
Public Sub ListAniversariantes()
CON = New OleDbConnection([Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Cadastro.accdb[Ô])
Dim SQL As String = [Ô]Select * from T001 Where DiaNascimento=#[Ô] & Me.txt1.Text & [Ô]# Order by DiaNascimento ASC[Ô]
DA = New OleDbDataAdapter(SQL, CON)
DS = New CadastroDataSet
DA.Fill(DS, [Ô]T001[Ô])
Dim Linha As Integer
ListBox1.Items.Clear()
For Linha = 0 To DS.Tables([Ô]T001[Ô]).Rows.Count - 1
LB1.Items.Add(DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]Id[Ô]) & vbTab & (DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]Nome[Ô]) & vbTab & (DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]DiaNascimento[Ô]) & vbTab & (DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]Telefone1[Ô])))))
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Call ListAniversariantes ()
End Sub
Em regra, esse código funciona da forma desejada: digito uma data (dd/mm/aaaa) no txt1 e clico no Button1, e a função é executada, listando todos os aniversariantes na data digitada.
Porém, existe uma situação em que nenhum aniversariante é listado, ou seja: o código não funciona! Isso ocorre quando o dia que integra a data está entre 01 e 12. Exemplos: 01/05/1946; 10/11/1950; 12/03/1963; etc...
Alguém poderia ensinar-me a corrigir esse erro? Já pesquisei na web; já testei diversas sintaxes; e não consegui sucesso. Em sÃntese, não sei onde errei.
Desde já, agradeço a todos aqueles que puderem me ajudar.
Peço desculpas por alguma falha. Sou iniciante no VB.NET e novato no Forum.
Depois de pesquisar na internet e consultar vários trabalhos publicados, consegui fazer o código abaixo, destinado a listar os aniversariantes existentes no meu banco de dados (Cadastro.accdb). Estou estudando com a versão VB.NET 2012.
Imports System.Data.OleDb
Imports System.Data.DataSet
Imports System.Data
Public Class frm02_01
Inherits System.Windows.Forms.Form
Dim CON As OleDbConnection
Dim CMD As OleDbCommand
Dim DA As OleDbDataAdapter
Dim DS As CadastroDataSet
Public Sub ListAniversariantes()
CON = New OleDbConnection([Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Cadastro.accdb[Ô])
Dim SQL As String = [Ô]Select * from T001 Where DiaNascimento=#[Ô] & Me.txt1.Text & [Ô]# Order by DiaNascimento ASC[Ô]
DA = New OleDbDataAdapter(SQL, CON)
DS = New CadastroDataSet
DA.Fill(DS, [Ô]T001[Ô])
Dim Linha As Integer
ListBox1.Items.Clear()
For Linha = 0 To DS.Tables([Ô]T001[Ô]).Rows.Count - 1
LB1.Items.Add(DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]Id[Ô]) & vbTab & (DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]Nome[Ô]) & vbTab & (DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]DiaNascimento[Ô]) & vbTab & (DS.Tables([Ô]T001[Ô]).Rows(Linha)([Ô]Telefone1[Ô])))))
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Call ListAniversariantes ()
End Sub
Em regra, esse código funciona da forma desejada: digito uma data (dd/mm/aaaa) no txt1 e clico no Button1, e a função é executada, listando todos os aniversariantes na data digitada.
Porém, existe uma situação em que nenhum aniversariante é listado, ou seja: o código não funciona! Isso ocorre quando o dia que integra a data está entre 01 e 12. Exemplos: 01/05/1946; 10/11/1950; 12/03/1963; etc...
Alguém poderia ensinar-me a corrigir esse erro? Já pesquisei na web; já testei diversas sintaxes; e não consegui sucesso. Em sÃntese, não sei onde errei.
Desde já, agradeço a todos aqueles que puderem me ajudar.
Existem duas alternativas, a melhor é o uso de parâmetros, assim você passaria um DateTime para ele e não teria problema, a outra é formatar a sua data como ano/mes/dia na SQL, pois este formato é garantido que nunca vai ser interpretado errado
Eu realmente recomendo que aprenda a usar parâmetros nas consultas SQL, eles resolvem vários problemas que se pode ter, não só com tipos de dados sendo interpretados de forma diferente, valores numéricos com configuração de delimitadores decimais diferentes em um PC e em outro, caracteres especiais em strings e até mesmo sql injection
Eu realmente recomendo que aprenda a usar parâmetros nas consultas SQL, eles resolvem vários problemas que se pode ter, não só com tipos de dados sendo interpretados de forma diferente, valores numéricos com configuração de delimitadores decimais diferentes em um PC e em outro, caracteres especiais em strings e até mesmo sql injection
Caro OCELOT,
Grato por suas orientações.
Apliquei a formatação da data na instrução SQL e funcionou perfeitamente.
Agora vou partir para o estudo da parametrização das consultas. é matéria nova que preciso aprender.
Nos meus 68 anos de vida, aprendi duas coisas fundamentais: a uma, que nunca é tarde para se aprender alguma coisa; a outra, que não existe nada mais construtivo do que compartilhar o conhecimento.
Mais uma vez, muito obrigado e que Deus o abençoe!
Grato por suas orientações.
Apliquei a formatação da data na instrução SQL e funcionou perfeitamente.
Agora vou partir para o estudo da parametrização das consultas. é matéria nova que preciso aprender.
Nos meus 68 anos de vida, aprendi duas coisas fundamentais: a uma, que nunca é tarde para se aprender alguma coisa; a outra, que não existe nada mais construtivo do que compartilhar o conhecimento.
Mais uma vez, muito obrigado e que Deus o abençoe!
Tópico encerrado , respostas não são mais permitidas