triger
é 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 !!!
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
Curtidas 0
Respostas
Afarias
23/03/2005
|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+
|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+
GOSTEI 0
Guilherme
23/03/2005
so q qando vai inserir um nov registro da um erro como faço para ´personalizar´ essa mensagen
GOSTEI 0
Gandalf.nho
23/03/2005
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.
GOSTEI 0
Guilherme
23/03/2005
certo...
mais tem como resolver esse problema q ja criei ????
mais tem como resolver esse problema q ja criei ????
GOSTEI 0
Gandalf.nho
23/03/2005
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.
GOSTEI 0
Guilherme
23/03/2005
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
GOSTEI 0
Gandalf.nho
23/03/2005
Como vc fez seu código?
GOSTEI 0
Guilherme
23/03/2005
isso q quero saber como fazer o codigo !!!! o meu ta assim
showmessage(´ERRO !!!´)
GOSTEI 0
Gandalf.nho
23/03/2005
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:
A sintaxe exata depende muito dos componentes de acesso usados e do banco utilizado
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
GOSTEI 0
Afarias
23/03/2005
se vc estiver depurando o sitema (RUN) a exceção sempre vai aparecer antes da ´mensagem tratada´
T+
T+
GOSTEI 0
Guilherme
23/03/2005
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´
GOSTEI 0
Gandalf.nho
23/03/2005
Só uma coisa, vc está usando qual tecnologia de acesso ao dados? Esse exemplo que passei é para usar com BDE.
GOSTEI 0
Afarias
23/03/2005
|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+
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+
GOSTEI 0
Guilherme
23/03/2005
mas eu usso o interbase !!!!!!
desculpe ai nen sabia q era mulher foi mal galera me desculpa !
desculpe ai nen sabia q era mulher foi mal galera me desculpa !
GOSTEI 0
Gandalf.nho
23/03/2005
mas eu usso o interbase !!!!!!
Tudo bem, mas vc usa o que para acessar os seus dados? BDE, IBX, DBExpress, ADO?
GOSTEI 0
Guilherme
23/03/2005
IBX
GOSTEI 0
Gandalf.nho
23/03/2005
Nesse caso, substitua (E as EDBEngineError).Errors[0].Errorcode por (E as EIBError).IBErrorCode. Não esqueça de declarar IB na cláusula uses. Daí você vai ter que testar o código retornado para ver o valor e fazer o tratamento adequado.
GOSTEI 0
Guilherme
23/03/2005
alterei la o codigo como nossA amigA disse so q ainda estando esse erro aki ô
[Error] cli_fi.pas(1016): Undeclared identifier: ´eRequiredFieldMissing´
GOSTEI 0
Afarias
23/03/2005
´eRequiredFieldMissing´ não é uma constante de código de erro no IBX
Dê uma olhada na unit IB.pas para ver as constantes válidas. Note q IBErrorCode é um INTEGER, vc pode ver os valores de erro tb nos manuais do Interbase 6.0
T+
Dê uma olhada na unit IB.pas para ver as constantes válidas. Note q IBErrorCode é um INTEGER, vc pode ver os valores de erro tb nos manuais do Interbase 6.0
T+
GOSTEI 0
Guilherme
23/03/2005
nao achei nada relativo
GOSTEI 0
Gandalf.nho
23/03/2005
nao achei nada relativo
Como assim?
GOSTEI 0
Guilherme
23/03/2005
o cara pediu pra min procura numa unit so q nao achei nada !!!! vc sabe o q subistitui o codigo q esta dando erro no post q esta acima ???
GOSTEI 0
Gandalf.nho
23/03/2005
Primeiro vc tem que verificar exatamente qual é a mensagem de erro que está dando para poder olhar a documentação de erros e ver qual o código de erro correspondente. Se vc olhar na documentação do Interbase vc verá que cada mensagem de erro do banco equivale a um código, tipo [i:6be2123215]isc_not_valid[/i:6be2123215] representa o erro de valor inválido ou inexistente
GOSTEI 0
Guilherme
23/03/2005
eu fiz como vc disse la pra subistitui ops termos so q estando esse erro
[Error] cli_fi.pas(1016): Undeclared identifier: ´eRequiredFieldMissing´
GOSTEI 0
Gandalf.nho
23/03/2005
Como o afarias disse lá em cima eRequiredFieldMissing é usado pelo BDE. Para o IBX vc tem que ver qual é a constante correspondente a mensagem de erro retornada ao tentar postar mais de um registro.
GOSTEI 0