Duvidas ao fazer relacionamento Master-Detail

24/02/2010

1

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 !!!
Responder

Posts

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.

Responder