DADOS NÃO SENDO CADASTRADOS
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).
Vocês tem alguma idéia do que pode estar ocorrendo?
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?
veja meu exemplo, no caso o DS é um dataset q preenchi com uma consulta, faco o laco pra adicionar tudo retornado em outra tabela
a função
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
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.
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.
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
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();
}
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.
[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.
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.
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...
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...
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....
mais profissional poderia ficar assim cada parâmetro
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
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!
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