Oi pessoal! Preciso de uma ajuda
Ao tentar executar o insert na tabela TabRecebimento retorna o erro no console: SQLServerException:
A instrução INSERT conflitou com a restrição do FOREIGN KEY “fk_PacID”. O conflito ocorreu no banco de dados “dbmanager”, tabela “dbo.TabPaciente”, column ‘tpaID’.
A Tabela TabRecebimento possui 2 FK: fk_PacID (vem da tabela TabPaciente) e fk_profID (vem da tabela TabProfissional)
Já verifiquei e as tabelas filhas possuem registros, então não estou conseguindo verificar o que está gerando o erro.
Na tela de recebimento é feito uma busca por paciente (onde carrega o ID em um campo) e uma busca por profissional (que carrega o ID em um campo), esses ids são utilizados na hora de criar um recebimento.
No banco de dados os campos que trazem a chave estrangeira permitem null porque cadastrei como ON DELETE SET NULL;
Conseguem me ajudar por favor?
COMANDO SQL INSERT - RECEBIMENTO DAO
public RecebimentoDAO(){ //metodo pra conexão
conn = new Conexao().getConexao(); //recebe a classe conexão e dentro dela tem o metodo get conexao, chama o método e faz por la
}
Recebimento recebimento = new Recebimento();
//metodo de inserção de dados
public void create(Recebimento TabRecebimento){
String sql = "INSERT INTO TabRecebimento (trNum,trValor,trData,"
+ "trMeio,trPresenca,trtpaID,trtprID)"
+ "VALUES (?,?,?,?,?,?,?)";
try{
prep = conn.prepareStatement(sql); //vou passar comando sql acima na conexão
prep.setInt(1,recebimento.getNumero_recebimento());//vai setar uma int, no primeiro parametro, utilizando o método
prep.setFloat(2,recebimento.getValor_recebimento());
prep.setString(3,recebimento.getData_recebimento());
prep.setString(4,recebimento.getMeio_recebimento());
prep.setInt(5,recebimento.getPresenca_recebimento());
prep.setInt(6,recebimento.getID_recpaciente());
prep.setInt(7,recebimento.getID_recprofissional());
prep.execute();
JOptionPane.showMessageDialog(null, "Cadastrado com sucesso!");
}catch (SQLException ex){
System.err.println("Erro - Cadastro de recebimento"+ex);
}}
VIEW - JBUTTON
public void Pesquisapaciente(){
String nome = rec_buscapac.getText();
Paciente paciente = pacDAO.readNome(nome);
if (paciente == null){
JOptionPane.showMessageDialog(null, "Paciente não encontrado! Verifique se o nome está completo");
}else{
rec_nomepac.setText(paciente.getNome_paciente());
rec_IDpac.setText(String.valueOf(paciente.getID_paciente())); //conversão int para String
}
}
private void btnrec_pesquisarpacActionPerformed(java.awt.event.ActionEvent evt) {
Pesquisapaciente();
}
MODEL RECEBIMENTO
public class Recebimento {
private int numero_recebimento;
private float valor_recebimento;
private String data_recebimento;
private String meio_recebimento;
private int presenca_recebimento;
private String pac_recebimento;
private String prof_recebimento;
private int ID_recpaciente;
private int ID_recprofissional;
private int ID_recebimento;
public int getNumero_recebimento(){
return numero_recebimento;
}
public void setNumero_recebimento(int numero_recebimento){
this.numero_recebimento = numero_recebimento;
}
public float getValor_recebimento(){
return valor_recebimento;
}
public void setValor_recebimento(float valor_recebimento){
this.valor_recebimento = valor_recebimento;
}
public String getData_recebimento(){
return data_recebimento;
}
public void setData_recebimento(String data_recebimento){
this.data_recebimento = data_recebimento;
}
public String getMeio_recebimento(){
return meio_recebimento;
}
public void setMeio_recebimento(String meio_recebimento){
this.meio_recebimento = meio_recebimento;
}
public int getPresenca_recebimento(){
return presenca_recebimento;
}
public void setPresenca_recebimento(int presenca_recebimento){
this.presenca_recebimento = presenca_recebimento;
}
public String getPac_recebimento(){
return pac_recebimento;
}
public void setPac_recebimento(String pac_recebimento){
this.pac_recebimento = pac_recebimento;
}
public String getProf_recebimento(){
return prof_recebimento;
}
public void setProf_recebimento(String prof_recebimento){
this.prof_recebimento = prof_recebimento;
}
public int getID_recpaciente() {
return ID_recpaciente;
}
public void setID_recpaciente(int ID_recpaciente) {
this.ID_recpaciente = ID_recpaciente;
}
public int getID_recprofissional() {
return ID_recprofissional;
}
public void setID_recprofissional(int ID_recprofissional) {
this.ID_recprofissional = ID_recprofissional;
}
public int getID_recebimento() {
return ID_recebimento;
}
public void setID_recebimento(int ID_recebimento) {
this.ID_recebimento = ID_recebimento;
}}
PAC DAO - Método ReadNome
public Paciente readNome(String nome){
String sql = "SELECT * FROM TabPaciente WHERE tpaNome = ?";//busca semelhanças no início e final dos registros
try{
prep = conn.prepareStatement(sql); //cria comando select após conectar banco
prep.setString(1,nome); //define qual o valor será enviado
result = prep.executeQuery();//armazena o retorno
if (result.next()){ //next: verifica se encontrou resultados
Paciente paciente = new Paciente();
paciente.setNome_paciente(result.getString("tpaNome"));//(nome da coluna do banco)
paciente.setNomeref_paciente(result.getString("tpaNomeRef"));
paciente.setNasc_paciente(result.getString("tpaNasc"));
paciente.setCel_paciente(result.getString("tpaCelular"));
paciente.setEmail_paciente(result.getString("tpaEmail"));
paciente.setContato_paciente(result.getString("tpaContEm"));
paciente.setCelcontato_paciente(result.getString("tpaCelularEm"));
paciente.setID_paciente(result.getInt("tpaID"));
int ativo = result.getInt("tpaAtivo");
if (ativo == 1){
paciente.setAtivo_paciente(true);
}else{
paciente.setAtivo_paciente(false);
}
return paciente;
}else{
return null;
}
}catch(SQLException ex){
throw new RuntimeException ("Erro - Listar paciente pela busca"+ex);
}finally {
conex.closeConexao(conn, prep, result);
} }