DADOS EM COMBOBOX E INSERT

BRUNOGOMES 05/10/2012 12:42:14
#411359
Pessoal, estou com uma duvida..
Meu banco mysql possui duas tabelas: [Ô]Cliente e Veiculo[Ô]. A tabela veículo possui Foreign Key cod_Cliente da tabela Cliente.

Estou populando uma combobox em um form de cadastro de Veiculo, com o nome_Cliente da tabela Cliente.
Na hora de fazer o INSERT no veículo, quero inserir os dados do veiculo e o nome do cliente q aparecer na combobox quero transformá-lo no código do cliente q está esse nome e colocar no campo cod_Cliente da tabela Veículo. Dá pra enteder rs??
Fiz isso aqui mas nao funciona:

Private Sub frm_Veiculos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim con As New MySqlConnection([Ô]server=localhost; user id=root; password=admin; database=workshopmanager[Ô])
Dim dados As New DataSet
btnPadrao()
con.Open()
Dim comando As String = [Ô]SELECT * FROM cliente[Ô]
Dim adaptador As New MySqlDataAdapter(comando, con)
adaptador.Fill(dados, [Ô]cliente[Ô])
With cmb_Cliente
.ValueMember = [Ô]cod_Cliente[Ô]
.DataSource = dados.Tables(0)
.DisplayMember = [Ô]nome_Cliente[Ô]
End With
con.Close()
End Sub

Private Sub btn_Salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Salvar.Click
btnSalvar()
Dim con As New MySqlConnection([Ô]server=localhost; user id=root; password=admin; database=workshopmanager[Ô])
Dim cmd As New MySqlCommand
cmd = con.CreateCommand

con.Open()
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO veiculo (placa_Veiculo, marca_Veiculo, modelo_Veiculo, ano_Veiculo, chassi_Veiculo, observacoes_Veiculo, horadata_Veiculo, cod_Cliente) VALUES (@placa, @marca, @modelo, @ano, @chassi, @obs, @hr, @codCiente)[Ô]
.Parameters.Add([Ô]@placa[Ô], MySqlDbType.Int32)
.Parameters([Ô]@placa[Ô]).Value = txt_placa.Text
.Parameters.Add([Ô]@marca[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@marca[Ô]).Value = txt_marca.Text
.Parameters.Add([Ô]@modelo[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@modelo[Ô]).Value = txt_modelo.Text
.Parameters.Add([Ô]@ano[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@ano[Ô]).Value = txt_ano.Text
.Parameters.Add([Ô]@chassi[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@chassi[Ô]).Value = txt_chassi.Text
.Parameters.Add([Ô]@obs[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@obs[Ô]).Value = txt_obs.Text
.Parameters.Add([Ô]@hr[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@hr[Ô]).Value = lbl_cadastroText.Text
.Parameters.Add([Ô]@codCliente[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@codCliente[Ô]).Value = cmb_Cliente.ValueMember
.ExecuteNonQuery()
End With
con.Close()
End Sub

O erro acontece no .ExecuteNonQuery() e o visual studio manda isso: [Ô]Input string was not in a correct format.[Ô]
ALTAIR148 05/10/2012 13:23:06
#411364
Resposta escolhida
Boa tarde,


DICA: Crie uma classe de conexão para o seu projeto. Pelo que percebi a cada SUB você passa: Host, Senha, Usuário... Já pensou na seguinte situação... Se precisar alterar o endereço do banco, você teria que procurar todas as subs e alterar, já com uma classe de conexão, basta alterar a classe que surtirá efeito em todo o projeto, ou seja, tudo em um único lugar.

Da forma que está fazendo para o Cod_Cliente você está passando cod_Cliente e não o valor da chave, repare que nas ultimas linhas mudei de ValueMember para SelectedValue, que é o valor do ID do Cliente.
Tente assim:



Private Sub btn_Salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Salvar.Click
btnSalvar()
Dim con As New MySqlConnection([Ô]server=localhost; user id=root; password=admin; database=workshopmanager[Ô])
Dim cmd As New MySqlCommandr
cmd = con.CreateCommand

con.Open()
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO veiculo (placa_Veiculo, marca_Veiculo, modelo_Veiculo, ano_Veiculo, chassi_Veiculo, observacoes_Veiculo, horadata_Veiculo, cod_Cliente) VALUES (@placa, @marca, @modelo, @ano, @chassi, @obs, @hr, @codCiente)[Ô]
.Parameters.Add([Ô]@placa[Ô], MySqlDbType.Int32)
.Parameters([Ô]@placa[Ô]).Value = txt_placa.Text
.Parameters.Add([Ô]@marca[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@marca[Ô]).Value = txt_marca.Text
.Parameters.Add([Ô]@modelo[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@modelo[Ô]).Value = txt_modelo.Text
.Parameters.Add([Ô]@ano[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@ano[Ô]).Value = txt_ano.Text
.Parameters.Add([Ô]@chassi[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@chassi[Ô]).Value = txt_chassi.Text
.Parameters.Add([Ô]@obs[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@obs[Ô]).Value = txt_obs.Text
.Parameters.Add([Ô]@hr[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@hr[Ô]).Value = lbl_cadastroText.Text
.Parameters.Add([Ô]@codCliente[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@codCliente[Ô]).Value = cmb_Cliente.SelectedValue
.ExecuteNonQuery()
End With
con.Close()
End Sub
BRUNOGOMES 05/10/2012 13:53:56
#411369
Coloquei o selectedvalue no combobox: cmb_Cliente.SelectedValue

e o erro mudou para [Ô]Fatal error encountered during command execution.[Ô]
ALTAIR148 05/10/2012 14:02:18
#411371
Coloquie assim:

With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO veiculo (placa_Veiculo, marca_Veiculo, modelo_Veiculo, ano_Veiculo, chassi_Veiculo, observacoes_Veiculo, horadata_Veiculo, cod_Cliente) VALUES (@placa, @marca, @modelo, @ano, @chassi, @obs, @hr, @codCiente)[Ô]


.Parameters.Add([Ô]@placa[Ô], MySqlDbType.Int32, txt_placa.Text)
.Parameters.Add([Ô]@marca[Ô], MySqlDbType.VarChar,txt_marca.Text)
.Parameters.Add([Ô]@modelo[Ô], MySqlDbType.VarChar, txt_modelo.Text)
.Parameters.Add([Ô]@ano[Ô], MySqlDbType.VarChar, txt_ano.Text)
.Parameters.Add([Ô]@chassi[Ô], MySqlDbType.VarChar, txt_chassi.Text)
.Parameters.Add([Ô]@obs[Ô], MySqlDbType.VarChar, txt_obs.Text)
.Parameters.Add([Ô]@hr[Ô], MySqlDbType.VarChar, lbl_cadastroText.Text)
.Parameters.Add([Ô]@codCliente[Ô], MySqlDbType.VarChar, cmb_Cliente.SelectedValue)
.ExecuteNonQuery()
End With
BRUNOGOMES 05/10/2012 14:12:44
#411373
Oxi... com esse codigo que vc passou ae...
Agora ele quer transformar tudo pra Integer...

pra todos ele da esse erro: [Ô]Conversion from string [Ô] HGA-1234[Ô] to type [ô]Integer[ô] is not valid.[Ô] <<< exemplo da placa
mas ta dando esse erro em todos...
ALTAIR148 05/10/2012 14:15:48
#411374
Citação:

Oxi... com esse codigo que vc passou ae...
Agora ele quer transformar tudo pra Integer...



Mas o código que você passou primeiro lá já está colocando como se o campo no mysql fosse Integer, onde tem MySqlDbType...., é o tipo do campo no banco de dados, nos parâmetros tem que ser o mesmo tipo.

Ex: Placa do carro é to tipo Varchar então seria

.Parameters.Add([Ô]@placa[Ô], MySqlDbType.Varchar, txt_placa.Text)
BRUNOGOMES 05/10/2012 14:18:44
#411376
ahh foi mal.. na placa eu coloquei errado ae... eh varchar mesmo..
mas os outros mesmo sendo varchar ta dando o mesmo erro!! nao sei pq, ta acontecendo só com esse codigo q vc mandou...
ALTAIR148 05/10/2012 14:19:32
#411377
Qual mensagem de erro ocorre?
BRUNOGOMES 05/10/2012 14:22:26
#411378
A mensagem que eu passei lah da placa.. da em todos

[Ô]Conversion from string [Ô] oq eu escrevi na textbox [Ô] to type [ô]Integer[ô] is not valid.[Ô]

ALTAIR148 05/10/2012 14:26:44
#411379
Esses campos no banco eles não estão como INT?
BRUNOGOMES 05/10/2012 14:28:16
#411380
banco de dados:

Create table Veiculo (
cod_Veiculo integer unsigned primary key not null auto_increment,
placa_Veiculo varchar(30),
marca_Veiculo varchar(30),
modelo_Veiculo varchar(40),
ano_Veiculo varchar(5),
chassi_Veiculo varchar(30),
observacoes_Veiculo varchar(100),
horadata_Veiculo varchar(30),
cod_Cliente integer unsigned not null,
Foreign Key (cod_Cliente) references Cliente (cod_Cliente)) ENGINE=INNODB;
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas