Ao adicionar novo registro trazer o código definitivo e não -1, -2...
Olá, tenho um Windowsform para cadastro em um BD Access, no bindingnavigator tem o botão adicionar novo registro, como fazer para trazer o código definitivo do registro e não -1 .
Pois ele só mostra o código definitivo depois de salvar, gostaria que ao clicar em adicionar já mostrasse o código certo da sequencia de cadastro.
Abaixo imagem para melhor entendimento.
[url]http://uploaddeimagens.com.br/imagens/codigo_-1-png[/url]
Pois ele só mostra o código definitivo depois de salvar, gostaria que ao clicar em adicionar já mostrasse o código certo da sequencia de cadastro.
Abaixo imagem para melhor entendimento.
[url]http://uploaddeimagens.com.br/imagens/codigo_-1-png[/url]
Jair Souza
Curtidas 0
Melhor post
Joel Rodrigues
30/09/2013
Foram necessárias duas barras por que uma barra sozinha indica um caractere de escape (\n, \w, \T, etc). Quando você coloca duas barras, isso é interpretado como uma barra que deve ser inserida literalmente naquele ponto.
Enfim, que bom que deu certo.
Tópico concluído.
Enfim, que bom que deu certo.
Tópico concluído.
GOSTEI 1
Mais Respostas
Fabiano Carvalho
17/09/2013
tente colocar max(id) + 1 na consulta que gera esse ID;
GOSTEI 0
Jair Souza
17/09/2013
Como mencionei acima, o botão adicionar é criado automaticamente no BindingNavigator quando arrastei o BD access para dentro do projeto, não foi criado pelo programador, portanto não tenho acesso ao código e se tenho não como acessar...
GOSTEI 0
Jair Souza
17/09/2013
Olá, alguem tem alguma idéia do que fazer...? eu não tenho a mínima direção...
GOSTEI 0
Joel Rodrigues
17/09/2013
Você pode fazer o que o amigo acima indicou, mas não é seguro, pois o autoincremento não necessariamente vai ser o próximo número na sequência (algum registro pode ter sido excluído);
Você precisaria executar um select max(id) e exibir esse valor no campo.
Você precisaria executar um select max(id) e exibir esse valor no campo.
GOSTEI 0
Jair Souza
17/09/2013
Certo, e como se faz ? Podes dar um exemplo ?
Desde já agradeço.
Desde já agradeço.
GOSTEI 0
Jair Souza
17/09/2013
Seria assim ?
...ou tem algo errado ?
...ou tem algo errado ?
Select MAX( F.IDFuncionario )+ 1 From Funcionario F Where (F.IDFuncionario) = textboxIdFuncionario
GOSTEI 0
Joel Rodrigues
17/09/2013
Rapaz, você tem que saber executar instruções SQL usando ADO. Acho que no seu caso você vai usar OleDb.
Pesquise sobre como fazer isso.
Pesquise sobre como fazer isso.
GOSTEI 0
Jair Souza
17/09/2013
Olá, depois de algumas pesquisas e adaptações cheguei neste código, mas não funciona que dever estar errado ?
public static string pCodigo(string IDCodigo, string Funcionario) { //String de Conexão do Banco de Dados String Conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & " bDBiblioteca2DataSet.mdb"); //Faz uma Consulta no Banco, Para Ver o Próximo Código String query = ("SELECT MAX(" + IDCodigo + "+1") From + Funcionario, Conexao") //TextBox Código Recebe o Próximo Código string Resultado = Comando.ExecuteScalar().ToString(); //Caso o Resultado Seja Nulo Ou seja, é o Primeiro Código if (Resultado != "") { return Resultado; } else { return "1"; } }
GOSTEI 0
Joel Rodrigues
17/09/2013
Deve dar um erro na string de conexão, quando você usa o &. O correto seria concatenar as strings usando o sinal de adição (+).
GOSTEI 0
Jair Souza
17/09/2013
Fiz alguns ajustesm até sumir a maioria dos sublinhados em vermelho, mas ficou dois que não consegui...se puderes verificar todo código, pois não sei mais o que fazer....
abaixo a imagem do código.
Desde já agradeço pela paciência...
[url]http://uploaddeimagens.com.br/imagens/select_max_id-png[/url]
abaixo a imagem do código.
Desde já agradeço pela paciência...
[url]http://uploaddeimagens.com.br/imagens/select_max_id-png[/url]
GOSTEI 0
Joel Rodrigues
17/09/2013
O primeiro erro é a String que está escrita errada. As aspas devem envolver toda a String.
O segundo erro é a falta dos parênteses no método ExecuteScalar().
O segundo erro é a falta dos parênteses no método ExecuteScalar().
GOSTEI 0
Jair Souza
17/09/2013
Olá, não está fácil...parece estar tudo certo, mas o ExecuteScalar não tem jeito, se puder quebra mais essa.
[url]http://uploaddeimagens.com.br/imagens/executescalar-png[/url]
[url]http://uploaddeimagens.com.br/imagens/executescalar-png[/url]
GOSTEI 0
Joel Rodrigues
17/09/2013
Nossa, cara. ExecuteScalar é um método do SqlCommand e você está chamando a partir de uma String. Se você olhar a mensagem de erro, vai entender, pois lá deve dizer que o método não existe.
GOSTEI 0
Joel Rodrigues
17/09/2013
Repare que você não tem nenhum objeto de conexão com o banco, só tem strings. Logo, nunca vai selecionar nada. Falta ai, por exemplo, uma SqlConnection e um SqlCommand.
Infelizmente não estou no PC agora, mas amanhã eu faço um exemplo pra você, pois pelo jeito está difícil mesmo.
Infelizmente não estou no PC agora, mas amanhã eu faço um exemplo pra você, pois pelo jeito está difícil mesmo.
GOSTEI 0
Jair Souza
17/09/2013
Montei o metodo...mas está dando erro do nome do bd, veja a imagem :
[url]http://uploaddeimagens.com.br/imagens/max_id___1-png[/url]
[url]http://uploaddeimagens.com.br/imagens/max_id___1-png[/url]
GOSTEI 0
Joel Rodrigues
17/09/2013
A mensagem é bem clara: o arquivo não está sendo encontrado. Você colocou o MDB junto do EXE? Se não, coloque, afinal, foi isso que você disse que fez na connection string,
GOSTEI 0
Jair Souza
17/09/2013
...Mas isto é o que eu não entendo o mdb sempre esteve e está na pasta bin DEbug junto com o executável.
[url]http://uploaddeimagens.com.br/imagens/bd-png--4[/url]
[url]http://uploaddeimagens.com.br/imagens/bd-png--4[/url]
GOSTEI 0
Joel Rodrigues
17/09/2013
Ah, se você olhar a mensagem com cuidado verá que o nome da pasta Debug está colado no nome do arquivo. Ponha uma barra antes do nome do arquivo.
GOSTEI 0
Jair Souza
17/09/2013
Uma barra não resolveu..., teve de ser duas barras e finalmente funcionou, muito muito obrigado, ficou assim : "\\BDBiblioteca2.mdb"
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace SistemaBibliotecario
{
public partial class FrmFuncionario : Form
{
public FrmFuncionario()
{
InitializeComponent();
}
public static string iDFuncionario { get; set; }
public string Funcionario { get; set; }
public static string CodigoFunc(string iDFuncionario, string Funcionario)
{
//String de Conexão do Banco de Dados
OleDbConnection Conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb");
//Abre a Conexão
Conexao.Open();
//Faz uma Consulta no Banco, Para Ver o Próximo Código
OleDbCommand Comando = new OleDbCommand("SELECT MAX(IDFuncionario)+1 From Funcionario", Conexao);
//TextBox Código Recebe o Próximo Código
string Resultado = Comando.ExecuteScalar().ToString();
//Fecha a Conexão
Conexao.Close();
//Caso o Resultado Seja Nulo Ou seja, é o Primeiro Código
if (Resultado != "")
{
return Resultado;
}
else
{
return "1";
}
}
...E o código no botão assim :
private void BtnAdicionar_Click(object sender, EventArgs e)
{
iDFuncionarioTextBox.Text = CodigoFunc(iDFuncionario, Funcionario);
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace SistemaBibliotecario
{
public partial class FrmFuncionario : Form
{
public FrmFuncionario()
{
InitializeComponent();
}
public static string iDFuncionario { get; set; }
public string Funcionario { get; set; }
public static string CodigoFunc(string iDFuncionario, string Funcionario)
{
//String de Conexão do Banco de Dados
OleDbConnection Conexao = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\BDBiblioteca2.mdb");
//Abre a Conexão
Conexao.Open();
//Faz uma Consulta no Banco, Para Ver o Próximo Código
OleDbCommand Comando = new OleDbCommand("SELECT MAX(IDFuncionario)+1 From Funcionario", Conexao);
//TextBox Código Recebe o Próximo Código
string Resultado = Comando.ExecuteScalar().ToString();
//Fecha a Conexão
Conexao.Close();
//Caso o Resultado Seja Nulo Ou seja, é o Primeiro Código
if (Resultado != "")
{
return Resultado;
}
else
{
return "1";
}
}
...E o código no botão assim :
private void BtnAdicionar_Click(object sender, EventArgs e)
{
iDFuncionarioTextBox.Text = CodigoFunc(iDFuncionario, Funcionario);
}
GOSTEI 0
Joel Rodrigues
17/09/2013
Foram necessárias duas barras por que uma barra sozinha indica um caractere de escape (\n, \w, \T, etc). Quando você coloca duas barras, isso é interpretado como uma barra que deve ser inserida literalmente naquele ponto.
Enfim, que bom que deu certo.
Tópico concluído.
Enfim, que bom que deu certo.
Tópico concluído.
GOSTEI 0