PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Insert com Foreign Key #275260

02/04/2005

0

Pessoal Boa noite, Novamente preciso da Ajuda de vocês

Tenho duas Tabelas, que por sinal foi atraves de uma outra pergunta de Ontem que cheguei a este resultado,

[b:6c7e623372]Tabela Master[/b:6c7e623372]

[color=blue:6c7e623372]CREATE TABLE ´PERFIL´
(
´LI_IDPERFIL´INTEGER NOT NULL,
´STR_NOMEPERFIL´VARCHAR(40) NOT NULL,
´STR_SISTEMA´VARCHAR(4),
PRIMARY KEY (´LI_IDPERFIL´)
);
SET TERM ^ ;


/* Triggers only will work for SQL triggers */

CREATE TRIGGER ´SET_LI_IDPERFIL´ FOR ´PERFIL´
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.LI_IDPERFIL is null) then
new.LI_IDPERFIL = gen_id( LI_IDPERFIL, 1 );
END
^

COMMIT WORK ^
SET TERM ;^[/color:6c7e623372]

[b:6c7e623372]Tabela Detalhe[/b:6c7e623372]
[color=red:6c7e623372]CREATE TABLE ´ITEMPERFIL´
(
´LI_IDITEMPERFIL´INTEGER NOT NULL,
´LI_IDPERFIL´INTEGER NOT NULL,
´LI_IDMENU´INTEGER,
´LI_INCLUI´INTEGER,
´LI_EXCLUI´INTEGER,
´LI_ALTERA´INTEGER,
´LI_CONSULTA´INTEGER,
´LI_DESIGNER´INTEGER,
´LI_IMPRIMIR´INTEGER,
PRIMARY KEY (´LI_IDITEMPERFIL´)
);
ALTER TABLE ´ITEMPERFIL´ ADD CONSTRAINT ´FK_LI_IDPERFIL´ FOREIGN KEY (´LI_IDPERFIL´) REFERENCES ´PERFIL´ (´LI_IDPERFIL´) ON DELETE CASCADE;
SET TERM ^ ;


/* Triggers only will work for SQL triggers */

CREATE TRIGGER ´SET_LI_IDITEMPERFIL´ FOR ´ITEMPERFIL´
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.LI_IDITEMPERFIL is null) then
new.LI_IDITEMPERFIL = gen_id( LI_IDITEMPERFIL, 1 );
END
^

COMMIT WORK ^
SET TERM ;^[/color:6c7e623372]

Estou gerando o Campo LI_IDPerfil no evento on NewRecord da Tabela Master, Acontece que quando eu seleciono o botão Novo eu já dou um Insert na tabela Master e Faço uma carga de dados pré-existente na tabela itemPerfil, como o Código Li_IDPerfil não esta Fisicamente na tabela Perfil a aplicação me retorna erro de ForeiGN Key, segue abaixo o código que estou usando

procedure TFormPerfil.btnNovoClick(Sender: TObject);
begin

if not DTSPrincipal.DataSet.Active then //verifica se esta fechado
DTSPrincipal.DataSet.Open;
DTSPrincipal.DataSet.Append;

If Not DTSItemPerfil.Dataset.Active Then
DTSItemPerfil.Dataset.Active := True;
Panel5.Enabled := True;

DTMPrincipal.cdsMenu.Close;
DTMPrincipal.cdsMenu.Open;

DTMPrincipal.cdsMenu.Last;
DTMPrincipal.cdsMenu.First;

While not DTMPrincipal.cdsMenu.Eof do Begin
DTMPrincipal.cdsItemPerfil.Append;
[color=green:6c7e623372]DTMPrincipal.cdsItemPerfil.FieldByName(´Li_IDPerfil´).AsInteger := DTMPrincipal.cdsPerfil.FieldByName(´Li_IDPerfil´).AsInteger;[/color:6c7e623372]
DTMPrincipal.cdsItemPerfil.FieldByName(´Li_IDMenu´).AsInteger := DTMPrincipal.cdsmenu.FieldByName(´Li_IDMenu´).AsInteger;
DTMPrincipal.cdsMenu.Next;
End;

O erro ocorre na Linha de Cor verde.

Qual seria a Solução para este problema.


Ariovaldo

Ariovaldo

Responder

Posts

04/04/2005

Ariovaldo

Pessoal alguém teria uma sugestão? só para completar estou usando o Firebird 1.3 e os componentes de acesso é Client data set


Responder

Gostei + 0

04/04/2005

Ariovaldo

Ai Pessoal alguém teria uma Solução, utilizo Firebird com componentes de Acesso IBX


Responder

Gostei + 0

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

Aceitar