Ao adicionar novo registro trazer o código definitivo e não -1, -2...

.NET

17/09/2013

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]
Jair Souza

Jair Souza

Curtidas 0

Melhor post

Joel Rodrigues

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.
GOSTEI 1

Mais Respostas

Fabiano Carvalho

Fabiano Carvalho

17/09/2013

tente colocar max(id) + 1 na consulta que gera esse ID;
GOSTEI 0
Jair Souza

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

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

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.
GOSTEI 0
Jair Souza

Jair Souza

17/09/2013

Certo, e como se faz ? Podes dar um exemplo ?

Desde já agradeço.
GOSTEI 0
Jair Souza

Jair Souza

17/09/2013

Seria assim ?
...ou tem algo errado ?
Select MAX( F.IDFuncionario )+ 1 
From Funcionario F
Where (F.IDFuncionario) = textboxIdFuncionario
GOSTEI 0
Joel Rodrigues

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.
GOSTEI 0
Jair Souza

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

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

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]
GOSTEI 0
Joel Rodrigues

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().
GOSTEI 0
Jair Souza

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]
GOSTEI 0
Joel Rodrigues

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

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.
GOSTEI 0
Jair Souza

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]
GOSTEI 0
Joel Rodrigues

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

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]
GOSTEI 0
Joel Rodrigues

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

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);
}

GOSTEI 0
Joel Rodrigues

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.
GOSTEI 0
POSTAR