DADOS NÃO SENDO CADASTRADOS

EMERGKI 24/02/2015 21:19:53
#444763
Boa noite, estou com um problema, estou tentando fazer um simples cadastro e, infelizmente não quer salvar os dados, por exemplo, os dados vão para o banco de dados, é possível até visualizá-los em um Grid, no entanto, eu só consigo visualizar antes de fechar o programa, pois, se eu fechar e abrir novamente, os dados não estão mais lá. Não entendo o que está acontecendo, estou usando o Visual Studio 2013 (VB).

             Using con As New OleDbConnection
con.ConnectionString = My.Settings.LCDadosConnectionString
con.Open()
Dim comando As New OleDbCommand

comando.Parameters.Clear()
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]CodProduto[Ô]
comando.Parameters.Item([Ô]CodProduto[Ô]).Value = txtCodigo.Text
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]Descricao[Ô]
comando.Parameters.Item([Ô]Descricao[Ô]).Value = txtDescricao.Text
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]Unidade[Ô]
comando.Parameters.Item([Ô]Unidade[Ô]).Value = txtUnidade.Text
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]PrecoCusto[Ô]
comando.Parameters.Item([Ô]PrecoCusto[Ô]).Value = txtPrecoCusto.Text
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]PrecoVenda[Ô]
comando.Parameters.Item([Ô]PrecoVenda[Ô]).Value = txtPrecoVenda.Text
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]Fornecedor[Ô]
comando.Parameters.Item([Ô]Fornecedor[Ô]).Value = txtFornecedor.Text
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]Saldo[Ô]
comando.Parameters.Item([Ô]Saldo[Ô]).Value = txtQuantidade.Text
comando.Parameters.Add([Ô]@QtdeMinima[Ô], System.Data.OleDb.OleDbType.VarChar, 50).Value = txtQuantidadeMinima.Text
comando.Parameters.Add(comando.CreateParameter).ParameterName = [Ô]QtdeMinima[Ô]
comando.Parameters.Item([Ô]QtdeMinima[Ô]).Value = txtQuantidadeMinima.Text()

Try
comando.CommandText = [Ô]INSERT INTO Produtos ( CodProduto, Descricao, Unidade, PrecoCusto, PrecoVenda, Fornecedor, Saldo, QtdeMinima )[Ô] & _
[Ô]VALUES ( txtCodigo.Text , txtDescricao.Text , txtUnidade.Text , txtPrecoCusto.Text , txtPrecoVenda.Text , txtFornecedor.Text , txtQuantidade.Text , txtQuantidadeMinima.Text )[Ô]
comando.CommandType = CommandType.Text
comando.Connection = con
comando.ExecuteNonQuery()
MessageBox.Show([Ô]Agora acho que cadastrou[Ô])
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try


Vocês tem alguma idéia do que pode estar ocorrendo?
NICKOSOFT 25/02/2015 05:58:13
#444764
veja meu exemplo, no caso o DS é um dataset q preenchi com uma consulta, faco o laco pra adicionar tudo retornado em outra tabela
  
Dim SqlInc As String = [Ô]INSERT INTO CEP(Logradouro,Cep,Bairro,Municipio,UF) values (@logradouro,@cep,@bairro,@municipio,@uf)[Ô]
For index = 0 To ds.Tables(0).Rows.Count - 1
Logradouro = ds.Tables(0).Rows(index).Item(0).ToString & [Ô] [Ô] & ds.Tables(0).Rows(index).Item(1).ToString
Bairro = ds.Tables(0).Rows(index).Item(6).ToString
Municipio = ds.Tables(0).Rows(index).Item(4).ToString
UF = ds.Tables(0).Rows(index).Item(3).ToString
CEP = ds.Tables(0).Rows(index).Item(2).ToString
[ô]inserir na tabela ceps
Dim parametrosNomes(4) As String
parametrosNomes(0) = [Ô]@Logradouro[Ô]
parametrosNomes(1) = [Ô]@Cep[Ô]
parametrosNomes(2) = [Ô]@Bairro[Ô]
parametrosNomes(3) = [Ô]@Municipio[Ô]
parametrosNomes(4) = [Ô]@UF[Ô]

Dim parametrosValores(4) As String
parametrosValores(0) = Mid(Logradouro, 1, 50)
parametrosValores(1) = Mid(CEP, 1, 8)
parametrosValores(2) = Mid(Bairro, 1, 50)
parametrosValores(3) = Mid(Municipio, 1, 50)
parametrosValores(4) = Mid(UF, 1, 2)

Dim command As New SqlCeCommand(SqlInc, connection)
FillParameters(command, parametrosNomes, parametrosValores)
command.ExecuteNonQuery()
command.Dispose()
Next

a função
  
Private Sub FillParameters(ByVal command As SqlCeCommand, ByVal parameterNames As String(), ByVal parameterVals As String())
If parameterNames IsNot Nothing Then
For i = 0 To parameterNames.Length - 1
command.Parameters.AddWithValue(parameterNames(i), parameterVals(i))
Next
End If
End Sub
OMAR2011 25/02/2015 08:03:13
#444768
Testei seu código e realmente ele gravar e não some os registros da tabela.
Um cabra que faz parte do fórum destacou a importância do [txt-color=#e80000]Commit.[/txt-color]
Usa e depois posta se revolveu.
Do jeito que escreveu seu post parece tabela temporária.
NICKOSOFT 25/02/2015 09:57:28
#444770
so tem um detalhe no código original, q nem testei, ele inicia os parâmetros, e no final passa os campos do form para gravação e não os parâmetros q iniciou e preencheu com os dados do form, dessa forma não precisa criar parâmetros e inicia-los
NICKOSOFT 25/02/2015 10:55:08
#444771
em C# como usar o lance de parâmetros
  
// define a string de conexão

string strConnection = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dados\\Cadastro.mdb[Ô];




//cria a conexão com o banco de dados

OleDbConnection dbConnection = new OleDbConnection(strConnection);




//cria um comando

OleDbCommand cmdQry = dbConnection.CreateCommand();



//Define a instrução SQL com parâmetros


cmdQry.CommandText = [Ô]INSERT INTO Clientes(nome,endereco,cidade,estado,cep,telefone)[Ô]

+ [Ô] VALUES (@nome, @endereco, @cidade, @estado, @cep, @Telefone)[Ô];





// definindo os parâmetro: nome , tipo de dados e tamanho

cmdQry.Parameters.Add([Ô]@nome[Ô], OleDbType.VarChar, 50);

cmdQry.Parameters.Add([Ô]@endereco[Ô], OleDbType.VarChar, 50);

cmdQry.Parameters.Add([Ô]@cidade[Ô], OleDbType.VarChar, 50);

cmdQry.Parameters.Add([Ô]@estado[Ô], OleDbType.VarChar, 50);

cmdQry.Parameters.Add([Ô]@cep[Ô], OleDbType.VarChar, 50);

cmdQry.Parameters.Add([Ô]@telefone[Ô], OleDbType.VarChar, 50);





//atribuindo valores aos parâmetros

cmdQry.Parameters[[Ô]@nome[Ô]].Value = txtNome.Text;

cmdQry.Parameters[[Ô]@endereco[Ô]].Value = txtEndereco.Text;

cmdQry.Parameters[[Ô]@cidade[Ô]].Value = txtCidade.Text;

cmdQry.Parameters[[Ô]@estado[Ô]].Value = txtEstado.Text;

cmdQry.Parameters[[Ô]@cep[Ô]].Value = txtCep.Text;

cmdQry.Parameters[[Ô]@telefone[Ô]].Value = txtTelefone.Text;


try

{

// abre o banco

dbConnection.Open();

// executa a query

cmdQry.ExecuteNonQuery();

//

MessageBox.Show([Ô]Dados Salvos com sucesso.[Ô]);

}

//Trata a exceção

catch (OleDbException ex)

{

MessageBox.Show([Ô]Error: [Ô] + ex.Message);

}

finally

{

//fecha a conexao

dbConnection.Close();

}
OCELOT 25/02/2015 11:19:45
#444772
Resposta escolhida
Você provavelmente adicionou o banco de dados no projeto, então cada vez que executa o programa ele substitui o banco na pasta em que o programa é compilado pelo que está na pasta do projeto.
OMAR2011 25/02/2015 11:39:12
#444773
[txt-color=#e80000]Bicuda Minha, tem que admitir.[/txt-color]

Código não grava aqui no meu teste com oracle 10g.
Gravou pela minha modificação.
Ele usa
VALUES ( txtCodigo.Text , txtDescricao.Text , txtUnidade.Text ) [ô][txt-color=#007100] Isto não grava[/txt-color]
Alterei para
VALUES ([Ô] & txtCodigo.Text & [Ô] , [ô][Ô] & txtDescricao.Text & [Ô][ô], [ô][Ô] & txtUnidade.Text & [Ô][ô])

[txt-color=#0000f0]NICKOSOFT[/txt-color]

Seu código é C#.
Post do outro vb, se não tem que converter.
Parâmetros sem valor.
Você está certo.


NICKOSOFT 25/02/2015 11:58:45
#444774
sim sim, mas a parte principal de iniciar parâmetro e preencher acho q é bem tranquila pra fazer a conversão e adaptação.....
exatamente qnd passa os campos do form é necessário as aspas simples pra string, virgulas entre os [Ô]valores[Ô]
tem um beneficio em usar parâmetros, mas nunca lembro o nome técnico q se da a isso, não lembro, mas acho q é algo injection...
NICKOSOFT 25/02/2015 13:02:58
#444777
básico, simples e funcional pra entender, so declarando o parâmetro e ja preenchendo, sem informar nem tipo, claro q pensando em algo profissional, isso ta completamente meia boca....
  
Private Sub btnIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluir.Click
Dim NomeBanco As String = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal) & [Ô]\ExemploDB.mdb[Ô]
Dim con As New OleDb.OleDbConnection([Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source =[Ô] & NomeBanco)
con.Open()

Dim SqlInc As String = [Ô]INSERT INTO usuario(nome,senha) values (@nome,@senha)[Ô]
Dim command As New OleDbCommand(SqlInc, con)
command.Parameters.AddWithValue([Ô]@nome[Ô], txtNome.text)
command.Parameters.AddWithValue([Ô]@senha[Ô], txtSenha.text)
command.ExecuteNonQuery()
command.Dispose()
con.Close()
End Sub

mais profissional poderia ficar assim cada parâmetro
  
command.Parameters.Add([Ô]@nome[Ô], OleDbType.VarChar, 50)
command.Parameters.Item([Ô]@nome[Ô]).Value = txtNome.Text

EMERGKI 26/02/2015 15:51:43
#444809
Boa tarde pessoal, desculpem-me pela demora, eu acabei não podendo voltar aqui para conferir o post, vou fazer os testes para ver o que vai dar, Muito obrigado à todos pela atenção!
EMERGKI 26/02/2015 16:48:46
#444811
Então galera, pelo jeito é o que o amigo OCELOT disse, pois eu fiz um build do projeto e no build está funcionando corretamente, só não funciona dentro do projeto por causa do banco de dados ter sido adicionado ao mesmo. No entanto, gostaria de fazer isso funcionar no próprio banco de dados do projeto.
Tópico encerrado , respostas não são mais permitidas