O QUE TA ERADO NO PROGRAMA?

NETBRFAKES 13/12/2013 14:15:11
#432071
Boa tarde pessoal
estou com 1 problema aqui

nao consigo fazer funcionar as opçoes
excluir
e editar , alguem poderia dar uma olhada por favor!

segue em anexo a fonte
obrigado
KERPLUNK 13/12/2013 14:42:33
#432072
Muito louvável sua vontade de usar OOP, mas ainda tem um bom caminho a percorrer, vamos às dicas:
1 - Uma vez que você criou uma classe entidade, no seu caso [Ô]Cliente[Ô], os métodos CRUD(inclusão, exclusão, edição), deve trabalhar com a própria entidade instanciada através do objeto [Ô]Me[Ô], mais ou menos assim:

Public Sub Incluir()
Dim strConexaoOleDb As String = ConfigurationSettings.AppSettings([Ô]strConexaoBD[Ô])
Dim strSQL As String = [Ô]INSERT INTO Cliente(Nome, Endereco, loja, status, total, Email, rastreio, data, quantidade, produto)VALUES(@Nome, @Endereco, @loja, @status, @total, @Email, @rastreio, @data, @quantidade, @produto)[Ô]
Try
conexaoOleDb = Cria_Conexao_OleDb(strConexaoOleDb)
daOleDb = cria_DataAdapter_OleDb(conexaoOleDb, strSQL)
comandoOleDb = cria_Comando_OleDb(conexaoOleDb, strSQL)

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@Nome[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@Nome[Ô]).Value = Me.Nome

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@Endereco[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@Endereco[Ô]).Value = Me.Endereco

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@loja[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@loja[Ô]).Value = Me.loja

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@status[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@status[Ô]).Value = Me.status

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@total[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@total[Ô]).Value = Me.total

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@rastreio[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@rastreio[Ô]).Value = Me.rastreio

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@data[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@data[Ô]).Value = Me.data

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@quantidade[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@quantidade[Ô]).Value = Me.quantidade

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@produto[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@produto[Ô]).Value = Me.produto

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@Email[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@Email[Ô]).Value = Me.Email

comandoOleDb.ExecuteNonQuery()
conexaoOleDb.Close()
Catch mExcecao As System.Exception
mErro = mExcecao.ToString
conexaoOleDb.Close()
End Try

End Sub


Assim, no seu form você faria algo como:

dim c As New Cliente
c.Nome = txtNome.Text
c.Endereco = txtEndereco.Text
...(outras propridades)

c.Incluir()


E pronto, a inclusão é feita!

2 - Atente para erros de português, o cliente mais criterioso, nota este tipo de coisa e infelizmente, julga a capacidade do desenvolvedor por esse parâmetro
3 - Procure utilizar os blocos [Ô]Using[Ô], eles destroem a instância e já mandam direto para o GAC, sem você se preocupar com dispose. Um exemplo seria:

Public Sub Incluir()
Try
Using conexaoOleDb As New OleDbConnection(ConfigurationSettings.AppSettings([Ô]strConexaoBD[Ô]))
Using comandoOleDb As New OleDbCommand([Ô]INSERT INTO Cliente(Nome, Endereco, loja, status, total, Email, rastreio, data, quantidade, produto)VALUES(@Nome, @Endereco, @loja, @status, @total, @Email, @rastreio, @data, @quantidade, @produto)[Ô], conexaoOleDb)
comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@Nome[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@Nome[Ô]).Value = Me.Nome

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@Endereco[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@Endereco[Ô]).Value = Me.Endereco

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@loja[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@loja[Ô]).Value = Me.loja

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@status[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@status[Ô]).Value = Me.status

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@total[Ô], OleDbType.VarChar, 50))
comandoOleDb.Parameters([Ô]@total[Ô]).Value = Me.total

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@rastreio[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@rastreio[Ô]).Value = Me.rastreio

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@data[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@data[Ô]).Value = Me.data

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@quantidade[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@quantidade[Ô]).Value = Me.quantidade

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@produto[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@produto[Ô]).Value = Me.produto

comandoOleDb.Parameters.Add(New OleDbParameter([Ô]@Email[Ô], OleDbType.VarChar, 100))
comandoOleDb.Parameters([Ô]@Email[Ô]).Value = Me.Email

comandoOleDb.ExecuteNonQuery()

End Using
End Using


Catch mExcecao As System.Exception
mErro = mExcecao.ToString
conexaoOleDb.Close()
End Try

End Sub


4 - Atente também para o uso correto do ADO.NET, você está usando DataAdapter pra quase tudo, o que é desnecessário na maioria dos casos

5 - Também não custa dar uma olhada em padrões de nomenclatura, como camel case e pascal case


Por hora era isso...
NILSONTRES 13/12/2013 14:44:49
#432073
Vc não mandou o banco que tem essas tabelas, mas vi um ponto onde pode estar dando errado, vc esta trando data como string.
KERPLUNK 13/12/2013 14:46:03
#432074
Esqueci mais uma dica importante:
5 - Use os tipos de dados corretos, quando data, use DateTime, quando número, o tipo numérico apropriado(inteiro, double...). O uso de dados tudo como string(varchar), gera muitos problemas.
NETBRFAKES 14/12/2013 01:12:35
#432081
Ate agradeço mas nao entendi nada !

A parte de incluir ta normal , funciona beleza
so a parte de exluir e editar que não da certo! :(
NILSONTRES 14/12/2013 09:11:45
#432082
Citação:

Ate agradeço mas nao entendi nada !



Ao invés de:Public Property Data as String
Use Public Property Data as Date

Quanto ao Me.Nome por exemplo
Vc não precisa passar parametros para a função na sua classe, já que vc já criou as propriedas dela.
oCliente.incluirNovoCliente(TxtNome.Text, TxtEndereco.Text, rastreio.Text, data.Text, quantidade.Text, produto.Text, Txtloja.Text, cbostatus.Text, Txttotal.Text, txtEmail.Text)

KERPLUNK

Citação:

dim c As New Cliente
c.Nome = txtNome.Text
c.Endereco = txtEndereco.Text
...(outras propridades)

c.Incluir()



Fica muito mais orgazinazado e facil de implementar.
NETBRFAKES 14/12/2013 12:53:49
#432084
Ta legal isso ja entendi
Mas o meu problema nao e incluir nada
isso funciona tudo certo
ele inclui certo e consigo ver o que incluiu
o meu problema
e

APAGAR
EDITAR

nessa parte que nao da certo
incluir isso nao precisa isso funciona normal!
NETBRFAKES 15/12/2013 14:06:47
#432102
:( Alguem?
PEGUDO 18/12/2013 08:03:15
#432231
Resposta escolhida
Cara,
Se o teu exemplo em anexo, realmente, é a cópia fiel do teu programa, então você nunca vai conseguir mesmo.
1º - Você nunca vai deletar nada porque a coluna da sua tabela, onde ficam os nomes dos clientes, não é [Ô]Cliente[Ô] e sim [Ô]ClienteNome[Ô];
2º - A mesma coisa acontece com UPDATE. Como o programa vai modificar uma coluna que não existe? No seu exemplo (em anexo), o BD só tem as colunas:ClienteID, ClienteNome, Endereco, Cidade, Estado e Fone. Você nunca vai atualizar um cliente pela coluna [Ô]Código[Ô] se, na sua tabela, a coluna chama-se [Ô]ClienteID[Ô].
O certo seria: [Ô]UPDATE Cliente SET ClienteNome=[ô][Ô] & Nome & [Ô][ô], Endereco=[ô][Ô] & ClienteEndereco & [Ô][ô] WHERE ClienteID=[Ô] & Codigo
Observação: Quando a variável final for do tipo numérica não precisa fechar a String com aspas, como você fez. Veja, acima, que retirei as aspas do final.
Outra coisa: Evite fazer a verificação assim: [txt-color=#0000f0]If conexaoOleDb.State.Open Then...[/txt-color] Faça assim: [txt-color=#0000f0]If conexaoOleDb.State = ConnectionState.Open Then...[/txt-color]
Tópico encerrado , respostas não são mais permitidas