Usuário com melhor resposta
Nenhum valor foi fornecido para um ou mais parâmetros necessários.

Pergunta
-
Ao clicar no botão "Próximo" aparece o seguinte erro:Nenhum valor foi fornecido para um ou mais parâmetros necessários.Este erro está relacionado à linha em negrito abaixo. Alguém pode solucionar este problema?Imports System.Data.OleDbPublic Class frmAgendaPrivate Sub frmAgenda_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.LoadDim con As New OleDbConnectioncon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'"con.Open()Dim comando As New OleDbCommandcomando.CommandText = "SELECT TOP 1 * FROM tb_dados ORDER BY Nome"comando.CommandType = CommandType.Textcomando.Connection = conDim leitor As OleDbDataReaderleitor = comando.ExecuteReader()leitor.Read()Me.txtNome.Text = leitor("Nome").ToStringMe.mskCelular.Text = leitor("Celular").ToStringMe.mskTelefone.Text = leitor("Telefone").ToStringEnd SubPrivate Sub btnProximo_Click(sender As System.Object, e As System.EventArgs) Handles btnProximo.ClickDim con As New OleDbConnectioncon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'"Dim comando As New OleDbCommandcomando.CommandText = "SELECT TOP 1 * FROM tb_dados WHERE Nome = @Nome ORDER BY id"comando.CommandType = CommandType.Textcomando.Connection = conDim param1 As New OleDbParameter("@Nome", OleDbType.VarChar)param1.Value = txtNome.Textcomando.Parameters.Add(param1)Dim leitor As OleDbDataReadercon.Open()leitor = comando.ExecuteReader()leitor.Read()con.Close()End SubEnd Classterça-feira, 20 de dezembro de 2011 03:09
Respostas
-
Através da video aula 24 do curso Visual Basic Avançado da Treinamentos TI, aprendi que o código fica da seguinte forma:
Private Sub btnProximo_Click(sender As System.Object, e As System.EventArgs) Handles btnProximo.Click
Me.Tb_dadosBindingSource.MoveNext()
End Sub
Private Sub btnAnterior_Click(sender As System.Object, e As System.EventArgs) Handles btnAnterior.Click
Me.Tb_dadosBindingSource.MovePrevious()
End Sub
- Marcado como Resposta anderson ferreira diniz sexta-feira, 23 de dezembro de 2011 04:34
sexta-feira, 23 de dezembro de 2011 04:34
Todas as Respostas
-
Olá Anderson,
Tente fazer assim:
Dim con As New OleDbConnection con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'" Dim comando As New OleDbCommand comando.CommandText = "SELECT TOP 1 * FROM tb_dados WHERE Nome = '" & txtNome.Text & "' ORDER BY id" comando.CommandType = CommandType.Text comando.Connection = con Dim leitor As OleDbDataReader con.Open() leitor = comando.ExecuteReader() leitor.Read() con.Close()
Se o erro continuar provavelmente seu problema esta em algum dos nomes de alguma das colunas
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique- Sugerido como Resposta Seilor Bonancio Junior terça-feira, 20 de dezembro de 2011 17:34
terça-feira, 20 de dezembro de 2011 11:04Moderador -
Continua o mesmo erro.
Notei que o formulário está sendo carregado com ordenação by Nome e botão Próximo está ordenando by id. Há algum problema nesta diferença?
Agora o meu código está assim:
Imports System.Data.OleDb
Public Class frmAgenda
Private Sub frmAgenda_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim con As New OleDbConnection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'"
con.Open()
Dim comando As New OleDbCommand
comando.CommandText = "SELECT TOP 1 * FROM tb_dados ORDER BY Nome"
comando.CommandType = CommandType.Text
comando.Connection = con
Dim leitor As OleDbDataReader
leitor = comando.ExecuteReader()
leitor.Read()
Me.txtNome.Text = leitor("Nome").ToString
Me.mskCelular.Text = leitor("Celular").ToString
Me.mskTelefone.Text = leitor("Telefone").ToString
End Sub
Private Sub btnProximo_Click(sender As System.Object, e As System.EventArgs) Handles btnProximo.Click
Dim con As New OleDbConnection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'"
Dim comando As New OleDbCommand
comando.CommandText = "SELECT TOP 1 * FROM tb_dados WHERE Nome = '" & txtNome.Text & "' ORDER BY id"
comando.CommandType = CommandType.Text
comando.Connection = con
Dim leitor As OleDbDataReader
con.Open()
leitor = comando.ExecuteReader()
leitor.Read()
con.Close()
End Sub
End Class
terça-feira, 20 de dezembro de 2011 20:59 -
Olá Anderson,
Diante disso, parece que existe algo errado em sua tabela ou com os nomes dos campos de sua tabela.
Vc realmente possui uma coluna chamada Id?
Não, o order by não influenciaria isso, a menos que estive com um nome errado de uma coluna atrelado a ele.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenriqueterça-feira, 20 de dezembro de 2011 22:50Moderador -
Desculpe-me por todo esse transtorno, pois sou iniciante.
Eu não tinha atentado para este detalhe.
Pensei que "id" era alguma espécie de comando, não notei que era uma referência genérica.
O campo de numeração automática do meu banco de dados chama-se "Código".
Os outros campos são: "Nome", "Telefone" e "Celular". Como fica o código do botão "próximo" e do botão "anterior"?
Obrigado.
Tenha um ótimo final de ano.
- Editado anderson ferreira diniz quarta-feira, 21 de dezembro de 2011 06:06
quarta-feira, 21 de dezembro de 2011 05:58 -
Estou respondendo do celular,então não poderei posta todo o código, mas é só vc substituir no comando SQL o ORDER BY ID por ORDER BY CÓDIGO.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenriquequarta-feira, 21 de dezembro de 2011 10:33Moderador -
Fiz a alteração. Parou de dar o erro. Mas, ao clicar no botão Próximo, não acontece nada, não mostra o próximo registro.Em relação ao botão anterior, como ficaria o código? Meu código está assim:
Imports System.Data.OleDb
Public Class frmAgenda
Private Sub frmAgenda_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim con As New OleDbConnection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'"
con.Open()
Dim comando As New OleDbCommand
comando.CommandText = "SELECT TOP 1 * FROM tb_dados ORDER BY Nome"
comando.CommandType = CommandType.Text
comando.Connection = con
Dim leitor As OleDbDataReader
leitor = comando.ExecuteReader()
leitor.Read()
Me.txtNome.Text = leitor("Nome").ToString
Me.mskCelular.Text = leitor("Celular").ToString
Me.mskTelefone.Text = leitor("Telefone").ToString
End Sub
Private Sub btnProximo_Click(sender As System.Object, e As System.EventArgs) Handles btnProximo.Click
Dim con As New OleDbConnection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'"
Dim comando As New OleDbCommand
comando.CommandText = "SELECT TOP 1 * FROM tb_dados WHERE Nome = '" & txtNome.Text & "' ORDER BY Código"
comando.CommandType = CommandType.Text
comando.Connection = con
Dim leitor As OleDbDataReader
con.Open()
leitor = comando.ExecuteReader()
leitor.Read()
con.Close()
End Sub
End Class
quarta-feira, 21 de dezembro de 2011 14:03 -
Faltou atribuir os valores ao campo:
Dim con As New OleDbConnection con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'" Dim comando As New OleDbCommand comando.CommandText = "SELECT TOP 1 * FROM tb_dados WHERE Nome = '" & txtNome.Text & "' ORDER BY Código" comando.CommandType = CommandType.Text comando.Connection = con Dim leitor As OleDbDataReader con.Open() leitor = comando.ExecuteReader() leitor.Read() con.Close() Me.txtNome.Text = leitor("Nome").ToString Me.mskCelular.Text = leitor("Celular").ToString Me.mskTelefone.Text = leitor("Telefone").ToString
Acredito que exista um outro tópico com esta mesma pergunta, não?[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenriquequarta-feira, 21 de dezembro de 2011 15:41Moderador -
Agora o erro é o seguinte:
No data exists for the row/column.
e remete para a linha em negrito a seguir:
Private Sub btnProximo_Click(sender As System.Object, e As System.EventArgs) Handles btnProximo.Click
Dim con As New OleDbConnection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'"
Dim comando As New OleDbCommand
comando.CommandText = "SELECT TOP 1 * FROM tb_dados WHERE Nome = '" & txtNome.Text & "' ORDER BY Código"
comando.CommandType = CommandType.Text
comando.Connection = con
Dim leitor As OleDbDataReader
con.Open()
leitor = comando.ExecuteReader()
leitor.Read()
con.Close()
Me.txtNome.Text = leitor("Nome").ToString
Me.mskCelular.Text = leitor("Celular").ToString
Me.mskTelefone.Text = leitor("Telefone").ToString
End Sub
quarta-feira, 21 de dezembro de 2011 21:44 -
Olá Anderson,
Isso acontece quando a sua consulta não retorna nenhum registro e vc executa um comando de leitura do datareader.
Tente fazer assim:
Dim con As New OleDbConnection con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='|DataDirectory|\Banco de Agenda.accdb'" Dim comando As New OleDbCommand comando.CommandText = "SELECT TOP 1 * FROM tb_dados WHERE Nome = '" & txtNome.Text & "' ORDER BY Código" comando.CommandType = CommandType.Text comando.Connection = con Dim leitor As OleDbDataReader con.Open() leitor = comando.ExecuteReader() If (leitor.HasRows) Then leitor.Read() Me.txtNome.Text = leitor("Nome").ToString Me.mskCelular.Text = leitor("Celular").ToString Me.mskTelefone.Text = leitor("Telefone").ToString End If con.Close()
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenriquequinta-feira, 22 de dezembro de 2011 00:44Moderador -
Parou de dar erro, mas, ao clicar no botão próximo, não acontece nada, não mostra o próximo registro.quinta-feira, 22 de dezembro de 2011 02:27
-
Isso acontece pois nenhum registro esta sendo encontrado no banco devido o parâmetro que esta passando em sua consulta.
Acedito que vc deve rever a lógica de sua aplicação.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique
- Editado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator quinta-feira, 22 de dezembro de 2011 02:30
quinta-feira, 22 de dezembro de 2011 02:29Moderador -
Parou de dar erro, mas, ao clicar no botão próximo, não acontece nada, não mostra o próximo registro.
Se voce quer movimentar registo, nao podes usar apenas o datareader, este control nao tem propiedades movelast, movenext.Nao como no Visual Basic. Exite um novo control Chamado, BindingSource. Este control permite movimentar registos como no antigo Visual Basic.
Dim Ligar_Text As New BindingSource.
One word frees us of all the weight and pain of life: that word is love.quinta-feira, 22 de dezembro de 2011 06:43 -
Olá Anderson,
Veja o exemplo que coloquei neste link: https://skydrive.live.com/#cid=7DECE45BBF0DB70F&id=7DECE45BBF0DB70F!660
Ele se chama WindowsPreviousNext.zip
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenriquequinta-feira, 22 de dezembro de 2011 11:35Moderador -
Através da video aula 24 do curso Visual Basic Avançado da Treinamentos TI, aprendi que o código fica da seguinte forma:
Private Sub btnProximo_Click(sender As System.Object, e As System.EventArgs) Handles btnProximo.Click
Me.Tb_dadosBindingSource.MoveNext()
End Sub
Private Sub btnAnterior_Click(sender As System.Object, e As System.EventArgs) Handles btnAnterior.Click
Me.Tb_dadosBindingSource.MovePrevious()
End Sub
- Marcado como Resposta anderson ferreira diniz sexta-feira, 23 de dezembro de 2011 04:34
sexta-feira, 23 de dezembro de 2011 04:34