PROGRAMA VB.NET COM MYSQL COM ERROS

BRUNOGOMES 20/10/2012 13:49:11
#412403
Pessoal, estou desenvolvendo um cadastro de Clientes em meu programa..
Esta tudo [Ô]pronto[Ô] em relação a design, e ao cadastro com banco de dados mysql: INSERT, DELETE e UPDATE
Mas tambem possui navegador de registros: as setas: <, <<, >, >> para ver os cadastros... e tambem o form de procurar registros..

No começo soh tinha as opçoes de cadastro com o mysql e funcionavam perfeitamente, mas ai fui acrescentando os outros recursos de procurar e etc..
E esses comandos começaram a dar problemas, as vezes edita, as vezes nao, as vezes exclui dois de uma vez, edita soh uma tabela, a relacionada n edita, ao inserir novo registro fica em primeiro ao inves de ultimo, ai tem q fechar o form e abrir denovo...

Preciso muitoo da ajuda de vcs!! por favor me ajjudem, preciso deixar esse sisteminha funcionando certinho..
Dar dicas, ver erros de lógica, me ajudar a arrumar.. Tentar ver pq esta ocorrendo esses problemas..

Abraço!
Aqui o programa com o codigo do banco de dados, em rar: http://www.4shared.com/rar/NOms8Pt5/Programa_Cadastro_de_clientes.html
BRUNOGOMES 23/10/2012 18:51:49
#412648
alguem pode me ajudar ??
OMAR2011 24/10/2012 08:20:53
#412672
Resposta escolhida
1º Se você desabilita os botões,então cria um novo botão de cancelar.
2º Quando incluir,Alterar,Excluir e Cancelar,atualiza seu formulário com
a mesma rotina de preenchimento da abertura pois seu form fica todo limpo.
3º
If btn_Sair.Enabled = True Then
If txt_Nome.Text = [Ô][Ô] Then
btnAdicionar()
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
txt_Nome.Focus()
Exit Sub
End If
Isto não é suficiente para bloquear CAMPOS VAZIOS.
Basta preencher ou então dar toque na tecla de espaço em txt_Nome.Text que grava tudo sem nenhum problema.
Vários campos das tabela ficarão todos vazios ai onde mora o problema da exclusão.

4º Corrigir

If btn_Sair.Enabled = True Then
[ô]If txt_Nome.Text = [Ô][Ô] Then [ô]Isto não bloqueia,basta usar o espaçador.

If txt_Nome.Text.Trim = [Ô][Ô] Then [ô]Para mim isto é o correto.Faça o teste dando um toque no espaçador e aciona a rotina e vê qual satisfaz.
btnAdicionar()
MessageBox.Show([Ô]é necessário que todos os campos com * sejam preenchidos![Ô], [Ô]Aviso[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
txt_Nome.Focus()
Exit Sub
End If

[txt-color=#e80000]Você tem que fazer com todos os textbox para não salvar como vazio.[/txt-color]

Mais uma.
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
With cmd
.CommandType = CommandType.Text
.CommandText = [Ô]DELETE FROM endereco WHERE cod_Endereco = @codend[Ô]
.Parameters.Add([Ô]@codend[Ô], MySqlDbType.Int32)
.Parameters([Ô]@codend[Ô]).Value = codEndereco
.ExecuteNonQuery()
End With

Se você tem 10 registro gravados na sua tabela e o registro que apresenta na sua tela
é o de NÚMERO 1.Ai vai excluir este registro.
MsgBox([Ô]Exclusão Feita com Sucesso![Ô], MsgBoxStyle.Information, [Ô]Concluido[Ô])
Quando vai verificar o registro excluido com a atualização da tela ele estará no mesmo lugar.
Claro e evidente.
.CommandText = [Ô]SELECT cod_Endereco FROM endereco WHERE cod_Endereco = (SELECT MAX(cod_Endereco) FROM endereco)[Ô]
Está errado.Vai excluir o último registro
Correto.
.CommandText = [Ô]SELECT cod_Endereco FROM endereco WHERE cod_Endereco = [Ô] & lbl_cod.Text & [Ô][Ô]
Agora vai ser o registro que está na tela.
Ainda tem mais.
Valeu
BRUNOGOMES 24/10/2012 13:10:20
#412706
Bom as dicas 3 e 4 eu coloqueio trim nas textboxs..

Agora na dica 2, eu coloquei o codigo q tinha no load do form em uma Sub, e chamei essa sub qndo salvo, edito e excluo, mas da erro!

E na ultima dica, no meu caso n tem como ser feito isso, pois no meu programa possui outros cadastros alem dos clientes, mas te mandei soh do cliente pois se resolvo ele, consigo mexer nos outros,,
Se eu colocar [Ô]SELECT cod_Endereco FROM endereco WHERE cod_Endereco = [Ô] & lbl_cod.Text & [Ô][Ô] ele vai pegar o codigo do cliente q ta no form e vai falar q eh igual ao codigo do endereco, mas nem sempre vao ser iguais...
OMAR2011 24/10/2012 15:01:43
#412716
Então você tem que fazer sua pesquisa para excluir como está no seu projeto terá que usar a tabela Cliente,onde está gravado,cop_pf,cod_telefone e cod_endereco.
Ficaria assim

[Ô]SELECT cod_cliente, cop_pf,cod_telefone e cod_endereco FROM cliente WHERE cod_cliente = [Ô] & lbl_cod.Text & [Ô][Ô]
Ai onde deve fazer a exclusão.

Pelo seu projeto como as tabelas são relacionadas,começando do zero com todos os campos Códigos de autonumeração ao incluir um registo que é nº 1
Cod_cliente =1
Cod_pf =1
cod_telefone=1
cod_endereco=1
é isto que coloquei para excluir os registros das tabelas.Não dará erro quando excluir e adicionar outros registros pois todos terá o mesmo número.
Isto é o seu Projeto no meu modo de ver.
Valeu
Inté
BRUNOGOMES 24/10/2012 16:33:44
#412730
OMAR muito obrigado.. o delete funcionou direitinho... ;)

Ai fui fazer o mesmo no UPDATe e funcionou tbm :D esta funcionando certo agoraa
coloquei assim no delete e no update
With cmd
.CommandType = System.Data.CommandType.Text
.CommandText = [Ô]SELECT * FROM cliente WHERE cod_cliente = [Ô] & lbl_cod.Text & [Ô][Ô]
End With
reader = cmd.ExecuteReader
If reader.Read() Then
codcliente = reader([Ô]cod_Cliente[Ô])
codEndereco = reader([Ô]cod_Endereco[Ô])
codTelefone = reader([Ô]cod_Telefone[Ô])
codPF = reader([Ô]cod_pf[Ô])
End If



Agora o unico problema é que quando adiciono um novo ou deleto no form para andar pelas setas, ele fica zuado, soh quando fecho e abro denovo q ele funciona normalmente..
Eu excluo e o cadastro continua lah soh com o codigo.. e quando adiciono ele nao anda normalmente e o ultimo q cadastrei fica em primeiro... estranho
OMAR2011 24/10/2012 21:56:08
#412741
Realmente constatei isto na qual relatou.Para isso não acontecer cria uma sub de atulização como está.
Private Sub AtualizarForm()
Dim con As New MySqlConnection([Ô]Server=localhost;Database=Bras2012; User=root;Password=12qw[Ô])
con.Open()
Dim cmd = New MySqlCommand([Ô]SELECT cliente.*, endereco.*, pf.*, telefone.* FROM cliente INNER JOIN endereco ON (cliente.cod_Endereco=endereco.cod_Endereco) INNER JOIN telefone ON (cliente.cod_Telefone=telefone.cod_Telefone) INNER JOIN pf ON (cliente.cod_PF=pf.cod_PF)[Ô], con)
Dim da = New MySqlDataAdapter()

da.SelectCommand = cmd
da.Fill(Tabela)
lbl_cod.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cod_Cliente[Ô])
txt_Nome.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]nome_Cliente[Ô])
txt_Contato.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]contato_Cliente[Ô])
txt_obs.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]observacoes_Cliente[Ô])
lbl_cadastroText.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]horadata_Cliente[Ô])
cmb_Pessoa.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]tipo_Cliente[Ô])
txt_Endereco.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]nome_Endereco[Ô])
txt_numero.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]numero_Endereco[Ô])
txt_complemento.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]complemento_Endereco[Ô])
txt_cep.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cep_Endereco[Ô])
txt_bairro.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]bairro_Endereco[Ô])
txt_cidade.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cidade_Endereco[Ô])
txt_uf.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]uf_Endereco[Ô])
txt_pais.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]pais_Endereco[Ô])
txt_Residencial.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]residencial_Telefone[Ô])
txt_Celular.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]celular_Telefone[Ô])
txt_fax.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]fax_Telefone[Ô])
txt_rg.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]rg_PF[Ô])
txt_cpf.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cpf_PF[Ô])
txt_Datanasci.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]dataNascimento_PF[Ô])
cmb_Sexo.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]sexo_PF[Ô])
txt_Email.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]email_PF[Ô])
con.Close()
End Sub

Onde termina o os códigos de Atualização,exclusão e inclusão coloque

AtualizarForm()

Ai movimenta os registro e constata se fica confusos.

Valeu
inté
BRUNOGOMES 24/10/2012 22:16:44
#412742
Mano.. coloquei isso depois de salvar um cadastro e da esse erro: [Ô]This causes two bindings in the collection to bind to the same property.
Parameter name: binding[Ô]

na linha: [Ô]lbl_cod.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cod_Cliente[Ô])[Ô]
OMAR2011 25/10/2012 06:45:03
#412751
Agora verifique se da certo.

Private Sub AtualizarForm()
LiberaControles()
Dim con As New MySqlConnection([Ô]Server=localhost;Database=Bras2012; User=root;Password=12qw[Ô])
con.Open()
Dim cmd = New MySqlCommand([Ô]SELECT cliente.*, endereco.*, pf.*, telefone.* FROM cliente INNER JOIN endereco ON (cliente.cod_Endereco=endereco.cod_Endereco) INNER JOIN telefone ON (cliente.cod_Telefone=telefone.cod_Telefone) INNER JOIN pf ON (cliente.cod_PF=pf.cod_PF)[Ô], con)
Dim da = New MySqlDataAdapter()

da.SelectCommand = cmd
da.Fill(Tabela)
lbl_cod.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cod_Cliente[Ô])
txt_Nome.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]nome_Cliente[Ô])
txt_Contato.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]contato_Cliente[Ô])
txt_obs.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]observacoes_Cliente[Ô])
lbl_cadastroText.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]horadata_Cliente[Ô])
cmb_Pessoa.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]tipo_Cliente[Ô])
txt_Endereco.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]nome_Endereco[Ô])
txt_numero.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]numero_Endereco[Ô])
txt_complemento.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]complemento_Endereco[Ô])
txt_cep.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cep_Endereco[Ô])
txt_bairro.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]bairro_Endereco[Ô])
txt_cidade.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cidade_Endereco[Ô])
txt_uf.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]uf_Endereco[Ô])
txt_pais.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]pais_Endereco[Ô])
txt_Residencial.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]residencial_Telefone[Ô])
txt_Celular.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]celular_Telefone[Ô])
txt_fax.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]fax_Telefone[Ô])
txt_rg.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]rg_PF[Ô])
txt_cpf.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]cpf_PF[Ô])
txt_Datanasci.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]dataNascimento_PF[Ô])
cmb_Sexo.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]sexo_PF[Ô])
txt_Email.DataBindings.Add([Ô]Text[Ô], Tabela, [Ô]email_PF[Ô])
con.Close()
End Sub
Private Sub LiberaControles()
lbl_cod.DataBindings.Clear()
txt_Nome.DataBindings.Clear()
txt_Contato.DataBindings.Clear()
txt_obs.DataBindings.Clear()
lbl_cadastroText.DataBindings.Clear()
cmb_Pessoa.DataBindings.Clear()
txt_Endereco.DataBindings.Clear()
txt_numero.DataBindings.Clear()
txt_complemento.DataBindings.Clear()
txt_cep.DataBindings.Clear()
txt_bairro.DataBindings.Clear()
txt_cidade.DataBindings.Clear()
txt_uf.DataBindings.Clear()
txt_pais.DataBindings.Clear()
txt_Residencial.DataBindings.Clear()
txt_Celular.DataBindings.Clear()
txt_fax.DataBindings.Clear()
txt_rg.DataBindings.Clear()
txt_cpf.DataBindings.Clear()
txt_Datanasci.DataBindings.Clear()
cmb_Sexo.DataBindings.Clear()
txt_Email.DataBindings.Clear()
End Sub
BRUNOGOMES 25/10/2012 13:25:44
#412789
Usei esse, e agora quando cadastro os registros estao repetindo.. ai duplica e o ultimo q cadastro fica com o codigo 1..

OMAR2011 25/10/2012 16:26:24
#412813
[txt-color=#e80000]Agora tem que da certo[/txt-color]

Private Sub LiberaControles()
Tabela.Clear()
lbl_cod.DataBindings.Clear()
txt_Nome.DataBindings.Clear()
txt_Contato.DataBindings.Clear()
txt_obs.DataBindings.Clear()
lbl_cadastroText.DataBindings.Clear()
cmb_Pessoa.DataBindings.Clear()
txt_Endereco.DataBindings.Clear()
txt_numero.DataBindings.Clear()
txt_complemento.DataBindings.Clear()
txt_cep.DataBindings.Clear()
txt_bairro.DataBindings.Clear()
txt_cidade.DataBindings.Clear()
txt_uf.DataBindings.Clear()
txt_pais.DataBindings.Clear()
txt_Residencial.DataBindings.Clear()
txt_Celular.DataBindings.Clear()
txt_fax.DataBindings.Clear()
txt_rg.DataBindings.Clear()
txt_cpf.DataBindings.Clear()
txt_Datanasci.DataBindings.Clear()
cmb_Sexo.DataBindings.Clear()
txt_Email.DataBindings.Clear()
End Sub
Página 1 de 4 [34 registro(s)]
Tópico encerrado , respostas não são mais permitidas