Fórum triger #50016

23/03/2005

0

é o seguinte pessoal tenho uma tabela mestre detalhe so q o detalhe nao pode ter mais de 1 registro intao decidi fazer um triger q vai ser acionada quando adiciona um novo registro e essa triger vai fazer o seguinte:
vai localizar todos os registros onde cod (mestre) = coditem(detalhes) ce ele acha ele da uma mensagen e se nao achar deixa cadastrar normalmente !!! Como faço isso pelo amor de deus !!!


Guilherme

Guilherme

Responder

Posts

24/03/2005

Afarias

|tenho uma tabela mestre detalhe so q o detalhe nao pode ter mais de 1
|registro

eu não chamaria isso de ´mestre-detalhe´ :)

vc nào precisa fazer nada não, apenas coloque um índice único na tabela detalhe (na ´chave estrangeira´)


T+


Responder

Gostei + 0

28/03/2005

Guilherme

so q qando vai inserir um nov registro da um erro como faço para ´personalizar´ essa mensagen


Responder

Gostei + 0

28/03/2005

Gandalf.nho

Se só pode ter um registro no ´detalhe´, não seria mais simples passar os campos todos para a tabela principal? Daí não seria necessário se preocupar com essa validação.


Responder

Gostei + 0

28/03/2005

Guilherme

certo...
mais tem como resolver esse problema q ja criei ????


Responder

Gostei + 0

28/03/2005

Gandalf.nho

Faça como o afarias disse e crie o índice único, depois intercepte a mensagem de erro (usando o evento OnPostError, por exemplo), teste qual a mensagem de erro retornada e depois passe sua mensagem de erro personalizada pro usuário.


Responder

Gostei + 0

29/03/2005

Guilherme

como q eu faço porq eu vo la no evento e coloco a mensagen so q ai ele primeiro aparece a mensagen do erro do delphi pra depois a mensagen q personalizei


Responder

Gostei + 0

29/03/2005

Gandalf.nho

Como vc fez seu código?


Responder

Gostei + 0

29/03/2005

Guilherme

isso q quero saber como fazer o codigo !!!! o meu ta assim

showmessage(´ERRO !!!´)



Responder

Gostei + 0

29/03/2005

Gandalf.nho

Observe que nos eventos usados para interceptar mensagens de erro existe sempre um parâmetro que armazena a mensagem e o código do erro. No caso do evento OnPostError, o parâmetro é do tipo EDatabaseError. Geralmente se testa esse parâmetro para ver o código do erro e determinar qual é a mensagem de erro. Daí usa-se uma estrutura IF ou CASE para testar os valores esperados e fazer o tratamento do erro. Por exemplo, esse trecho de código pode ser usado com um componente BDE:

var
  iDBIError    : Integer;
begin
   IDBIError := (E as EDBEngineError).Errors[0].Errorcode; //Obtem o código do erro
  case iDBIError of
      eRequiredFieldMissing: //Algum campo requerido não preenchido.
       begin
           //Faça o tratamento do erro aqui
       end;
   end;
end;


A sintaxe exata depende muito dos componentes de acesso usados e do banco utilizado


Responder

Gostei + 0

30/03/2005

Afarias

se vc estiver depurando o sitema (RUN) a exceção sempre vai aparecer antes da ´mensagem tratada´


T+


Responder

Gostei + 0

30/03/2005

Guilherme

o codigo e nosso amigo gandalf.nho deixou sera os seguintes erros :


[Error] cli_fi.pas(1014): Undeclared identifier: ´EDBEngineError´
[Error] cli_fi.pas(1016): Undeclared identifier: ´eRequiredFieldMissing´



Responder

Gostei + 0

30/03/2005

Gandalf.nho

Só uma coisa, vc está usando qual tecnologia de acesso ao dados? Esse exemplo que passei é para usar com BDE.


Responder

Gostei + 0

30/03/2005

Afarias

|codigo e nosso amigo gandalf.nho

AMIG[color=red:11a41867eb][b:11a41867eb]A[/b:11a41867eb][/color:11a41867eb]


|deixou sera os seguintes erros

esse código trata de erros para quem usa BDE, adicione as units relativas ao BDE na uses da unidade.


T+


Responder

Gostei + 0

30/03/2005

Guilherme

mas eu usso o interbase !!!!!!


desculpe ai nen sabia q era mulher foi mal galera me desculpa !


Responder

Gostei + 0

30/03/2005

Gandalf.nho

mas eu usso o interbase !!!!!!


Tudo bem, mas vc usa o que para acessar os seus dados? BDE, IBX, DBExpress, ADO?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar