ERRO DE SOBRECARGA AO CADASTRAR

ALANTB 04/09/2015 13:26:49
#451009
Olá, alguém sabe como resolver erro de [Ô]SOBRECARGA[Ô] ao clicar em [Ô]CADASTRAR[Ô] no VS2012 professional com Access 2007?Tô tentando aprender VB.NET e comecei com essa video-aula de C# do youtube:https://www.youtube.com/watch?v=uUrj4ii_-mU. Fiz tudo como no vídeo mas na hora de clicar em cadastrar da erro de [Ô]Sobrecarga[Ô]. Nunca vi esse erro. Alguma ideia???
Segue o código do botão:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

namespace CRUD
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnCadastrar_Click(object sender, EventArgs e)
{
string strCon = @[Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[Ô]+Application.StartupPath+@[Ô]\Empresa.accdb[Ô];
string comando = [Ô]INSERT INTO tbCliente (Nome,Endereco,Telefone,RG,Automovel)values(@Nome,@Endereco,@Telefone,@RG,@Automovel)[Ô];

OleDbConnection con = new OleDbConnection(strCon);
OleDbCommand com = new OleDbCommand(comando, con);

com.Parameters.Add([Ô]@Nome[Ô], OleDbType.VarChar).Value = txtNome.Text;
com.Parameters.Add([Ô]@Endereco[Ô], OleDbType.VarChar).Value = txtEnd.Text;
com.Parameters.Add([Ô]@Telefone[Ô], OleDbType.VarChar).Value = maskedTextBox1.Text;
com.Parameters.Add([Ô]@RG[Ô], OleDbType.VarChar).Value = maskedTextBox2.Text;
com.Parameters.Add([Ô]@Automovel[Ô],OleDbType.VarChar).Value = txtAuto.Text;

try
{
con.Open();
com.ExecuteNonQuery();
MessageBox.Show([Ô]Cadastro Bem Sucedido![Ô]);

}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
finally
{
con.Close();
}

}
LVFIOROT 04/09/2015 15:53:02
#451019
tire um print ou copie e cole exatamente a a msg de erro.

pode ser na estrutura dos campos da tabela em questão

seria interessante voce anexar seu projeto, ja que é um exemplo
ALANTB 08/09/2015 08:13:16
#451117
Olá desculpe a demora pra voltar pois sai no feriado. Segue o projeto....
ACCIOLLY 08/09/2015 09:15:36
#451121
Resposta escolhida
Olá amigo, acredito que isso resolva seus problemas. Essa é uma classe de conexão, só crie uma nova classe e de a ela o nome de Conexao.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

namespace seu_name_space
{
class Conexao
{
private string caminhoBanco = @[Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=seuBanco.mdb; Jet OLEDB:Database Password=suasenha;[Ô];

/**
* Parametro SQL string para setar uma pesquisa no banco de dados
* Retorna Uma tabela com o resultado da pesquisa segundo o parametro SQL
* OBS: Ao instanciar este método, setar apenas SQL de SELECT
*/

public DataTable Pesquisar(String SQL)
{
DataTable tabela = new DataTable();

try
{
tabela.Rows.Clear();

OleDbConnection conn = new OleDbConnection(caminhoBanco);
conn.Open();

OleDbCommand comando = new OleDbCommand(SQL, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(comando);

adapter.Fill(tabela);

conn.Close();


}
catch (Exception Ex)
{
MessageBox.Show([Ô]Erro de Comando: [Ô] + Ex.Message);
}

return tabela;
}



/**
* Parametro SQL string para setar uma pesquisa no banco de dados
* OBS: Ao instanciar este método, setar apenas SQL de INSERT, UPDATE ou DELET
*/

public void CRUD(string SQL)
{
try
{
OleDbConnection conn = new OleDbConnection(caminhoBanco);
conn.Open();

OleDbCommand comando = new OleDbCommand(SQL, conn);

comando.ExecuteNonQuery();
conn.Close();
}
catch (Exception Ex)
{
MessageBox.Show([Ô]Erro de Comando: [Ô] + Ex.Message);
}
}

}
}


Daí em todas as outas classes que vc for usá-la, primeiro vc a importa

using Conexao;


Depois você só faz uma instancia dela para fazer essas operações. Ex:

num botão cadastrar:

Conexao conn = new Conexao();
string SQL = [Ô]INSERT INTO tabela(campos) VALUES(valores)[Ô];
conn.CRUD(SQL);


num botão pesquisar:

Conexao conn = new Conexao();
string SQL = [Ô]SELECT campos FROM tabela WHERE criterio[Ô];
DataTable dados = conn.Pesquisar(SQL);

//setar valor da pesquisa num TextBox
TextBox1.Text = dados.Rows[0][[Ô]campo_da_tabela[Ô]].toString(); //essa é uma forma pro textbox e maskedbox
TextBox2.DataBindings.Add([Ô]Text[Ô], dados, [Ô]campo_da_tabela[Ô]); //essa é outra forma pro textbox e maskedbox

//setar valor da pesquisa num DataGridView
DataGridView1.DataSource = dados;

//setar valor num combobox
ComboBox1.Text = [Ô][Ô];
ComboBox1.ValueMember = [Ô]campo da tabela[Ô];//nesse eu prefiro colocar um campo do tipo chave primária, tipo codCliente, mas vai do gosto de cada um
ComboBox1.DisplayMember = [Ô]campo da tabela[Ô];//aqui eu já prefiro um campo que o descreva, tipo nomeCliente;
ComboBox1.DataSource = dados;


Só mais uma coisinha não muito importante, quando for lançar um novo tópico atente-se a qual linguagem vai pedir ajuda. no seu caso é C# mas vc colocou como se fosse VB.Net.

Té Mais
ACCIOLLY 08/09/2015 10:14:24
#451124
Olá ALANTB
Eu baixei seu proj e vi que seu problema estava no banco. O campo RG estava como numérico, é melhor deixa-lo como texto. Em todo caso eu encaminho seu projeto com as incrementações que te falei na ultima resposta. Estude-as e aprimore-as!

Té mais
ALANTB 08/09/2015 11:41:55
#451126
ACCIOLLY, ainda estava lendo o post anterior tentando saber como fazer as modificações sugeridas anteriormente. Mas já que tu conseguiu fazer as modificações direto no projeto ficará melhor de entender o que deve ser feito. De cara pude perceber que com a classe Conexão eu não preciso inserir o caminho do banco em todos os botões de comando como foi feito na vídeo-aula, o que facilita a ligação com o banco. A partir desse modelo, vou começar a testar novas funcionalidades, controles e espero conseguir chegar com vida até os famosos RELATÓRIOS. Por enquanto agradeço a atenção e a disponibilidade...vou pontuar e encerrar...até a próxima....valeu!!!!!!
Tópico encerrado , respostas não são mais permitidas