Campo Autoincremento[RESOLVIDO]

Boa noite galera,

Estou desenvolvendo uma aplicação no netbeans + MySql e estou com o seguinte problema ao criar o módulo de vendas.
Tenho duas tabelas no banco de dados:

* VENDA
vendid autoincremento
venddata data
vendvalor double

* VENDAITEM
itemid autoincremento
vendid chave estrangeira
.
.

O problema é o seguinte. Quando clico no botão NOVA VENDA o campo ID (vendid) fica em branco. Como poderei inserir os registros na tabela VENDAITEM se ainda não sei qual será o valor de vendid. Alguém sabe alguma maneira para quando eu clicar no botão NOVA VENDA já trazer o próximo valor do campo autoincremento do banco de dados e jogar na tela.

Desde já muito obrigado pela ajuda,
Abraço

Não entendi muito bem sua pergunta…

você quer que quando clique na nova venda ele jogue na telinha qual vai ser o código da venda?

flw

abrass

o MySQL que vai incrementar o seu campo , então depois q vc salvar e encerrar a transação com a base vai ter que fazer um select para trazer o campo inserido!

uma facilidade do MySQL eh o auto incremento… vc grava o nome e endereço por exemplo e ele gera o ID para aquela linha

tem muito banco que não é assim… em alguns vc tem que criar um gatilho no seu banco pra auto incrementar pra vc toda vez que inserir dados… ou fazer um select no banco pelo seu sistema e buscar o ultimo ID inserido pra saber qual o proximo a inserir…

Então galera, mas o problema é o seguinte… tenho a seguinte tela:

Daí como na imagem… quando eu clico no botão NOVA VENDA… o campo ID fica sem valor, só é preenchido quando eu finalizo a venda. Aí está o problema… porque os itens da venda precisam saber qual é o valor do ID. Se eu não souber o valor do ID não vou conseguir dar um insert na tabela dos itens. Por isso preciso trazer o valor do próximo ID quando eu clicar no botão NOVA VENDA.

Abraço a todos e muito obrigado pela ajuda.

posta o código do botão pra mim analisar

abrass

:wink:

[quote=AlissonSchneider]Não entendi muito bem sua pergunta…

você quer que quando clique na nova venda ele jogue na telinha qual vai ser o código da venda?

flw

abrass[/quote]

É isso mesmo Alisson… dá uma olhada na imagem que eu postei, que acho que fica mais fácil de entender.
Falou, abraço

Posta o código do botão nova venda

flw

abrass

[quote=AlissonSchneider]Posta o código do botão nova venda

flw

abrass[/quote]

        aluidField.requestFocus();
        botaoNovaVenda.setEnabled(false);
        botaoPrimeiro.setEnabled(false);
        botaoProximo.setEnabled(false);
        botaoAnterior.setEnabled(false);
        botaoUltimo.setEnabled(false);
        botaoFinalizarVenda.setEnabled(true);
        botaoCancelar.setEnabled(true);

        //colocar a data do dia no campo vendadtFieldField
        Date data = new Date();
        String dia = "" + data.getDate();
        String mes = "" + String.valueOf(data.getMonth() + 1);
        String ano = "" + (1900 + data.getYear());
        if (Integer.parseInt(mes) <= 9) {
            mes = "0" + mes;
        }
        vendadtField.setText(ano + "-" + mes + "-" + dia);

        habilitarCampos();
        limparCampos();

Tenho uma classe conexão

import java.sql.*;
import javax.swing.*;

public class conexao {

    final private String driver = "com.mysql.jdbc.Driver";
    final private String url = "jdbc:mysql://localhost:3306/sisgym";
    final private String usuario = "root";
    final private String senha = "";
    private Connection conexao;
    public Statement statement;
    public ResultSet resultset;

    public boolean conecta() {
        boolean result = true;
        try {
            Class.forName(driver);
            conexao = DriverManager.getConnection(url, usuario, senha);
            //JOptionPane.showMessageDialog(null, "conectou!");

        } catch (ClassNotFoundException Driver) {
            JOptionPane.showMessageDialog(null, "Driver não localizado: " + Driver);
            result = false;
        } catch (SQLException Fonte) {
            JOptionPane.showMessageDialog(null, "Erro na conexão com o banco de dados: " + Fonte);
        }
        return result;
    }

    public void desconecta() {
        boolean result = true;
        try {
            conexao.close();
            JOptionPane.showMessageDialog(null, "conexão finalizada com sucesso");
        } catch (SQLException fecha) {
            JOptionPane.showMessageDialog(null, "Não foi possível fechar o banco de dados: "+fecha);
            result = false;
        }
    }

    public void executaSQL (String sql){
        try {
            statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
        } catch (SQLException sqlex) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar o comando sql, "+sqlex+", o sql passado foi "+sql);
        }
    }
}

Daí, na minha tela de venda, faço o seguinte.

import java.awt.event.KeyEvent;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import utilitarios.conexao;
import utilitarios.FormataTextString;
import utilitarios.FixedLengthDocument;

public class VendaProdutoView extends javax.swing.JFrame {

    conexao conectaAluno, conectaProduto, conectaVenda, conectaVendaItem;
    int navega = 0;
    boolean primeiraVezAluno = true, primeiraVezProduto = true;
    int qtdestoquetinha = 0;

    public VendaProdutoView() {
        initComponents();

        conectaAluno = new conexao();
        conectaAluno.conecta();
        conectaAluno.executaSQL("select * from aluno order by alunome");

        conectaProduto = new conexao();
        conectaProduto.conecta();
        conectaProduto.executaSQL("select * from produto where prodsituacao = 'S' order by proddescricao");

        conectaVenda = new conexao();
        conectaVenda.conecta();
        conectaVenda.executaSQL("select * from venda");

        conectaVendaItem = new conexao();
        conectaVendaItem.conecta();
        conectaVendaItem.executaSQL("select * from vendaitem");

        try {
            while (conectaAluno.resultset.next()) {
                alunomeField.addItem(conectaAluno.resultset.getString("ALUNOME"));
            }
            while (conectaProduto.resultset.next()) {
                proddescricaoField.addItem(conectaProduto.resultset.getString("PRODDESCRICAO"));
            }

            conectaVenda.resultset.first();
            conectaVendaItem.resultset.first();
            mostraDados();

        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Não há dados cadastrados!", "Sem dados", JOptionPane.INFORMATION_MESSAGE);
        }
        preencher_jtableItemProdu();
    }

Isso que eu vou te falar é uma gambiarra :oops:

seguinte como o teu campo é um auto incremento ou seja

o primeiro é 1, depois 2, 3, 4 e por ai vai cada registro novo que você insere, no caso se você puxar do banco de dados você vai puxar o ultimo e não esse que você quer imagine que vc tem 4 ou seja o ultimo vai ser 4 se você fazer um select você vai ter 4 e não o 5 que seria o próximo campo aquele que você quer ná tela.

então cria uma variável normal do tipo int crescente e ve qual é o seu último registro ou seja se for 4 o próximo logicamente será 5 né
então faz uma variável que receba 4 e seja do tipo cont que vai crescendo ou seja 4, 5, 6 cada vez que você clique no botão nova venda.

O unico problema que vai acontecer de fazer isso é que você pode excluir um campo e mudar a ordem deles mas dai você altera a variável tb

DEU PRA ENTENDER? :shock:

espero ter ajudado

abrass

:wink:

[quote=AlissonSchneider]Isso que eu vou te falar é uma gambiarra :oops:

seguinte como o teu campo é um auto incremento ou seja

o primeiro é 1, depois 2, 3, 4 e por ai vai cada registro novo que você insere, no caso se você puxar do banco de dados você vai puxar o ultimo e não esse que você quer imagine que vc tem 4 ou seja o ultimo vai ser 4 se você fazer um select você vai ter 4 e não o 5 que seria o próximo campo aquele que você quer ná tela.

então cria uma variável normal do tipo int crescente e ve qual é o seu último registro ou seja se for 4 o próximo logicamente será 5 né
então faz uma variável que receba 4 e seja do tipo cont que vai crescendo ou seja 4, 5, 6 cada vez que você clique no botão nova venda.

O unico problema que vai acontecer de fazer isso é que você pode excluir um campo e mudar a ordem deles mas dai você altera a variável tb

DEU PRA ENTENDER? :shock:

espero ter ajudado

abrass

;)[/quote]

Poxa entendi sim. Vou tentar implementar. Eu estava pensando numa coisa parecida. Fazer um select MAX no campo do id e acrescentar mais um.
Obrigado mais uma vez pela ajuda.
Um grande abraço.

[quote=AlissonSchneider]Isso que eu vou te falar é uma gambiarra :oops:

seguinte como o teu campo é um auto incremento ou seja

o primeiro é 1, depois 2, 3, 4 e por ai vai cada registro novo que você insere, no caso se você puxar do banco de dados você vai puxar o ultimo e não esse que você quer imagine que vc tem 4 ou seja o ultimo vai ser 4 se você fazer um select você vai ter 4 e não o 5 que seria o próximo campo aquele que você quer ná tela.

então cria uma variável normal do tipo int crescente e ve qual é o seu último registro ou seja se for 4 o próximo logicamente será 5 né
então faz uma variável que receba 4 e seja do tipo cont que vai crescendo ou seja 4, 5, 6 cada vez que você clique no botão nova venda.

O unico problema que vai acontecer de fazer isso é que você pode excluir um campo e mudar a ordem deles mas dai você altera a variável tb

DEU PRA ENTENDER? :shock:

espero ter ajudado

abrass

;)[/quote]

Boa noite Alisson, beleza?
Bolei o seguinte código… que está erro… o que será que estou fazendo errado:

try {
                String sql = "select MAX(VENDID) from venda";
                conectaVendaID.executaSQL(sql);
                conectaVendaID.resultset.first();
                vendidField.setText(conectaVendaID.resultset.getString("VENDID"));
            } catch (SQLException erro) {
                JOptionPane.showMessageDialog(null, erro, "Busca", JOptionPane.INFORMATION_MESSAGE);
            }

é apresentado o erro: “java.sql.SQLException: Column ‘VENDID’ not found”.

Obrigado mais uma vez pela sua ajuda.
abraço

[quote=Jalison][quote=AlissonSchneider]Isso que eu vou te falar é uma gambiarra :oops:

seguinte como o teu campo é um auto incremento ou seja

o primeiro é 1, depois 2, 3, 4 e por ai vai cada registro novo que você insere, no caso se você puxar do banco de dados você vai puxar o ultimo e não esse que você quer imagine que vc tem 4 ou seja o ultimo vai ser 4 se você fazer um select você vai ter 4 e não o 5 que seria o próximo campo aquele que você quer ná tela.

então cria uma variável normal do tipo int crescente e ve qual é o seu último registro ou seja se for 4 o próximo logicamente será 5 né
então faz uma variável que receba 4 e seja do tipo cont que vai crescendo ou seja 4, 5, 6 cada vez que você clique no botão nova venda.

O unico problema que vai acontecer de fazer isso é que você pode excluir um campo e mudar a ordem deles mas dai você altera a variável tb

DEU PRA ENTENDER? :shock:

espero ter ajudado

abrass

;)[/quote]

Boa noite Alisson, beleza?
Bolei o seguinte código… que está erro… o que será que estou fazendo errado:

try {
                String sql = "select MAX(VENDID) from venda";
                conectaVendaID.executaSQL(sql);
                conectaVendaID.resultset.first();
                vendidField.setText(conectaVendaID.resultset.getString("VENDID"));
            } catch (SQLException erro) {
                JOptionPane.showMessageDialog(null, erro, "Busca", JOptionPane.INFORMATION_MESSAGE);
            }

é apresentado o erro: “java.sql.SQLException: Column ‘VENDID’ not found”.

Obrigado mais uma vez pela sua ajuda.
abraço[/quote]

consegui cara… estava faltando definir um alias para a coluna

                String sql = "select MAX((VENDID)+1) as VENDID from venda";