Violação de Foreign Key SQL[RESOLVIDO]

Gente quando eu tentei excluir uma linha da minha JTable o NetBeans estourou uma excessão onde diz que existe uma foreing key violada, por causa de um Update ou Delete.

Estou tentando deletar uma linha da tabela, mas não sei pq ta gerando essa excessão!

codigo do evento:

private void btnExcluirLinhaActionPerformed(java.awt.event.ActionEvent evt) {
        if(tabGruposAssuntos.getValueAt(tabGruposAssuntos.getSelectedRow(), tabGruposAssuntos.getSelectedColumn()) == null){
            return;
        }
        else if(tabGruposAssuntos.getRowCount() == 1){
            JOptionPane.showMessageDialog(null, "Não exclua todas linhas da tabela","Cuidado", JOptionPane.WARNING_MESSAGE);
        }
        else if(tabGruposAssuntos.getSelectedRow()!= -1){
            gt.excluiRegistro("DELETE FROM fn_grupo WHERE grupo = "+ tabGruposAssuntos.getValueAt(tabGruposAssuntos.getSelectedRow(), 0) + ";");
            modelo.removeRow(tabGruposAssuntos.getSelectedRow());
            tabGruposAssuntos.setModel(modelo);
            posicionaJ ++;
        }
        else{
            JOptionPane.showMessageDialog(null, "Uma linha da tabela deve estar selecionada", "Cuidado!", JOptionPane.WARNING_MESSAGE);
        }
    }

Erro:

org.postgresql.util.PSQLException: ERROR: update or delete on table "fn_grupo" violates foreign key constraint "fngrupoccusto_grupo_fkey" on table "fn_grupo_ccusto"
  Detalhe: Key (grupo)=(10000) is still referenced from table "fn_grupo_ccusto".
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1327)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
        at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:343)
        at BancoDeDados.InstanciaBanco.executaSql(InstanciaBanco.java:39)
        at BancoDeDados.GerenciaTabelas.excluiRegistro(GerenciaTabelas.java:52)
        at Interface.Financeiro.Tabelas.TabGruposAssuntos.btnExcluirLinhaActionPerformed(TabGruposAssuntos.java:134)
        at Interface.Financeiro.Tabelas.TabGruposAssuntos.access$100(TabGruposAssuntos.java:13)
        at Interface.Financeiro.Tabelas.TabGruposAssuntos$3.actionPerformed(TabGruposAssuntos.java:84)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Vlw galera! :smiley:

a chave do registro q vc esta tentando excluir faz referencia a uma outra tabela ! delete primeiro na tabela q ela faz referencia e depois delete na tabela q deseja.

Mas eu soh qro deletar a linha da tabela que esta em atividade qro q o registro da onde ela puxa a foreing key continue lá!

entao tu nao pode “chavear” a foreign key como foreign key nao outra tabela coloque como int ou string sei la qual o tipo da chave q esta, q ai ela vai ficar como historico se colocar como foreign key impossivel !

Gente na realidade eu to com problema acho que eh no meu JOIN

vou colar o SCRIPT:

SELECT fg.grupo, fg.descricao, fg.fluxo, fg.criterio, fg.considfluxo, fg.considcontab, fcg.descricao 
FROM fn_grupo as fg 
FULL JOIN fn_class_grupo as fcg 
ON fg.classificacao = fcg.codfnclassgrupo

tipo eu qro que ele retorne todas colunas da tabela fn_grupo menos, e a coluna descricao da tabela fn_class_grupo

mas se eu mando esse SELECT no gerador de consultas ele retorna todas as colunas da tabela fn_grupo preenchidas, mas na da descricao em branco! D:

Alguem sabe onde ta o erro?
vlw galera! :smiley:

Consegui gente, acho q era problema com os dados das tabelas! mas vlw de ql qr forma!

// se quizer pegar so os q tem associados é esse :

SELECT fg.grupo, fg.descricao, fg.fluxo, fg.criterio, fg.considfluxo, fg.considcontab, fcg.descricao   
FROM fn_grupo as fg   
JOIN fn_class_grupo as fcg   
ON fg.classificacao = fcg.codfnclassgrupo

//se quiser pegar todos os associados e q tb nao estao associados

SELECT fg.grupo, fg.descricao, fg.fluxo, fg.criterio, fg.considfluxo, fg.considcontab, fcg.descricao   
FROM fn_grupo as fg   
LEFT JOIN fn_class_grupo as fcg   
ON fg.classificacao = fcg.codfnclassgrupo