D3POD Posted August 21, 2012 at 05:56 PM Report Share #473066 Posted August 21, 2012 at 05:56 PM Boa tarde pessoal, tenho aqui uma duvida... public void guarda() { string nome = txt_nome.Text; int telefone = int.Parse(mtb_telf.Text); int telemovel = int.Parse(mtb_tele.Text); string morada = txt_morada.Text; int contribuinte = int.Parse(mtb_contr.Text); string email = txt_email.Text; string licenca = mtb_serie.Text; string activacao = mtb_activacao.Text; string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Clientes.accdb;Persist Security Info=False"; OleDbConnection con = new OleDbConnection(conn); string bd = @" insert into Clientes (Nome, Telefone, Telemovel, Morada, Contribuinte, Email, Licenca, Activacao) values (nome, telefone, telemovel, morada, contribuinte, email, licenca, activacao)"; OleDbCommand cmd = new OleDbCommand(bd, conn); cmd.ExecuteNonQuery(); } Acontece que na linha ... OleDbCommand cmd = new OleDbCommand(bd, conn); Existe um erro ao declarar a bd... se retirar já não aparece erro nenhum... O que está de mal no código, alguém me consegue dar um hel? 😛 Muito obrigado desde já 😉 Link to comment Share on other sites More sharing options...
Caça Posted August 21, 2012 at 06:13 PM Report Share #473069 Posted August 21, 2012 at 06:13 PM Qual é o erro que está a dar? Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
D3POD Posted August 21, 2012 at 07:22 PM Author Report Share #473076 Posted August 21, 2012 at 07:22 PM Diz que tem alguns argumentos inválidos... Link to comment Share on other sites More sharing options...
Caça Posted August 22, 2012 at 08:01 AM Report Share #473114 Posted August 22, 2012 at 08:01 AM Não estás a passar os valores das variáveis para a tua query, vê isto http://wiki.portugal-a-programar.pt/dev_net:csharp:access Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
rumbafum Posted August 22, 2012 at 09:09 AM Report Share #473119 Posted August 22, 2012 at 09:09 AM Para além do referido pelo Caça, também o construtor do comando não está correcto: Deveria ser OleDbCommand cmd = new OleDbCommand(bd, con); Link to comment Share on other sites More sharing options...
D3POD Posted August 22, 2012 at 09:45 AM Author Report Share #473124 Posted August 22, 2012 at 09:45 AM Hummm um pouco diferente do que tenho feito 😛 Segui um tutorial para aprender e saiu um pouco ao lado 😉 Muito obrigado 😉 Já cá coloco o código a funcionar 😛 Link to comment Share on other sites More sharing options...
D3POD Posted August 22, 2012 at 04:40 PM Author Report Share #473170 Posted August 22, 2012 at 04:40 PM Ora cá estou eu de novo 😛 Já terminei o código que ficou assim: public void guarda() { OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Clientes.accdb;Persist Security Info=False"); string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao] VALUE (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)"; OleDbCommand cmd = new OleDbCommand (query, conn); cmd.Parameters.Add ( "@nome", OleDbType.VarChar).Value = txt_nome.Text; cmd.Parameters.Add ( "@telefone", OleDbType.VarChar).Value = mtb_telf.Text; cmd.Parameters.Add ( "@telemovel", OleDbType.VarChar).Value = mtb_tele.Text; cmd.Parameters.Add ( "@morada", OleDbType.VarChar).Value = txt_morada.Text; cmd.Parameters.Add ( "@contribuinte", OleDbType.VarChar).Value = mtb_contr.Text; cmd.Parameters.Add ( "@email", OleDbType.VarChar).Value = txt_email.Text; cmd.Parameters.Add ( "@licenca", OleDbType.VarChar).Value = mtb_serie.Text; cmd.Parameters.Add ( "@activacao", OleDbType.VarChar).Value = mtb_activacao.Text; conn.Open(); int x = cmd.ExecuteNonQuery(); if (x < 1) { MessageBox.Show(" Erro ao Inserir os Dados", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show("Dados Inseridos com Sucesso", "Actualização Efectuada", MessageBoxButtons.OK, MessageBoxIcon.Information); } conn.Close(); cmd = null; } Agora quando faço a operação de inserir retorna-me um erro: OleDbException não foi manipulada Erro de sintaxe na instrução INSERT INTO. Será que tenho que iniciar um comando try/catch? E aparece a amarelo a seguinte expressão: int x = cmd.ExecuteNonQuery(); Como estou a passar apenas uma aplicação já feita em VB.NET fui ver o código e lá tinha colocado nas expressões que poderiam estar vazias o seguinte: command.Parameters.Add("@contacto2", OleDbType.Integer).Value = IIf(tel2txt.Text.Equals(String.Empty), DBNull.Value, tel2txt.Text) Mas neste caso estou a preencher tudo... Qual será o problema? Um abraço Link to comment Share on other sites More sharing options...
Caça Posted August 22, 2012 at 05:05 PM Report Share #473172 Posted August 22, 2012 at 05:05 PM Tens escrito VALUE em vez de VALUES Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
D3POD Posted August 22, 2012 at 06:46 PM Author Report Share #473177 Posted August 22, 2012 at 06:46 PM Ok, já rectifiquei 😉 Mas continua a dar o erro :S Mais alguma ideia? 😛 Link to comment Share on other sites More sharing options...
Caça Posted August 23, 2012 at 08:02 AM Report Share #473215 Posted August 23, 2012 at 08:02 AM (edited) Todos os campos são do tipo Texto? Edited August 23, 2012 at 08:02 AM by Caça Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
D3POD Posted August 23, 2012 at 01:20 PM Author Report Share #473246 Posted August 23, 2012 at 01:20 PM Boa tarde, realmente não é tudo texto... Aqui está o código correcto: // Caminho BD OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Clientes.accdb;Persist Security Info=False"); // String das colunas que serão editatadas, neste caso que irão receber dados string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao] VALUES (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)"; // Comando que faz a conexão OleDbCommand cmd = new OleDbCommand (query, conn); // Comando que define o que vai ser introduzido e em que parte da BD cmd.Parameters.Add ( "@nome", OleDbType.VarChar).Value = txt_nome.Text; cmd.Parameters.Add ( "@telefone", OleDbType.Integer).Value = mtb_telf.Text; cmd.Parameters.Add ( "@telemovel", OleDbType.Integer).Value = mtb_tele.Text; cmd.Parameters.Add ( "@morada", OleDbType.VarChar).Value = txt_morada.Text; cmd.Parameters.Add ( "@contribuinte", OleDbType.Integer).Value = mtb_contr.Text; cmd.Parameters.Add ( "@email", OleDbType.VarChar).Value = txt_email.Text; cmd.Parameters.Add ( "@licenca", OleDbType.Integer).Value = mtb_serie.Text; cmd.Parameters.Add ( "@activacao", OleDbType.Integer).Value = mtb_activacao.Text; //Abertura da Conexão conn.Open(); int x = cmd.ExecuteNonQuery(); // String para verificação dos dados if (x < 1) { MessageBox.Show(" Erro ao Inserir os Dados", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show("Dados Inseridos com Sucesso", "Actualização Efectuada", MessageBoxButtons.OK, MessageBoxIcon.Information); } conn.Close(); cmd = null; } Assim é o correcto, mas o erro continua o mesmo... 😉 Link to comment Share on other sites More sharing options...
rumbafum Posted August 23, 2012 at 01:45 PM Report Share #473248 Posted August 23, 2012 at 01:45 PM Então mas faltam-te parênteses na query. string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao] VALUES (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)"; deveria ser string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao]) VALUES (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)"; Link to comment Share on other sites More sharing options...
D3POD Posted August 23, 2012 at 08:00 PM Author Report Share #473303 Posted August 23, 2012 at 08:00 PM Ahhh agora já tenho outro erro: Falha ao converter o valor do parâmetro de String para Int32. tenho que por assim né? int.parse(mtb_telf.Text); Link to comment Share on other sites More sharing options...
Caça Posted August 24, 2012 at 07:59 AM Report Share #473335 Posted August 24, 2012 at 07:59 AM Sim, mas antes convém fazer uma verificação se não pode dar erros de conversão Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
D3POD Posted August 24, 2012 at 08:07 AM Author Report Share #473336 Posted August 24, 2012 at 08:07 AM Como não tinha PC quando respondi, só agora consegui testar e dá mesmo um erro mesmo na conversão. Deve ser isso da verificação, podes me dar uma ideia do que é ou algum tutorial sobre isso? Não estou a ver o que isso seja por verificação :S Um abraço Link to comment Share on other sites More sharing options...
Caça Posted August 24, 2012 at 08:09 AM Report Share #473337 Posted August 24, 2012 at 08:09 AM Int.TryParse Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
D3POD Posted August 24, 2012 at 01:33 PM Author Report Share #473382 Posted August 24, 2012 at 01:33 PM Boas, basicamente crio um metodo como está descrito e depois chamo o método... 😉 Muito obrigado 🙂 Agora não estou a perceber uma parte do tutorial: if (result) { Console.WriteLine("Converted '{0}' to {1}.", value, number); } else { if (value == null) value = ""; Console.WriteLine("Attempted conversion of '{0}' failed.", value); Basicamente, não percebo o que está a negrito 😞 Ele vai indicar na tela a conversão de value para number... mas isto em linha de comandos... não estou a ver é como tirar partido disto para windows form... Ver se me consigo explicar melhor... Então vou criar o metodo... este retorna se for true a conversão... mas onde posso ir buscar esse retorno para o usar depois no botão guardar? Ou estou a fazer uma grande confusão? Desculpem estar a perguntar sem testar, mas só mais para a noite é que estou por casa e assim retiro já as dúvidas 😉 Link to comment Share on other sites More sharing options...
Caça Posted August 24, 2012 at 03:21 PM Report Share #473391 Posted August 24, 2012 at 03:21 PM Não precisas disso, era só um exemplo, a variável result indica-te se é possível converter o valor. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
D3POD Posted August 24, 2012 at 05:52 PM Author Report Share #473413 Posted August 24, 2012 at 05:52 PM Peço desculpa, mas não percebi... eu percebo o que o código faz... só não o consigo adaptar ao que quero 😞 Link to comment Share on other sites More sharing options...
D3POD Posted August 24, 2012 at 08:48 PM Author Report Share #473437 Posted August 24, 2012 at 08:48 PM Boas, vou tentar explicar o que já tentei 😛 Procurei no google e no msdn e encontrei muita coisa... mas achei a explicação de como converter string em inteiros... ora o tutorial é igual ao do link e também em console application... O que me lembrei foi... então a diferença é apenas no Int... que deve ser Int32... e coloquei assim: cmd.Parameters.Add ( "@nome", OleDbType.VarChar).Value = txt_nome.Text; cmd.Parameters.Add("@telefone", OleDbType.Integer).Value = Int32.Parse(mtb_telf.Text); cmd.Parameters.Add ( "@telemovel", OleDbType.Integer).Value = Int32.Parse(mtb_tele.Text); cmd.Parameters.Add ( "@morada", OleDbType.VarChar).Value = txt_morada.Text; cmd.Parameters.Add ( "@contribuinte", OleDbType.Integer).Value = mtb_contr.Text; cmd.Parameters.Add ( "@email", OleDbType.VarChar).Value = txt_email.Text; cmd.Parameters.Add ( "@licenca", OleDbType.Integer).Value = Int32.Parse(mtb_serie.Text); cmd.Parameters.Add ( "@activacao", OleDbType.Integer).Value = Int32.Parse(mtb_activacao.Text); só fiz esta alteração e o erro vem assim: Cadeia de caracteres de entrada com formato incorrecto Agora achei interessante outra coisa que poderá ser o erro: Ao converter uma cadeia de caracteres para DataTime, analise essa cadeia para obter a data antes de aplicar cada variável ao objeto DataTime. DataTime? Foi aqui que fiquei confuso... Eu estou a usar maskedtextbox... onde formatei para colocar o numero de telefone xxx xxx xxx e o contribuinte xxx xxx xxxx Poderá o erro ter a ver com alguma coisa com a maskedtextbox? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now