Na situação em que estou, utilizando SqlServer 2016, preciso fazer a separação das tabelas em outra base de dados. Mas Terei que alterar todas as procedures, views, triggers e tabelas e fazer com que elas acessem a base original. Talvez seja simples, mas não tenho nem ideia de qual comando executar.
Eu tenho duas tabelas. Uma delas é a tabela Propriedade e a outra é a tabela Talhão. O Talhão precisa ser identificado pelo ID da propriedade, portanto, temos uma chave estrangeira.
O problema é que, mesmo com o código aparentemente todo correto, eu não consigo inserir nada na tabela Talhão por causa da chave estrangeira. O erro que aparece:
Erro: INSERT INTO talhao (`nome`, `id_propriedade`) VALUES ('A1', '')
Cannot add or update a child row: a foreign key constraint fails (`teste`.`talhao`, CONSTRAINT `id_propriedade_fk` FOREIGN KEY (`id_propriedade`) REFERENCES `propriedade` (`id_propriedade`) ON DELETE NO ACTION ON UPDATE NO ACTION)
Na verdade, o erro de inserção só ocorre porque aparentemente o mysqli_insert_id não está retornando nada. Quando eu insiro o número da chave estrangeira manualmente, a inserção roda sem erros. A pergunta é: existe alguma outra maneira de recuperar esse id da propriedade para inserir na chave estrangeira de talhão? Já não sei mais o que tentar.
Inserindo dados na tabela propriedade (consigo normalmente, sem erros):
class PropriedadeDAO {
function inserirPropriedadeBD($propriedade) {
$nome = $propriedade->getNome();
$endereco = $propriedade->getEndereco();
$telefone = $propriedade->getTelefone();
$conexaobd = new ConexaoBD;
$conexao = $conexaobd->conectarAoBD();
$sql = "INSERT INTO propriedade (nome, endereco, telefone) VALUES ('$nome', '$endereco', '$telefone')";
if (!mysqli_query($conexao, $sql)) {
echo "Erro: " . $sql . "<br>" . mysqli_error($conexao);
}else {
$propriedade->setID(mysqli_insert_id($conexao)); // Alteração
}
}
Inserindo dados na tabela talhao:
class TalhaoDAO {
function inserirTalhaoBD($talhao) {
$nome = $talhao->getNome();
$idPropriedade = $talhao->getPropriedade(); //Alteração
$conexaobd = new ConexaoBD;
$conexao = $conexaobd->conectarAoBD();
$sql = "INSERT INTO talhao (`nome`, `id_propriedade`) VALUES ('$nome', '$idPropriedade')";
if (!mysqli_query($conexao, $sql)) {
echo "Erro: " . $sql . "<br>" . mysqli_error($conexao);
}
}
A estrutura da tabela talhao está assim:
CREATE TABLE IF NOT EXISTS `talhao` (
`id_parcela` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(20) NOT NULL,
`id_propriedade` int(11) NOT NULL,
PRIMARY KEY (`id_parcela`),
KEY `id_propriedade_fk` (`id_propriedade`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
Na situação em que estou, utilizando SqlServer 2016, preciso fazer a separação das tabelas em outra base de dados. Mas Terei que alterar todas as procedures, views, triggers e tabelas e fazer com que elas acessem a base original. Talvez seja simples, mas não tenho nem ideia de qual comando executar.
Compartilhar este post
Link para o post
Compartilhar em outros sites