Erro na realização do insert
Bom dia!
Estou com problemas para realizar o insert numa tabela chamada contas, entretanto eu tenho relacionamento com a tabela empresa.
Na tabela empresa eu tenho o seguintes campos:
Id_empresa Nome_Empresa Inscricao_Estadual.
255 AMG Ltda 08522255
Já na tabela de contas eu possuo o seguintes campos:
Id_contas Id_Empresa Valor Inscricao_Estadual Ano_Mes Ano_Mes_Conta ICMS TOTAL_RECOLHIDO
Porém para realizar o insert eu tenho que verificar se a inscrição estadual que estou inserido existe na tabela de empresa, se existir eu insiro, caso não existe retorna o erro de inserção. Eu não sei se existe a possibilidade de fazer no select as que não existir não inserir e no final mostrar essas inscrições estadual que não tenha vinculo com nenhuma empresa no banco de dados. Como poderia ser tratado o erro que estou recebendo e essa validação?
INSERT INTO Contas(
id_Conta,
id_empresa,
valor,
inscricao_estadual,
ano_mes,
ano_mes_Conta,
icms,
total_recolhido)
VALUES(
365545,
''''25.300,38'''',
''''08522255'''',
(SELECT emp.id_empresa FROM EMPRESA emp where emp.Inscricao_Estadual = ''''08522255''''),
''''199810'''',
''''199910'''',
''''38.011,71'''',
''''38.011,71'''');
Retorna o seguinte erro:
Relatório de erros -
ORA-01722: número inválido
Se alguém puder me ajudar, fico agradecido.
Estou com problemas para realizar o insert numa tabela chamada contas, entretanto eu tenho relacionamento com a tabela empresa.
Na tabela empresa eu tenho o seguintes campos:
Id_empresa Nome_Empresa Inscricao_Estadual.
255 AMG Ltda 08522255
Já na tabela de contas eu possuo o seguintes campos:
Id_contas Id_Empresa Valor Inscricao_Estadual Ano_Mes Ano_Mes_Conta ICMS TOTAL_RECOLHIDO
Porém para realizar o insert eu tenho que verificar se a inscrição estadual que estou inserido existe na tabela de empresa, se existir eu insiro, caso não existe retorna o erro de inserção. Eu não sei se existe a possibilidade de fazer no select as que não existir não inserir e no final mostrar essas inscrições estadual que não tenha vinculo com nenhuma empresa no banco de dados. Como poderia ser tratado o erro que estou recebendo e essa validação?
INSERT INTO Contas(
id_Conta,
id_empresa,
valor,
inscricao_estadual,
ano_mes,
ano_mes_Conta,
icms,
total_recolhido)
VALUES(
365545,
''''25.300,38'''',
''''08522255'''',
(SELECT emp.id_empresa FROM EMPRESA emp where emp.Inscricao_Estadual = ''''08522255''''),
''''199810'''',
''''199910'''',
''''38.011,71'''',
''''38.011,71'''');
Retorna o seguinte erro:
Relatório de erros -
ORA-01722: número inválido
Se alguém puder me ajudar, fico agradecido.
Robson
Curtidas 0
Respostas
Anderson Gonçalves
02/01/2020
Fala boy,
Seguinte...
Faz uma consulta antes de fazer o insert
With ADOQuery1 do
begin
close;
sql.clear;
sql.add('Select InscricaoEstadual from Tabela');
sql.add('where InscricaoEstadual = :Inscricao');
parameters.parambyname('inscricao').value := Edti1.text; // O componente que contém a informação a ser checada
open;
if ADOQuery1.Recordcount = 0 then // Checando se ele encontrou algum registro com esse numero (Se = 0 não encontrou);
begin
ShowMessage('Nenhum registro encontrado com esse número');
exit;
end
else
begin
// Aqui você coloca o comando insert em outra query claro... porque ele encontrou a inscrição estadual informada.
end;
end;
espero ter ajudado.
Seguinte...
Faz uma consulta antes de fazer o insert
With ADOQuery1 do
begin
close;
sql.clear;
sql.add('Select InscricaoEstadual from Tabela');
sql.add('where InscricaoEstadual = :Inscricao');
parameters.parambyname('inscricao').value := Edti1.text; // O componente que contém a informação a ser checada
open;
if ADOQuery1.Recordcount = 0 then // Checando se ele encontrou algum registro com esse numero (Se = 0 não encontrou);
begin
ShowMessage('Nenhum registro encontrado com esse número');
exit;
end
else
begin
// Aqui você coloca o comando insert em outra query claro... porque ele encontrou a inscrição estadual informada.
end;
end;
espero ter ajudado.
GOSTEI 0
Mauricio Espido
02/01/2020
Cheque os tipos de campos da tabela que você está tentando fazer o insert antes de executar. Geralmente pode ser limitação de caractere ou alguma letra onde deve ser somente número.
GOSTEI 0