ERRO CODIGO CADASTRO

BRUNOGOMES 12/10/2012 02:46:49
#411887
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:

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!
ADHEL 12/10/2012 10:00:17
#411896
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
BRUNOGOMES 12/10/2012 13:09:04
#411911
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..
ADHEL 12/10/2012 14:31:53
#411930
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
BRUNOGOMES 12/10/2012 14:41:07
#411933
siim fazendo com as subs até funcionou o cadastro.. mas da erro no datareader...
ADHEL 12/10/2012 15:03:53
#411936
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

BRUNOGOMES 12/10/2012 15:40:18
#411941
ahh nao estou conseguindo entender.. =/
ADHEL 12/10/2012 15:51:46
#411945
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
BRUNOGOMES 12/10/2012 16:29:07
#411948
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...
ADHEL 12/10/2012 16:37:50
#411951
Não seria mais simples a tabela fornecedores ter todos esses campos

Endereco
Numero
Complemento
Bairro
Cidade
Uf
Etc

e eliminar a tabela endereco

FILMAN 12/10/2012 19:43:34
#411959
Resposta escolhida
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
Página 1 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas