Mica Posted May 19, 2012 at 04:21 PM Report #456864 Posted May 19, 2012 at 04:21 PM (edited) Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\ClubeVideo.accdb" Dim OLDB As String = "INSERT INTO Filmes ([NomeFilme],[TituloOriginal],[CodigoFornecedor],[Genero],[Realizador],[Actores],[Pais],[Ano],[ClasseEtaria]) VALUES (@NomeFilme,@TituloOriginal,@CodigoFornecedor,@Genero,@Realizador,@Actores,@Pais,@Ano,@ClasseEtaria)" ' Inicia uma ligação à bse de dados Using connection As New OleDbConnection(connString) ' Define o comando e os parâmetros Dim command1 As New OleDbCommand(OLDB, connection) ' command1.Parameters.Add("@IDFilme", OleDbType.VarChar).Value = TextBox1.Text command1.Parameters.Add("@NomeFilme", OleDbType.VarChar).Value = TextBox2.Text command1.Parameters.Add("@TituloOriginal", OleDbType.VarChar).Value = TextBox3.Text command1.Parameters.Add("@CodigoFornecedor", OleDbType.Integer).Value = TextBox4.Text command1.Parameters.Add("@Genero", OleDbType.VarChar).Value = TextBox5.Text command1.Parameters.Add("@Realizador", OleDbType.VarChar).Value = TextBox6.Text command1.Parameters.Add("@Actores", OleDbType.VarChar).Value = TextBox7.Text command1.Parameters.Add("@Pais", OleDbType.VarChar).Value = TextBox9.Text command1.Parameters.Add("@Ano", OleDbType.Integer).Value = TextBox10.Text command1.Parameters.Add("@ClasseEtaria", OleDbType.VarChar).Value = TextBox11.Text ' command1.Parameters.Add("@foto", OleDbType.VarChar).Value = PictureBox1.ImageLocation ' Abre a ligação e insere o registo connection.Open() Dim xx As String = command1.ExecuteNonQuery() If xx < 1 Then MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information) End If connection.Close() command1 = Nothing End Using End If Então ao fazer este insert ele mostra me todos os dados na hora menos o ID pois por estar em autoincrement eu não o inseri.. Ele só o volta a mostrar aquando o fecho do programa ... Alguma solução? Edited May 20, 2012 at 10:41 PM by Caça GeSHi
petvetbr Posted May 19, 2012 at 04:39 PM Report #456865 Posted May 19, 2012 at 04:39 PM Isto depende um pouco do banco de dados que você utiliza, pois não é uma função padrão SQL, mas é possível sim, veja alguns exemplos abaixo, o primeiro funciona com Access especificamente, o que parece ser o caso. Os outros são de SQLServer, mas podem funcionar, não testei. http://stackoverflow.com/questions/9417897/last-inserted-id-of-msaccess-database http://www.fryan0911.com/2009/03/vb-net-get-identity-field-value-from.html http://stackoverflow.com/questions/4425153/vb-net-sql-last-inserted-id Fernando Lage Bastos - MCP/MCTS/MCPD
Mica Posted May 19, 2012 at 06:56 PM Author Report #456871 Posted May 19, 2012 at 06:56 PM Pelo que estive a ver acho que preciso de mais umas luzes x.x
Blackvelvet Posted May 20, 2012 at 09:35 AM Report #456928 Posted May 20, 2012 at 09:35 AM (edited) Viva, o facto de estar em autoincrement não tem problemas tens é mal estuturado no insert. a assim e altera tambem na tua bd command1.Parameters.Add("@IDFilme", OleDbType.Int).Value = TextBox1.Text o id tem que ser int e não varchar. Edited May 20, 2012 at 09:35 AM by Blackvelvet
Mica Posted May 20, 2012 at 01:00 PM Author Report #456944 Posted May 20, 2012 at 01:00 PM Pois mas por isso é que eu tinha essa linha de codigo comentada porque ja andei a testar e tudo mais mas o erro que me dá é sempre o mesmo.. Dim xx As String = command1.ExecuteNonQuery() Não foi possível converter o valor do parâmetro de String para Int32.
Blackvelvet Posted May 21, 2012 at 01:51 PM Report #457141 Posted May 21, 2012 at 01:51 PM Sim,mas repara que tens em "varchar" e o id por norma é "INT". Deve estar aí o teu erro
petvetbr Posted May 21, 2012 at 02:00 PM Report #457143 Posted May 21, 2012 at 02:00 PM (edited) O ExecuteNonQuery devolve valores do tipo Int32, e não string como está aqui Dim xx As String = command1.ExecuteNonQuery() e aqui estás comparando uma string com o valor numérico: If xx < 1 Then Edited May 21, 2012 at 02:03 PM by petvetbr Fernando Lage Bastos - MCP/MCTS/MCPD
Blackvelvet Posted May 21, 2012 at 02:44 PM Report #457166 Posted May 21, 2012 at 02:44 PM (edited) tenta assim, então: Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\ClubeVideo.accdb" Dim OLDB As String = "INSERT INTO Filmes ([NomeFilme],[TituloOriginal],[CodigoFornecedor],[Genero],[Realizador],[Actores],[Pais],[Ano],[ClasseEtaria]) VALUES (@NomeFilme,@TituloOriginal,@CodigoFornecedor,@Genero,@Realizador,@Actores,@Pais,@Ano,@ClasseEtaria)" ' Inicia uma ligação à bse de dados Using connection As New OleDbConnection(connString) ' Define o comando e os parâmetros Dim command1 As New OleDbCommand(OLDB, connection) command1.Parameters.Add("@IDFilme", OleDbType.INT).Value = TextBox1.Text command1.Parameters.Add("@NomeFilme", OleDbType.VarChar).Value = TextBox2.Text command1.Parameters.Add("@TituloOriginal", OleDbType.VarChar).Value = TextBox3.Text command1.Parameters.Add("@CodigoFornecedor", OleDbType.Integer).Value = TextBox4.Text command1.Parameters.Add("@Genero", OleDbType.VarChar).Value = TextBox5.Text command1.Parameters.Add("@Realizador", OleDbType.VarChar).Value = TextBox6.Text command1.Parameters.Add("@Actores", OleDbType.VarChar).Value = TextBox7.Text command1.Parameters.Add("@Pais", OleDbType.VarChar).Value = TextBox9.Text command1.Parameters.Add("@Ano", OleDbType.Integer).Value = TextBox10.Text command1.Parameters.Add("@ClasseEtaria", OleDbType.VarChar).Value = TextBox11.Text ' command1.Parameters.Add("@foto", OleDbType.VarChar).Value = PictureBox1.ImageLocation ' Abre a ligação e insere o registo connection.Open() Dim xx As Integer = command1.ExecuteNonQuery() If xx < 1 Then MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information) End If connection.Close() command1 = Nothing End Using End If Edited May 21, 2012 at 02:45 PM by Blackvelvet
Mica Posted May 22, 2012 at 04:21 PM Author Report #457418 Posted May 22, 2012 at 04:21 PM Blackvet creio que aquele INT referes te a um Integer... Pois INT não funciona.. Obtenho o mesmo erro na mesma linha Dim xx As Integer = command1.ExecuteNonQuery() Não foi possível converter o valor do parâmetro de String para Int32.
Blackvelvet Posted May 22, 2012 at 05:30 PM Report #457438 Posted May 22, 2012 at 05:30 PM Não te esqueças de alterar tambem na base de dados. Se tens varchar altera para Int. É assim que eu uso e não tenho problemas com isso.
Mica Posted May 22, 2012 at 05:41 PM Author Report #457443 Posted May 22, 2012 at 05:41 PM Na Base de dados esta como Numeração Automática....
Blackvelvet Posted May 23, 2012 at 04:47 PM Report #457686 Posted May 23, 2012 at 04:47 PM mostra o codigo novamente
Mica Posted May 24, 2012 at 12:12 PM Author Report #457838 Posted May 24, 2012 at 12:12 PM (edited) Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\ClubeVideo.accdb" Dim OLDB As String = "INSERT INTO Filmes ([NomeFilme],[TituloOriginal],[CodigoFornecedor],[Genero],[Realizador],[Actores],[Pais],[Ano],[ClasseEtaria]) VALUES (@NomeFilme,@TituloOriginal,@CodigoFornecedor,@Genero,@Realizador,@Actores,@Pais,@Ano,@ClasseEtaria)" ' Inicia uma ligação à bse de dados Using connection As New OleDbConnection(connString) ' Define o comando e os parâmetros Dim command1 As New OleDbCommand(OLDB, connection) command1.Parameters.Add("@IDFilme", OleDbType.Integer).Value = TextBox1.Text command1.Parameters.Add("@NomeFilme", OleDbType.VarChar).Value = TextBox2.Text command1.Parameters.Add("@TituloOriginal", OleDbType.VarChar).Value = TextBox3.Text command1.Parameters.Add("@CodigoFornecedor", OleDbType.Integer).Value = TextBox4.Text command1.Parameters.Add("@Genero", OleDbType.VarChar).Value = TextBox5.Text command1.Parameters.Add("@Realizador", OleDbType.VarChar).Value = TextBox6.Text command1.Parameters.Add("@Actores", OleDbType.VarChar).Value = TextBox7.Text command1.Parameters.Add("@Pais", OleDbType.VarChar).Value = TextBox9.Text command1.Parameters.Add("@Ano", OleDbType.Integer).Value = TextBox10.Text command1.Parameters.Add("@ClasseEtaria", OleDbType.VarChar).Value = TextBox11.Text ' command1.Parameters.Add("@foto", OleDbType.VarChar).Value = PictureBox1.ImageLocation ' Abre a ligação e insere o registo connection.Open() Dim xx As Integer = command1.ExecuteNonQuery() If xx <> 1 Then MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error) Else MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information) End If connection.Close() command1 = Nothing End Using End If Se calhar não estão a entender onde eu estou a tentar chegar.. passo a explicar... sem esta linha de codigocommand1.Parameters.Add("@IDFilme", OleDbType.Integer).Value = TextBox1.Text ele insere normalmente a questão é que ao inserir não me mostra o ID na textbox só fechando e reabrindo o programa novamente é que ele me apresente o ID na textbox... e eu pretendia contornar essa situação nem que fosse uma forma de voltar a fazer o load ao programa sem o fechar.. Edited May 24, 2012 at 12:14 PM by Mica
petvetbr Posted May 24, 2012 at 12:55 PM Report #457846 Posted May 24, 2012 at 12:55 PM Você chegou a tentar aquele código dos links que lhe mandei? Ele deveria resolver este problema. Fernando Lage Bastos - MCP/MCTS/MCPD
Mica Posted May 25, 2012 at 08:48 AM Author Report #458036 Posted May 25, 2012 at 08:48 AM A ver cheguei, a entender é que não... se poderes dar umas dicas..
petvetbr Posted May 25, 2012 at 10:26 AM Report #458051 Posted May 25, 2012 at 10:26 AM então, funciona assim... logo após a inserção, você faz uma consulta, usando ExecuteQuery ou ExecuteScalar com o seguinte comando: SELECT @@IDENTITY com isto consegue obter o ID do registro que acabou de ser inserido que é devolvido desta consulta. Fernando Lage Bastos - MCP/MCTS/MCPD
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