ERRO CODIGO CADASTRO
Pessoal, estou fazendo um programa onde há varios forms para cadastros diferentes... vou mostrar só um exemplo que com esse, resolvo os outros..
é assim, possuo um form de cadastro de fornecedor, e a tabela fornecedor do banco de dados possui chave estrangeira da tabela endereco..
Segue o codigo do form de cadastro:
Quando o usuario nao digita nada no txt_razao aparece a mensagem informando q o dado deve ser preenchido... Ok.. Nao é cadastrado nada na tabela fornecedor, mas esta cadastrando na tabela endereco...
Alguem pode me ajjudar??
abraço!
é assim, possuo um form de cadastro de fornecedor, e a tabela fornecedor do banco de dados possui chave estrangeira da tabela endereco..
Segue o codigo do form de cadastro:
Dim codEndereco, codFornecedor As Integer
Private Sub btn_Salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Salvar.Click
btnSalvar()
lbl_cadastroText.Text = DateTime.Now.ToString([Ô]g[Ô])
Dim con As New MySqlConnection([Ô]server=localhost; user id=root; password=admin; database=workshopmanager[Ô])
Dim cmd As New MySqlCommand
Dim reader As MySqlDataReader
cmd = con.CreateCommand
con.Open()
With cmd
.CommandType = System.Data.CommandType.Text
.CommandText = [Ô]SELECT cod_Endereco FROM endereco WHERE cod_Endereco = (SELECT MAX(cod_Endereco) FROM endereco)[Ô]
End With
reader = cmd.ExecuteReader
If reader.Read() Then
codEndereco = reader([Ô]cod_Endereco[Ô])
reader.Close()
End If
con.Close()
con.Open()
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO endereco (cod_Endereco, cep_Endereco, nome_Endereco, numero_Endereco, complemento_Endereco, bairro_Endereco, cidade_Endereco, uf_Endereco, pais_Endereco) VALUES (@codendereco, @cep, @end, @num, @compl, @bairro, @cidade, @uf, @pais)[Ô]
.Parameters.Add([Ô]@codendereco[Ô], MySqlDbType.Int32)
.Parameters([Ô]@codendereco[Ô]).Value = codEndereco + 1
.Parameters.Add([Ô]@cep[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@cep[Ô]).Value = txt_cep.Text
.Parameters.Add([Ô]@end[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@end[Ô]).Value = txt_Endereco.Text
.Parameters.Add([Ô]@num[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@num[Ô]).Value = txt_numero.Text
.Parameters.Add([Ô]@compl[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@compl[Ô]).Value = txt_complemento.Text
.Parameters.Add([Ô]@bairro[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@bairro[Ô]).Value = txt_bairro.Text
.Parameters.Add([Ô]@cidade[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@cidade[Ô]).Value = txt_cidade.Text
.Parameters.Add([Ô]@uf[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@uf[Ô]).Value = txt_uf.Text
.Parameters.Add([Ô]@pais[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@pais[Ô]).Value = txt_pais.Text
.ExecuteNonQuery()
End With
con.Close()
con.Open()
With cmd
.CommandType = System.Data.CommandType.Text
.CommandText = [Ô]SELECT cod_Endereco FROM endereco WHERE cod_Endereco = (SELECT MAX(cod_Endereco) FROM endereco)[Ô]
End With
reader = cmd.ExecuteReader
If reader.Read() Then
codEndereco = reader([Ô]cod_Endereco[Ô])
reader.Close()
End If
con.Close()
con.Open()
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO fornecedor (razaosocial_Fornecedor, nome_Fornecedor, contato_Fornecedor, observacoes_Fornecedor, horadata_Fornecedor, CNPJ_Fornecedor, telComercial_Fornecedor, fax_Fornecedor, email_Fornecedor, cod_Endereco) VALUES (@razao, @nome, @contato, @obs, @horadata, @cnpj, @telcomercial, @fax, @email, @codend)[Ô]
.Parameters.Add([Ô]@razao[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@razao[Ô]).Value = txt_razao.Text
.Parameters.Add([Ô]@nome[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@nome[Ô]).Value = txt_Nome.Text
.Parameters.Add([Ô]@contato[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@contato[Ô]).Value = txt_Contato.Text
.Parameters.Add([Ô]@obs[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@obs[Ô]).Value = txt_obs.Text
.Parameters.Add([Ô]@horadata[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@horadata[Ô]).Value = lbl_cadastroText.Text
.Parameters.Add([Ô]@cnpj[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@cnpj[Ô]).Value = txt_cnpj.Text
.Parameters.Add([Ô]@telcomercial[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@telcomercial[Ô]).Value = txt_comercial.Text
.Parameters.Add([Ô]@fax[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@fax[Ô]).Value = txt_fax.Text
.Parameters.Add([Ô]@email[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@email[Ô]).Value = txt_Email.Text
.Parameters.Add([Ô]@codend[Ô], MySqlDbType.Int32)
.Parameters([Ô]@codend[Ô]).Value = codEndereco
If txt_razao.Text = [Ô][Ô] Then
btnAdicionar()
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
con.Close()
Else
cmd.ExecuteNonQuery()
MessageBox.Show([Ô]Fornecedor cadastrado com sucesso![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
.CommandText = [Ô]SELECT cod_Fornecedor FROM fornecedor WHERE razaosocial_Fornecedor = @razao[Ô]
reader = cmd.ExecuteReader
reader.Read()
codFornecedor = reader.GetString([Ô]cod_Fornecedor[Ô])
lbl_cod.Text = codFornecedor
con.Close()
End If
con.Close()
End With
End Sub
Quando o usuario nao digita nada no txt_razao aparece a mensagem informando q o dado deve ser preenchido... Ok.. Nao é cadastrado nada na tabela fornecedor, mas esta cadastrando na tabela endereco...
Alguem pode me ajjudar??
abraço!
faz assim
Cria duas sub de gravacao
Primeira
sub gravarTabelaEndereco
rotina de gravacao
end sub
Segunda
sub gravarTabelaFornecedor
rotina de gravacao
end sub
no botao gravar
If txt_razao.Text = [Ô][Ô] Then
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
exit sub
elseif txtendreco.text=[Ô][Ô]
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
exit sub
else
gravarTabelaEndereco
gravarTabelaFornecedor
end if
Cria duas sub de gravacao
Primeira
sub gravarTabelaEndereco
rotina de gravacao
end sub
Segunda
sub gravarTabelaFornecedor
rotina de gravacao
end sub
no botao gravar
If txt_razao.Text = [Ô][Ô] Then
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
exit sub
elseif txtendreco.text=[Ô][Ô]
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
exit sub
else
gravarTabelaEndereco
gravarTabelaFornecedor
end if
O problema é q no seu exemplo, nao poderia dexar o endereco em branco... mas eu quero q possa dexar tudo em branco.. só o nome q é obrigatório..
E assim
If txt_razao.Text = [Ô][Ô] Then
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
exit sub
else
gravarTabelaEndereco
gravarTabelaFornecedor
end if
If txt_razao.Text = [Ô][Ô] Then
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
exit sub
else
gravarTabelaEndereco
gravarTabelaFornecedor
end if
siim fazendo com as subs até funcionou o cadastro.. mas da erro no datareader...
Você pode pegar o Ultimo cod_endereco e jogar + 1(que seria o próximo) na tabela.
Dim da As New MySqlDataAdapter([Ô]Select Max(cod_Endereco)+ 1 From endereco[Ô], Conexao)
Dim dt As New DataTable
da.Fill(dt)
textbox1.Text = dt.Rows(0).Item(0).ToString
dt.Dispose()
da.Dispose()
E depois gravaria nas tabelas.Assim eliminaria o datareader
Dim da As New MySqlDataAdapter([Ô]Select Max(cod_Endereco)+ 1 From endereco[Ô], Conexao)
Dim dt As New DataTable
da.Fill(dt)
textbox1.Text = dt.Rows(0).Item(0).ToString
dt.Dispose()
da.Dispose()
E depois gravaria nas tabelas.Assim eliminaria o datareader
ahh nao estou conseguindo entender.. =/
Desculpe
Mas para que serve a tabela enderecos?Qual é a sua idéia com ela ?
Não me leve a mal, por favor.
Só preciso entender mesmo
Mas para que serve a tabela enderecos?Qual é a sua idéia com ela ?
Não me leve a mal, por favor.
Só preciso entender mesmo
a tabela endereco tem os campos: cep, logradouro, numero, cidade,etc...
no form de cadastro do fornecedor preencho esses campos... mas eles sao da tabela endereco..
a tabela fornecedor tem a chave estrangeira da tabela endereco, para guardar o endereco dele...
no form de cadastro do fornecedor preencho esses campos... mas eles sao da tabela endereco..
a tabela fornecedor tem a chave estrangeira da tabela endereco, para guardar o endereco dele...
Não seria mais simples a tabela fornecedores ter todos esses campos
Endereco
Numero
Complemento
Bairro
Cidade
Uf
Etc
e eliminar a tabela endereco
Endereco
Numero
Complemento
Bairro
Cidade
Uf
Etc
e eliminar a tabela endereco
Private Sub btn_Salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Salvar.Click
btnSalvar()
lbl_cadastroText.Text = DateTime.Now.ToString([Ô]g[Ô])
Dim con As New MySqlConnection([Ô]server=localhost; user id=root; password=admin; database=workshopmanager[Ô])
Dim cmd As New MySqlCommand
Dim reader As MySqlDataReader
cmd = con.CreateCommand
con.Open()
With cmd
.CommandType = System.Data.CommandType.Text
.CommandText = [Ô]SELECT cod_Endereco FROM endereco WHERE cod_Endereco = (SELECT MAX(cod_Endereco) FROM endereco)[Ô]
End With
reader = cmd.ExecuteReader
If reader.Read() Then
codEndereco = reader([Ô]cod_Endereco[Ô])
reader.Close()
End If
con.Close()
con.Open()
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO endereco (cod_Endereco, cep_Endereco, nome_Endereco, numero_Endereco, complemento_Endereco, bairro_Endereco, cidade_Endereco, uf_Endereco, pais_Endereco) VALUES (@codendereco, @cep, @end, @num, @compl, @bairro, @cidade, @uf, @pais)[Ô]
.Parameters.Add([Ô]@codendereco[Ô], MySqlDbType.Int32)
.Parameters([Ô]@codendereco[Ô]).Value = codEndereco + 1
.Parameters.Add([Ô]@cep[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@cep[Ô]).Value = txt_cep.Text
.Parameters.Add([Ô]@end[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@end[Ô]).Value = txt_Endereco.Text
.Parameters.Add([Ô]@num[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@num[Ô]).Value = txt_numero.Text
.Parameters.Add([Ô]@compl[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@compl[Ô]).Value = txt_complemento.Text
.Parameters.Add([Ô]@bairro[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@bairro[Ô]).Value = txt_bairro.Text
.Parameters.Add([Ô]@cidade[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@cidade[Ô]).Value = txt_cidade.Text
.Parameters.Add([Ô]@uf[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@uf[Ô]).Value = txt_uf.Text
.Parameters.Add([Ô]@pais[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@pais[Ô]).Value = txt_pais.Text
.ExecuteNonQuery()
End With
con.Close()
[txt-color=#e80000] con.Open()
With cmd
.CommandType = System.Data.CommandType.Text
.CommandText = [Ô]SELECT cod_Endereco FROM endereco WHERE cod_Endereco = (SELECT MAX(cod_Endereco) FROM endereco)[Ô]
End With
reader = cmd.ExecuteReader
If reader.Read() Then
codEndereco = reader([Ô]cod_Endereco[Ô])
reader.Close()
End If
con.Close()[/txt-color]
con.Open()
[txt-color=#0000f0]cmd.Dispose()[/txt-color]
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]INSERT INTO fornecedor (razaosocial_Fornecedor, nome_Fornecedor, contato_Fornecedor, observacoes_Fornecedor, horadata_Fornecedor, CNPJ_Fornecedor, telComercial_Fornecedor, fax_Fornecedor, email_Fornecedor, cod_Endereco) VALUES (@razao, @nome, @contato, @obs, @horadata, @cnpj, @telcomercial, @fax, @email, @codend)[Ô]
.Parameters.Add([Ô]@razao[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@razao[Ô]).Value = txt_razao.Text
.Parameters.Add([Ô]@nome[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@nome[Ô]).Value = txt_Nome.Text
.Parameters.Add([Ô]@contato[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@contato[Ô]).Value = txt_Contato.Text
.Parameters.Add([Ô]@obs[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@obs[Ô]).Value = txt_obs.Text
.Parameters.Add([Ô]@horadata[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@horadata[Ô]).Value = lbl_cadastroText.Text
.Parameters.Add([Ô]@cnpj[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@cnpj[Ô]).Value = txt_cnpj.Text
.Parameters.Add([Ô]@telcomercial[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@telcomercial[Ô]).Value = txt_comercial.Text
.Parameters.Add([Ô]@fax[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@fax[Ô]).Value = txt_fax.Text
.Parameters.Add([Ô]@email[Ô], MySqlDbType.VarChar)
.Parameters([Ô]@email[Ô]).Value = txt_Email.Text
.Parameters.Add([Ô]@codend[Ô], MySqlDbType.Int32)
[txt-color=#007100] .Parameters([Ô]@codend[Ô]).Value = codEndereco+1[/txt-color]
If txt_razao.Text = [Ô][Ô] Then
btnAdicionar()
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
con.Close()
Else
[txt-color=#007100].ExecuteNonQuery()[/txt-color]
MessageBox.Show([Ô]Fornecedor cadastrado com sucesso![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
.CommandText = [Ô]SELECT cod_Fornecedor FROM fornecedor WHERE razaosocial_Fornecedor = @razao[Ô]
reader = cmd.ExecuteReader
reader.Read()
codFornecedor = reader.GetString([Ô]cod_Fornecedor[Ô])
lbl_cod.Text = codFornecedor
con.Close()
End If
con.Close()
End With
End Sub
A parte em vermelho não precisa dela, pois ao gravar você já capturou o ultimo código e salvou acrescentando mais 1
Na parte em verde é só acrescentar mais 1
Na parte em azul você limpa o Command para uma nova utilização
Na parte verde em negrito vc estava usando cmd.ExecuteNonQuery só que você esta tratando o cmd no With então é só colocar .ExecuteNonQuery
Verifica se funciona
Tópico encerrado , respostas não são mais permitidas