Duvidas ao fazer relacionamento Master-Detail
24/02/2010
0
Bom dia !!
Sou iniciante na programação e estou trabalhando em um projeto que tive que substituir todos os DBEdit para Edit para manter o padrao de projeto, pois bem, preciso de fazer uma conexão master detail das tabelas abaixo : /******************************************************************************/
/**** Tabela Perfil ****/
/******************************************************************************/
CREATE TABLE PERFIL (
PERFIL_CODIGO BIGINT NOT NULL,
NOME VARCHAR(20),
DESCRICAO VARCHAR(75)
); ALTER TABLE PERFIL ADD CONSTRAINT PK_PERFIL PRIMARY KEY (PERFIL_CODIGO); CREATE GENERATOR GEN_PERFIL_ID; CREATE TRIGGER PERFIL_BI FOR PERFIL
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.PERFIL_CODIGO IS NULL) THEN
NEW.PERFIL_CODIGO = GEN_ID(GEN_PERFIL_ID,1);
END /******************************************************************************/
/**** Tabela Perfil_Conf ****/
/******************************************************************************/ CREATE TABLE PERFIL_CONF (
PERFIL_CODIGO BIGINT NOT NULL,
TABELA VARCHAR(20),
INCLUIR PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
ALTERAR PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
EXCLUIR PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
RELATORIO PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
CODTABELA SMALLINT
); ALTER TABLE PERFIL_CONF ADD CONSTRAINT FK_PERFIL_CONF_PERFIL FOREIGN KEY (PERFIL_CODIGO) REFERENCES PERFIL (PERFIL_CODIGO);
Coloquei:
.Dois SQLDataSet (dst_Mestre e dst_Detalhe)
.Um DataSetProvider (dsp_Mestre)
.Dois ClientDataSet (cds_Mestre e cds_Detalhe)
.Três DataSource (dts_LinkMestre, dts_Mestre e dts_Detalhe) Eu fiz o procedimento igual a que está sendo explicado na pagina www.firebase.com.br (Passo à passo para fazer um Master-Detail com DBExpress e Firebird)
e nao consigo executar o seguinte procedimento.
procedure TFormCamposPerfil.SpeedButton4Click(Sender: TObject);
begin
inherited;
with dcad.CDSPerfil do
begin
Close;
Commandtext := '';
Commandtext := 'insert into perfil(perfil_codigo,nome,descricao)values(:PERFIL_CODIGO,:nome,:descricao)';
Params.ParamByName('PERFIL_CODIGO').AsInteger :=CODIGO;
Params.ParamByName('NOME').AsString := NOME;
Params.ParamByName('DESCRICAO').AsString := DESCRICAO;
Open;
end; with dcad.CDSPerfilConf do
begin
Close;
Commandtext := 'insert into perfil_conf(perfil_codigo,tabela,incluir,alterar,excluir,relatorio,codtabela)'+
'values(:perfil_codigo,:tabela,:incluir,:alterar,:excluir,:relatorio,:codtabela)';
Params.ParamByName('PERFIL_CODIGO').AsInteger :=CODIGO;
Params.ParamByName('tabela').AsString := 'TABELA';
Params.ParamByName('incluir').AsString := 'INCLUIR';
Params.ParamByName('Alterar').AsString := 'ALTERAR';
Params.ParamByName('Excluir').AsString := 'EXCLUIR';
Params.ParamByName('Relatorio').AsString := 'RELATORIO';
Params.ParamByName('CodTabela').AsInteger := CODTABELA;
open;
end;
ESTÁ APARECENDO A MENSAGEM: ---------------------------
Debugger Exception Notification
---------------------------
Project SSC.exe raised exception class EDatabaseError with message 'QRPerfil: Cursor not returned from Query'.
--------------------------- QUEM PUDER ME RESPONDER DESDE JÁ AGRADEÇO !!!
Sou iniciante na programação e estou trabalhando em um projeto que tive que substituir todos os DBEdit para Edit para manter o padrao de projeto, pois bem, preciso de fazer uma conexão master detail das tabelas abaixo : /******************************************************************************/
/**** Tabela Perfil ****/
/******************************************************************************/
CREATE TABLE PERFIL (
PERFIL_CODIGO BIGINT NOT NULL,
NOME VARCHAR(20),
DESCRICAO VARCHAR(75)
); ALTER TABLE PERFIL ADD CONSTRAINT PK_PERFIL PRIMARY KEY (PERFIL_CODIGO); CREATE GENERATOR GEN_PERFIL_ID; CREATE TRIGGER PERFIL_BI FOR PERFIL
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.PERFIL_CODIGO IS NULL) THEN
NEW.PERFIL_CODIGO = GEN_ID(GEN_PERFIL_ID,1);
END /******************************************************************************/
/**** Tabela Perfil_Conf ****/
/******************************************************************************/ CREATE TABLE PERFIL_CONF (
PERFIL_CODIGO BIGINT NOT NULL,
TABELA VARCHAR(20),
INCLUIR PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
ALTERAR PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
EXCLUIR PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
RELATORIO PERMISSAO COLLATE PT_BR /* PERMISSAO = CHAR(1) CHECK (VALUE IN ('S','N')) */,
CODTABELA SMALLINT
); ALTER TABLE PERFIL_CONF ADD CONSTRAINT FK_PERFIL_CONF_PERFIL FOREIGN KEY (PERFIL_CODIGO) REFERENCES PERFIL (PERFIL_CODIGO);
Coloquei:
.Dois SQLDataSet (dst_Mestre e dst_Detalhe)
.Um DataSetProvider (dsp_Mestre)
.Dois ClientDataSet (cds_Mestre e cds_Detalhe)
.Três DataSource (dts_LinkMestre, dts_Mestre e dts_Detalhe) Eu fiz o procedimento igual a que está sendo explicado na pagina www.firebase.com.br (Passo à passo para fazer um Master-Detail com DBExpress e Firebird)
e nao consigo executar o seguinte procedimento.
procedure TFormCamposPerfil.SpeedButton4Click(Sender: TObject);
begin
inherited;
with dcad.CDSPerfil do
begin
Close;
Commandtext := '';
Commandtext := 'insert into perfil(perfil_codigo,nome,descricao)values(:PERFIL_CODIGO,:nome,:descricao)';
Params.ParamByName('PERFIL_CODIGO').AsInteger :=CODIGO;
Params.ParamByName('NOME').AsString := NOME;
Params.ParamByName('DESCRICAO').AsString := DESCRICAO;
Open;
end; with dcad.CDSPerfilConf do
begin
Close;
Commandtext := 'insert into perfil_conf(perfil_codigo,tabela,incluir,alterar,excluir,relatorio,codtabela)'+
'values(:perfil_codigo,:tabela,:incluir,:alterar,:excluir,:relatorio,:codtabela)';
Params.ParamByName('PERFIL_CODIGO').AsInteger :=CODIGO;
Params.ParamByName('tabela').AsString := 'TABELA';
Params.ParamByName('incluir').AsString := 'INCLUIR';
Params.ParamByName('Alterar').AsString := 'ALTERAR';
Params.ParamByName('Excluir').AsString := 'EXCLUIR';
Params.ParamByName('Relatorio').AsString := 'RELATORIO';
Params.ParamByName('CodTabela').AsInteger := CODTABELA;
open;
end;
ESTÁ APARECENDO A MENSAGEM: ---------------------------
Debugger Exception Notification
---------------------------
Project SSC.exe raised exception class EDatabaseError with message 'QRPerfil: Cursor not returned from Query'.
--------------------------- QUEM PUDER ME RESPONDER DESDE JÁ AGRADEÇO !!!
Christian Tito
Curtir tópico
+ 0
Responder
Posts
24/02/2010
Emerson Nascimento
quando se usa comandos DML (insert, update, delete) não deve-se abrir o dataset, pois não há retorno de dados.
use Execute ou ExecSQL ao invés de Open.
use Execute ou ExecSQL ao invés de Open.
Responder
Clique aqui para fazer login e interagir na Comunidade :)