carlosmorais Posted March 21, 2011 at 09:44 PM Report #376050 Posted March 21, 2011 at 09:44 PM boas, não consigo criar um parâmetro para filtrar os dados a inserir numa DataGrid, para apenas os da data escolhida numa MaskedTextBox. a comentário estão as linhas que tentei utilizar, mas não funciona... fica também uma imagem para ajudara perceber o que quero fazer. http://img607.imageshack.us/i/vbnet.png/ Private da As MySqlDataAdapter Private ds As DataSet Private Sub ver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ver.Click Dim myConnectionString As String = "Server=localhost;" & _ "Database=picaoponto;" & _ "Uid=root;" & _ "Pwd=123pt;" & _ "Connect Timeout=30;" Dim connection As New MySqlConnection(myConnectionString) 'Dim connect As New MySqlConnection Dim SQL As String = "SELECT codfuncionario, entrada, saida FROM registodeponto where data = @data " 'Dim command As New MySqlCommand(SQL, connect) da = New MySqlDataAdapter(SQL, connection) 'command.Parameters.Add("@data", MySqlDbType.Date).Value = MaskedTextBox1.Text ds = New DataSet da.Fill(ds, "myTable") DataGridView1.DataSource = ds.Tables("myTable") DataGridView1.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells connection = Nothing alguma ajuda? 😁 cumps.
bioshock Posted March 21, 2011 at 10:18 PM Report #376072 Posted March 21, 2011 at 10:18 PM Olha bem para estas linhas: Dim SQL As String = "SELECT codfuncionario, entrada, saida FROM registodeponto where data = @data" da.Fill(ds, "myTable") DataGridView1.DataSource = ds.Tables("myTable")
carlosmorais Posted March 21, 2011 at 10:30 PM Author Report #376077 Posted March 21, 2011 at 10:30 PM pah, não estou a ver... :nono1: só se filtrar os dados depois... ?
bioshock Posted March 21, 2011 at 10:45 PM Report #376085 Posted March 21, 2011 at 10:45 PM Por partes: Sabes o que é e para que serve um Dataset? Supondo que sim, repara na tua query: Dim SQL As String = "SELECT codfuncionario, entrada, saida FROM registodeponto where data = @data" Passando por miúdos: Seleccionas dois campos (codfuncionario, entra e saida) da tabela registodeponto onde a data é igual a @data. Ora, o que deves agora atribuir ao Dataset, é o nome da tabela de onde estás a seleccionar os dados, portanto, em vez de teres: da.Fill(ds, "myTable") DataGridView1.DataSource = ds.Tables("myTable") Deverias de ter...: da.Fill(ds, "registodeponto") DataGridView1.DataSource = ds.Tables("registodeponto") Segundo, é claro que se usas a seguinte instrução numa query (data = @data) tens, obrigatoriamente, de usar os devidos parâmetros. Algo mais completo: Dim connectionString As String = "Whatever..." Dim connection As New MySqlConnection(connectionString) ' A tal instrução.. Dim query As String = "SELECT campo FROM tabela WHERE data = @data" Dim command As New MySqlCommand(query, connection) ' Os tais parâmetros command.Parameters.Add("@data", MySqlDbType.Date).Value = MaskedTextBox1.Text Dim DataSet As New DataSet Dim Adapter As New MySqlDataAdapter(query, connection) Adapter.Fill(DataSet , "tabela") Me.DataGridView1.DataSource = DataSet.Tables("tabela") Em suma, é isso.
carlosmorais Posted March 21, 2011 at 11:19 PM Author Report #376096 Posted March 21, 2011 at 11:19 PM Obrigado pela explicação. 🙂 Mas continua a dar o mesmo erro, "Parameter '@data' must be defined." Se eu remover o WHERE, são apresentados todos os registos sem problema... print: http://img190.imageshack.us/i/erronj.png/
bioshock Posted March 22, 2011 at 12:07 AM Report #376103 Posted March 22, 2011 at 12:07 AM Bem também reparei ali num erro meu. Visto estares a usar parâmetros tens de atribuir o command ao DataAdapter. Dim Adapter As New MySqlDataAdapter(command) Full: Dim connection As New MySqlConnection(connectionString) Dim query As String = "SELECT codfuncionario, entrada, saida FROM registodeponto WHERE data = @data" Dim command As New MySqlCommand(query, connection) command.Parameters.Add("@data", MySqlDbType.Date).Value = MaskedTextbox1.Text Dim DataSet As New Dataset ' Aqui estava o erro que te falei Dim Adapter As New MySqlDataAdapter(command) Adapter.Fill(DataSet, "registodeponto") DataGridView1.DataSource = DataSet.Tables("registodeponto") E isso deve funcionar. Caso contrário, os valores que estás a obter da MaskedTextbox não são valores que possam ser aceites na base de dados para fazer comparação. Caso dê erro, substitui a MaskedTextbox1.Text por um valor que tu saibas que está na base de dados 🙂
carlosmorais Posted March 22, 2011 at 08:21 PM Author Report #376225 Posted March 22, 2011 at 08:21 PM resolveu! o problema tinha de estar no parâmetro, pois já tinha substituído a MaskedTextbox e dava no mesmo. Obrigado por tudo. 😕 Cumps.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now