Posso estar enganado porque estou engatinhando no Delphi, mas eu não faria todas essas verificações. Eu usaria apenas o ApplyUpdates. Costumo criar um botão novo que dá o insert no banco, quando clico no botão salvar, aí começam algumas verificações como verificar se o código ou o nome já existem, se não existir, ele executa o post e depois o applyupdates. Infelizmente não tenho o Delphi aqui senão já te passava o código. Outra coisa: seu erro pode estar no bloco: "if IBDataSet1.RecordCount > 0 Then begin ShowMessage('Este nome já existe!!!!'); end " - Porque sempre vai dar mensagem quando tiver algum registro no banco.