Array
(
)

Unique Index

Rodrigorpb
   - 16 mar 2006

Olá pessoal,

Porque quando eu vou criar uma FK ele dá esse erro:

#Código

alter table LANCAMENTOCONT
add constraint FK_LANCAMENTOCONT
foreign key (TIPODEDEBITO)
references TIPODEDEBITO(CODIGODACURIAD)

Estou criando assim:

#Código
alter table LANCAMENTOCONT
add constraint FK_LANCAMENTOCONT
foreign key (TIPODEDEBITO)
references TIPODEDEBITO(CODIGODACURIAD)


Estou tentando tb pelo IBExpert mas dá o mesmo erro.

Rodrigo


Paullsoftware
   - 16 mar 2006

a tabela já contém dados?

pode ser que ajá algum dado repetido!


Rodrigorpb
   - 16 mar 2006

DEU CERTO,
AMIGOS OUTRA COISA, COMOTRADUZ AS MENSAGENS DE INTEGRIDADE NO DELPHI PARA O USUÁRIO. TIPO QUANDO DELETA UMA COM INTEGRIDADE DA AQUELA MENSAGEM HORRÍVE.


RODRIGO


Paullsoftware
   - 16 mar 2006

eu uso tratamento de exceções, você pode procurar mais sobre o assunto no fórum:
#Código

procedure TfPRINCIPAL.CapturaErros(Sender: TObject; E: Exception);
var mensagem: string;
Pos1, Pos2: integer;
NomeDoLog: string;
Arquivo: TextFile;
begin
NomeDoLog := ChangeFileExt(Application.Exename, ´.log´);
AssignFile(Arquivo, NomeDoLog);
if FileExists(NomeDoLog) then
Append(arquivo)
else
ReWrite(arquivo);
try
WriteLn(arquivo, ´****************** ´+DateTimeToStr(Now)+ ´ ****************** ´);
Writeln(arquivo, ´Erro Ocorrido: ´);
Writeln(arquivo,E.Message);
Writeln(arquivo, ´Janela: ´+ Screen.ActiveForm.Name + ´ Controle Ativo: ´+Screen.ActiveControl.Name);
WriteLn(arquivo, ´----------------------------------------------------------------------´);
MessageDlg(´Ocorreu o seguinte erro:´+e.Message,mtError,[mbOK],0);//aqui você pode persolizar a mensagem de erro
finally
CloseFile(arquivo)
end;
If Pos(UpperCase(´is not a valid date´), UpperCase(E.Message)) <> 0 then
MessageDlg(´Data inválida, proceda a correção.´,mtError,[mbOK],0)
else
if Pos(UpperCase(´must have a value´), UpperCase(E.Message)) <> 0 then
begin
Pos1:=Pos(´´´´, E.Message);
mensagem:=E.Message;
Delete(mensagem, Pos1, 1);
Pos2:=Pos(´´´´, mensagem);
mensagem:=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
MessageDlg(´É obrigatório o preenchimento do campo ´+ mensagem +´.´,mtError,[mbOK],0);
end
else
If Pos(UpperCase(´key violation´), UpperCase(E.Message)) <> 0 then
MessageDlg(´Houve violação de chave. Registro já incluso.´,mtError,[mbOK],0)
else
If Pos(UpperCase(´Input value´), UpperCase(E.Message)) <> 0 then
MessageDlg(´Campo preenchido com valor não válido. Proceda a correção.´,mtError,[mbOK],0)
else
If Pos(UpperCase(´is not a valid time´), UpperCase(E.Message)) <> 0 then
MessageDlg(´Hora inválida, proceda a correção.´,mtError,[mbOK],0)
else
If Pos(UpperCase(´master has detail records´), UpperCase(E.Message)) <> 0 then
MessageDlg(´Proibida a Exclusão e Modificação deste Registro, pois ele faz referência a Outro(s) Registro(s)!´,mtError,[mbOK],0)
else
If Pos(UpperCase(´field value required´), UpperCase(E.Message)) <> 0 then
Begin
Pos1:=Pos(´:´,E.Message);
Delete(Mensagem,Pos1,1);
Mensagem:=copy(E.Message,Pos1+2,30);
MessageDlg(´É obrigatório o preenchimento do campo "´+mensagem+´".´,mtError,[mbOK],0)
End;
If Pos(UpperCase(´RECORD LOCKED BY ANOTHER USER.´), UpperCase(E.Message)) <> 0 then
MessageDlg(´O Registro está sendo Utilizado por Outro Usuário da Rede. Cancele a Operação e Aguarde a Liberação do Mesmo!´,mtError,[mbOK],0)
else
MessageDlg(´Ocorreu o seguinte Erro: ´+E.Message,mtError,[mbOK],0);

end;

para funcionar coloque o OnCreate do form principal!
#Código
Application.OnException := CapturaErros;


espero ter ajudado!