Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

HELENO de Sant'Anna

Campo calculado no FIREBIRD

Recommended Posts

Olá a todos,

É o seguinte, tenho duas tabelas: FUNCIONARIOS e ESCOLAS, pretendo criar um campo calculado na tabela ESCOLAS que retorne um funcionário da tabela FUNCIONARIOS que tenha o cargo de DIRETOR. Você pode estar se perguntando, porque não criar o campo DIRETOR diretamente (campo físico) na tabela ESCOLAS? Bem, é que o campo NOME_DA_ESCOLA da tabela ESCOLAS é chave estrangeira na tabela FUNCIONARIOS, ou seja, quando se faz o cadastro do funcionário na tabela FUNCIONÁRIOS escolhe-se o CARGO e a ESCOLA onde o funcionário trabalha. Então, quanto crio este campo físico (DIRETOR) na tabela ESCOLAS e quando vou cadastrar um DIRETOR dá erro.
Outro ponto, criei um campo calculado na tabela ESCOLAS para retornar um funcionário que tivesse o cargo de DIRETOR utilizando um select, mas aí ele retorna todos os funcionários que têm o cargo de DIRETOR e não apenas o funcionário que é DIRETOR de uma escola específica. Então, resumindo, como posso criar um campo calculado diretamente na tabela ESCOLAS que retorne o diretor conforme foi cadastrado na tabela FUNCIONÁRIOS?
Desde já agradeço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 o modelo na minha opinião deveria ser

Escola-----<diretor_escola>------funcionario

Com diretor_escola tendo uma coluna para tratar a vigencia, pois diretores de escola mudam durante o tempo

 

2 Quanto a montar a coluna virtual a questão é saber de o firebird suporta ou não a síntaxe, uma pesquisada superficial no google não foi conclusiva para mim, mas me pareceu não ser possível

 

3 mesmo não sendo possível é possível ter esta coluna numa view

http://www.firebirdsql.org/refdocs/langrefupd25-ddl-table.html

http://mail.firebase.com.br/pipermail/lista_firebase.com.br/2014-January/082582.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente gostaria de agradecer pelo feedback.

 

Eu utilizei o código seguinte e foi possível a criação do campo virtual, o erro foi ocasionado porque este select retorna os nomes de todos os diretores e não o de um diretor por escola.

 

alter table escolaOrgao
add esc_diretor COMPUTED BY ((
select fun_nome from funcionarios
join cargoFuncao on (fun_funcao = car_codigo)
where car_nome = 'DIRETOR(A)'));
Penso que o que preciso é incrementar esse select de modo que retorne o nome do diretor conforme foi cadastrado na tabela funcionarios.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente ...

 

 

 

alter table escolaOrgao

add esc_diretor COMPUTED BY (( select fun_nome

from funcionarios

join cargoFuncao on (fun_codigo = car_codigo)

where car_nome = 'DIRETOR(A)'));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase deu certo, Motta.

 

Problema que está apresentando: retorna o mesmo diretor para todas as escolas.

Na tabela funcionarios fiz os seguintes cadastros:

 

1) Nome do Funcionário: Maria Margarida; Função: Diretor(a); Escola: Monteiro Lobato.

2) Nome do Funcionário: José Roberto; Função: Diretor(a); Escola: Cecília Meireles.

3) Nome do Funcionário: Betânia Freitas; Função: Diretor(a); Escola: Machado de Assis.

 

A instrução select que você me passou roda direitinho, só que na coluna esc_diretor aparece Monteiro Lobato em todas as escolas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tabela escola tem o codigo do funcionario que e diretor !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, na tabela funcionarios faz-se o cadastro do nome do funcionário (fun_nome), cargo/função do funcionário (fun_cargo e fun_funcao), local de trabalho do funcionário (fun_escolaOrgao), entre outros.

Eu tentei cadastrar normalmente o diretor na tabela escolaOrgao "puxando" da tabela funcionarios mas deu erro, acho que foi por conta das chaves estrangeiras, uma vez que a tabela funcionarios "puxa" o local de trabalho do funcionário da tabela escolaOrgao e tava acontecendo um cruzamento de chaves estrangeiras.

Por isso que partir pra esse negócio de criar um campo calculado diretamente no banco através do COMPUTED BY na tabela escolaOrgao pra ver se "puxava" o nome do diretor direto da tabela funcionários. Porém já tentei várias opções de select e nenhum até agora não deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi fun_escolaOrgao devecser ligada a chave de escolaOrgao mas este modelo não está bom no minha opinião.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja Motta, o campo fun_escolaOrgão da tabela funcionarios é um campo integer que está ligado ao campo esc_código da tabela escolaOrgao. O problema que ocorreu é que o campo esc_diretor da tabela escolaOrgao também era um campo integer que estava ligado ao campo fun_codigo da tabela funcionarios. Aí, acho que tava dando um conflito, sei lá! Então resolvi deletar o campo físico esc_diretor da tabela escolaOrgao e sustituí-lo por um campo calculado através do COMPUTED BY e utilizando um select dentro desse COMPUTED BY para apenas exibir o nome do diretor nas consultas que fazem referência a tabela escolaOrgao. O que eu não estou conseguindo fazer é encontrar um select que retorne o diretor conforme foi cadastrado na tabela funcionarios.


Veja detalhes do problema. Será que não tem solução? https://drive.google.com/file/d/0B6HCR6gfW4mRSzdMdnpMd3hBMVE/view?usp=sharing


Tentei esse código agora pouco mas retorna o mesmo diretor para todas as escolas:

 

alter table escolaOrgao
add esc_diretor computed by ((select fun_nome from funcionarios
join cargoFuncao on (fun_codigo = car_codigo)
join escolaOrgao on (fun_escolaOrgao = esc_codigo)
where car_nome = 'DIRETOR(A)'
and fun_escolaOrgao = esc_codigo));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria escolaOrgao ter uma coluna diretor que seria uma fk apontando para funcionarios indicando o diretor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

TABELA: escolaOrgao

/* Table: ESCOLAORGAO, Owner: SYSDBA */

CREATE TABLE "ESCOLAORGAO"
(
"ESC_CODIGO" INTEGER NOT NULL,
"ESC_NOME" VARCHAR(50) NOT NULL,
"ESC_CODINEP" VARCHAR(8),
"ESC_LOGRADOURO" INTEGER NOT NULL,
"ESC_ENDERECO" VARCHAR(60),
"ESC_NUMERO" VARCHAR(10),
"ESC_BAIRRO" VARCHAR(40),
"ESC_CIDADE" INTEGER NOT NULL,
"ESC_ESTADO" INTEGER NOT NULL,
"ESC_TELEFONE" VARCHAR(15),
"ESC_EMAIL" VARCHAR(40),
"ESC_CEP" VARCHAR(9),
"ESC_ALUNOS" VARCHAR(5),
"ESC_LOCALIZACAO" CHAR(1),
"ESC_DATACADASTRO" TIMESTAMP,
"ESC_OBSERVACOES" VARCHAR(150),
"ESC_CNPJ" VARCHAR(18),
"ESC_LOGO" VARCHAR(50),
"ESC_CADASTROESCOLAR" VARCHAR(10),
"ESC_PORTARIA" VARCHAR(10),
"ESC_DATAPORTARIA" TIMESTAMP,
"ESC_COMPLEMENTO" VARCHAR(20),
"ESC_TIPOINSTITUICAO" CHAR(1),
"ESC_DIRETOR" VARCHAR(8),
"ESC_ADJUNTO" VARCHAR(8),
"ESC_SECRETARIO" VARCHAR(8),
CONSTRAINT "ESCOLAORGAO_PK" PRIMARY KEY ("ESC_CODIGO")
);

/* Index definitions for ESCOLAORGAO */

CREATE INDEX "IND_COD_ESCOLAORGAO" ON "ESCOLAORGAO"("ESC_CODIGO");
CREATE INDEX "IND_NOME_ESCOLAORGAO" ON "ESCOLAORGAO"("ESC_NOME");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCADJUNTO_FK" FOREIGN KEY ("ESC_ADJUNTO") REFERENCES "FUNCIONARIOS" ("FUN_MATRICULA");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCCID_FK" FOREIGN KEY ("ESC_CIDADE") REFERENCES "CIDADES" ("CID_CODIGO");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCDIRETOR_FK" FOREIGN KEY ("ESC_DIRETOR") REFERENCES "FUNCIONARIOS" ("FUN_MATRICULA");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCESTADO_FK" FOREIGN KEY ("ESC_ESTADO") REFERENCES "ESTADOS" ("EST_CODIGO");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCSECRETARIO_FK" FOREIGN KEY ("ESC_SECRETARIO") REFERENCES "FUNCIONARIOS" ("FUN_MATRICULA");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESLOG_FK" FOREIGN KEY ("ESC_LOGRADOURO") REFERENCES "LOGRADOUROS" ("LOG_CODIGO");

----------------------------------------------------------------------------------------------------------------------------------------------------

 

TABELA: funcionarios

/* Table: FUNCIONARIOS, Owner: SYSDBA */

CREATE TABLE "FUNCIONARIOS"
(
"FUN_CODIGO" INTEGER NOT NULL,
"FUN_NOME" VARCHAR(60) NOT NULL,
"FUN_VINCULOEMPREGATICIO" INTEGER NOT NULL,
"FUN_CARGO" INTEGER NOT NULL,
"FUN_FUNCAO" INTEGER NOT NULL,
"FUN_DATAADMISSAO" TIMESTAMP,
"FUN_ESCOLAORGAO" INTEGER NOT NULL,
"FUN_CARGAHORARIA" VARCHAR(7),
"FUN_TURNO" INTEGER,
"FUN_PISPASEP" VARCHAR(15),
"FUN_CTPS" VARCHAR(12),
"FUN_FUNDEB" CHAR(1),
"FUN_LOGRADOURO" INTEGER,
"FUN_ENDERECO" VARCHAR(60),
"FUN_NUMERO" VARCHAR(10),
"FUN_BAIRRO" VARCHAR(40),
"FUN_CIDADE" INTEGER NOT NULL,
"FUN_ESTADO" INTEGER NOT NULL,
"FUN_CEP" VARCHAR(9),
"FUN_RG" VARCHAR(12),
"FUN_ORGEXP" INTEGER,
"FUN_UF" INTEGER,
"FUN_CPF" VARCHAR(14),
"FUN_DATANASCIMENTO" TIMESTAMP,
"FUN_NATURALIDADE" INTEGER,
"FUN_TELEFONE" VARCHAR(15),
"FUN_CELULAR" VARCHAR(15),
"FUN_EMAIL" VARCHAR(30),
"FUN_OBS" VARCHAR(200),
"FUN_ESCOLARIDADE" INTEGER,
"FUN_RESERVISTA" VARCHAR(13),
"FUN_TITULOELEITOR" VARCHAR(13),
"FUN_ZONA" VARCHAR(3),
"FUN_SECAO" VARCHAR(4),
"FUN_PAI" VARCHAR(60),
"FUN_MAE" VARCHAR(60),
"FUN_SEXO" CHAR(1),
"FUN_PORTARIA" VARCHAR(8),
"FUN_CONTRATO" VARCHAR(8),
"FUN_ESTADOCIVIL" INTEGER,
"FUN_BANCO" VARCHAR(20),
"FUN_AGENCIA" VARCHAR(10),
"FUN_CONTA" VARCHAR(10),
"FUN_PROFPOLIVALENTE" CHAR(1),
"FUN_EDUCACAOCAMPO" CHAR(1),
"FUN_DATACADASTRO" TIMESTAMP,
"FUN_FOTO" VARCHAR(50),
"FUN_MATRICULA" VARCHAR(8),
"FUN_COMPLEMENTO" VARCHAR(20),
"FUN_UFNAT" INTEGER,
"FUN_SALAAULA" CHAR(1),
CONSTRAINT "FUNCIONARIOS_PK" PRIMARY KEY ("FUN_CODIGO"),
CONSTRAINT "FUN_MATRICULAUNICO" UNIQUE ("FUN_MATRICULA")
);

/* Index definitions for FUNCIONARIOS */

CREATE INDEX "IND_COD_FUNCIONARIOS" ON "FUNCIONARIOS"("FUN_CODIGO");
CREATE INDEX "IND_MATRICULA_FUNCIONARIOS" ON "FUNCIONARIOS"("FUN_MATRICULA");
CREATE INDEX "IND_NOME_FUNCIONARIOS" ON "FUNCIONARIOS"("FUN_NOME");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNCAR_PK" FOREIGN KEY ("FUN_CARGO") REFERENCES "CARGOFUNCAO" ("CAR_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNCID_PK" FOREIGN KEY ("FUN_CIDADE") REFERENCES "CIDADES" ("CID_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNCIV_PK" FOREIGN KEY ("FUN_ESTADOCIVIL") REFERENCES "ESTADOCIVIL" ("CIV_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNESC_PK" FOREIGN KEY ("FUN_ESCOLAORGAO") REFERENCES "ESCOLAORGAO" ("ESC_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNEST_FK" FOREIGN KEY ("FUN_ESTADO") REFERENCES "ESTADOS" ("EST_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNFUNC_PK" FOREIGN KEY ("FUN_FUNCAO") REFERENCES "CARGOFUNCAO" ("CAR_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNLOG_PK" FOREIGN KEY ("FUN_LOGRADOURO") REFERENCES "LOGRADOUROS" ("LOG_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNNAT_PK" FOREIGN KEY ("FUN_NATURALIDADE") REFERENCES "CIDADES" ("CID_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNOEX_PK" FOREIGN KEY ("FUN_ORGEXP") REFERENCES "ORGEXPEDIDOR" ("OEX_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNTUR_PK" FOREIGN KEY ("FUN_TURNO") REFERENCES "TURNOS" ("TUR_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNUF_FK" FOREIGN KEY ("FUN_UF") REFERENCES "ESTADOS" ("EST_CODIGO");
ALTER TABLE "FUNCIONARIOS" ADD CONSTRAINT "FUNVIN_PK" FOREIGN KEY ("FUN_VINCULOEMPREGATICIO") REFERENCES "VINCULOEMPREGATICIO" ("VIN_CODIGO");

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

DATASET: tbl_escolaOrgao no Delphi

 

unit uEscolaOrgao;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, IBCustomDataSet, IBTable, ExtCtrls, StdCtrls, Mask, DBCtrls,
Buttons, ComCtrls, StdActns, DBActns, ActnList, XPStyleActnCtrls, ActnMan,
ExtDlgs;

type
TfrmEscolaOrgao = class(TForm)
tbl_auxEscolaOrgao: TIBTable;
Panel1: TPanel;
btnNovo: TSpeedButton;
btnSalvar: TSpeedButton;
btnAlterar: TSpeedButton;
btnCancelar: TSpeedButton;
btnExcluir: TSpeedButton;
btnPesquisar: TSpeedButton;
btnImprimir: TSpeedButton;
DataSource1: TDataSource;
Label1: TLabel;
dbCodigo: TDBEdit;
Label2: TLabel;
dbINEP: TDBEdit;
Label3: TLabel;
dbNomeEscola: TDBEdit;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet3: TTabSheet;
Label4: TLabel;
dbEndereco: TDBEdit;
Label6: TLabel;
dbNumero: TDBEdit;
Label7: TLabel;
dbComplemento: TDBEdit;
Label8: TLabel;
dbBairro: TDBEdit;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
dbCEP: TDBEdit;
Label12: TLabel;
dbTelefone: TDBEdit;
Label13: TLabel;
dbEmail: TDBEdit;
Label18: TLabel;
dbLogo: TDBEdit;
Label23: TLabel;
dbCNPJ: TDBEdit;
Label24: TLabel;
dbCadEscolar: TDBEdit;
Label25: TLabel;
dbPortaria: TDBEdit;
Label26: TLabel;
Label27: TLabel;
dbObservacoes: TDBEdit;
Foto: TImage;
cbxLogradouro: TDBLookupComboBox;
cbxCidade: TDBLookupComboBox;
cbxUF: TDBLookupComboBox;
rgpLocalizacao: TDBRadioGroup;
btnRetornar: TSpeedButton;
carregarImagem: TBitBtn;
abreFoto: TOpenPictureDialog;
tbl_auxEscolaOrgaoESC_CODIGO: TIntegerField;
btnVoltar: TSpeedButton;
btnAvancar: TSpeedButton;
rgpTipoInstituicao: TDBRadioGroup;
Label5: TLabel;
dbDataCadastro: TDBEdit;
dbDataPortaria: TDBEdit;
Label14: TLabel;
dbNumAlunos: TDBEdit;
TabSheet2: TTabSheet;
GroupBox1: TGroupBox;
Label15: TLabel;
dbMatDirecao: TDBEdit;
GroupBox2: TGroupBox;
Label16: TLabel;
dbMatAdjunto: TDBEdit;
GroupBox3: TGroupBox;
Label17: TLabel;
dbMatSecretario: TDBEdit;
cbxDiretor: TDBLookupComboBox;
cbxAdjunto: TDBLookupComboBox;
cbxSecretario: TDBLookupComboBox;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure carregarImagemClick(Sender: TObject);
procedure DBLookupComboBox8Click(Sender: TObject);
procedure btnRetornarClick(Sender: TObject);
procedure btnPesquisarClick(Sender: TObject);
procedure dbDataCadastroEnter(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnNovoClick(Sender: TObject);
procedure btnSalvarClick(Sender: TObject);
procedure btnVoltarClick(Sender: TObject);
procedure btnAvancarClick(Sender: TObject);
procedure btnAlterarClick(Sender: TObject);
procedure btnCancelarClick(Sender: TObject);
procedure btnExcluirClick(Sender: TObject);
procedure btnImprimirClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmEscolaOrgao: TfrmEscolaOrgao;

implementation

uses uDM_DadadosSeduc, uConEscola, uConEscolaOrgao, uRptFichaEscola;

{$R *.dfm}

procedure TfrmEscolaOrgao.FormShow(Sender: TObject);
begin
dm_dadosSeduc.tbl_escolaOrgao.Open;
dm_dadosSeduc.tbl_logradouros.Open;
dm_dadosSeduc.tbl_cidades.Open;
dm_dadosSeduc.tbl_estados.Open;
dm_dadosSeduc.tbl_funcionarios.Open;
if (dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value <> '') then
Foto.Picture.LoadFromFile(dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value);
end;

procedure TfrmEscolaOrgao.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
dm_dadosSeduc.tbl_escolaOrgao.Close;
dm_dadosSeduc.tbl_logradouros.Close;
dm_dadosSeduc.tbl_cidades.Close;
dm_dadosSeduc.tbl_estados.Close;
dm_dadosSeduc.tbl_funcionarios.Close;
end;

procedure TfrmEscolaOrgao.carregarImagemClick(Sender: TObject);
begin
if abreFoto.Execute then
begin
Foto.Picture.LoadFromFile(abreFoto.FileName);
dm_dadosSeduc.tbl_escolaOrgao.Edit;
dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value:=abreFoto.FileName;
end;
end;

procedure TfrmEscolaOrgao.DBLookupComboBox8Click(Sender: TObject);
begin
if (dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value <> '') then
Foto.Picture.LoadFromFile(dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value);
end;

procedure TfrmEscolaOrgao.btnRetornarClick(Sender: TObject);
begin
Close;
end;

procedure TfrmEscolaOrgao.btnPesquisarClick(Sender: TObject);
begin
try
Application.CreateForm(TfrmConEscolaOrgao,frmConEscolaOrgao);
frmConEscolaOrgao.ShowModal;
finally
FreeAndNil(frmConEscolaOrgao);
end;
end;

procedure TfrmEscolaOrgao.dbDataCadastroEnter(Sender: TObject);
begin
dm_dadosSeduc.tbl_escolaOrgaoESC_DATACADASTRO.Value:= Date;
end;

procedure TfrmEscolaOrgao.FormCreate(Sender: TObject);
begin
btnNovo.Enabled:= True;
btnSalvar.Enabled:= False;
btnVoltar.Enabled:= True;
btnAvancar.Enabled:= True;
btnAlterar.Enabled:= True;
btnPesquisar.Enabled:= True;
btnCancelar.Enabled:= False;
btnExcluir.Enabled:= True;
btnImprimir.Enabled:= True;
dbINEP.Enabled:= False;
dbNomeEscola.Enabled:= False;
cbxLogradouro.Enabled:= False;
dbEndereco.Enabled:= False;
dbNumero.Enabled:= False;
dbComplemento.Enabled:= False;
dbBairro.Enabled:= False;
cbxCidade.Enabled:= False;
cbxUF.Enabled:= False;
dbCEP.Enabled:= False;
dbTelefone.Enabled:= False;
dbEmail.Enabled:= False;
rgpLocalizacao.Enabled:= False;
dbNumAlunos.Enabled:= False;
dbDataCadastro.Enabled:= False;
dbCadEscolar.Enabled:= False;
dbPortaria.Enabled:= False;
dbDataPortaria.Enabled:= False;
dbCNPJ.Enabled:= False;
rgpTipoInstituicao.Enabled:= False;
dbObservacoes.Enabled:= False;
dbMatDirecao.Enabled:= False;
cbxDiretor.Enabled:= False;
dbMatAdjunto.Enabled:= False;
cbxAdjunto.Enabled:= False;
dbMatSecretario.Enabled:=False;
cbxSecretario.Enabled:= False;
Foto.Enabled:= False;
carregarImagem.Enabled:= False;
end;

procedure TfrmEscolaOrgao.btnNovoClick(Sender: TObject);
var
codAut:integer;
begin
dm_dadosSeduc.tbl_escolaOrgao.Append;
dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value:='C:\SeducLI\Imagens\Fotos\sem_foto.jpg';
Foto.Picture.LoadFromFile(dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value);
tbl_auxEscolaOrgao.Open;
tbl_auxEscolaOrgao.Last;
codAut:= tbl_auxEscolaOrgaoESC_CODIGO.Value + 1;
dm_dadosSeduc.tbl_escolaOrgaoESC_CODIGO.Value:=codAut;
tbl_auxEscolaOrgao.Close;
dbINEP.Enabled:= True;
dbINEP.SetFocus;
btnNovo.Enabled:= False;
btnSalvar.Enabled:= True;
btnVoltar.Enabled:= False;
btnAvancar.Enabled:= False;
btnAlterar.Enabled:= False;
btnPesquisar.Enabled:= False;
btnCancelar.Enabled:= True;
btnExcluir.Enabled:= False;
btnImprimir.Enabled:= False;
dbNomeEscola.Enabled:= True;
cbxLogradouro.Enabled:= True;
dbEndereco.Enabled:= True;
dbNumero.Enabled:= True;
dbComplemento.Enabled:= True;
dbBairro.Enabled:= True;
cbxCidade.Enabled:= True;
cbxUF.Enabled:= True;
dbCEP.Enabled:= True;
dbTelefone.Enabled:= True;
dbEmail.Enabled:= True;
rgpLocalizacao.Enabled:= True;
dbNumAlunos.Enabled:= True;
dbDataCadastro.Enabled:= True;
dbCadEscolar.Enabled:= True;
dbPortaria.Enabled:= True;
dbDataPortaria.Enabled:= True;
dbCNPJ.Enabled:= True;
rgpTipoInstituicao.Enabled:= True;
dbObservacoes.Enabled:= True;
dbMatDirecao.Enabled:= True;
cbxDiretor.Enabled:= True;
dbMatAdjunto.Enabled:= True;
cbxAdjunto.Enabled:= True;
dbMatSecretario.Enabled:=True;
cbxSecretario.Enabled:= True;
Foto.Enabled:= True;
carregarImagem.Enabled:= True;
end;

procedure TfrmEscolaOrgao.btnSalvarClick(Sender: TObject);
begin
if dm_dadosSeduc.tbl_escolaOrgao.State in [dsEdit]
then
begin
if (MessageDlg('DESEJA SALVAR AS ALTERAÇÕES NO REGISTRO ATUAL?', mtConfirmation, [mbYes,mbNo],0) = mrYes)
then
begin
dm_dadosSeduc.tbl_escolaOrgao.Post;
btnNovo.Enabled:= True;
btnSalvar.Enabled:= False;
btnVoltar.Enabled:= True;
btnAvancar.Enabled:= True;
btnAlterar.Enabled:= True;
btnPesquisar.Enabled:= True;
btnCancelar.Enabled:=False;
btnExcluir.Enabled:= True;
btnImprimir.Enabled:= True;
dbINEP.Enabled:= False;
dbNomeEscola.Enabled:= False;
cbxLogradouro.Enabled:= False;
dbEndereco.Enabled:= False;
dbNumero.Enabled:= False;
dbComplemento.Enabled:= False;
dbBairro.Enabled:= False;
cbxCidade.Enabled:= False;
cbxUF.Enabled:= False;
dbCEP.Enabled:= False;
dbTelefone.Enabled:= False;
dbEmail.Enabled:= False;
rgpLocalizacao.Enabled:= False;
dbNumAlunos.Enabled:= False;
dbDataCadastro.Enabled:= False;
dbCadEscolar.Enabled:= False;
dbPortaria.Enabled:= False;
dbDataPortaria.Enabled:= False;
dbCNPJ.Enabled:= False;
rgpTipoInstituicao.Enabled:= False;
dbObservacoes.Enabled:= False;
dbMatDirecao.Enabled:= False;
cbxDiretor.Enabled:= False;
dbMatAdjunto.Enabled:= False;
cbxAdjunto.Enabled:= False;
dbMatSecretario.Enabled:=False;
cbxSecretario.Enabled:= False;
Foto.Enabled:= False;
carregarImagem.Enabled:= False;
MessageDlg('ALTERAÇÕES SALVAS COM SUCESSO!', mtInformation,[mbOK],0);
end
else
begin
dm_dadosSeduc.tbl_escolaOrgao.Cancel;
MessageDlg('AS ALTERAÇÕES NÃO FORAM SALVAS!', mtInformation,[mbOK],0);
end;
end
else
begin
if ((dbINEP.Text <> '') and (dbNomeEscola.Text <> '') and (cbxLogradouro.Text <> '') and
(dbEndereco.Text <> '') and (dbNumero.Text <> '') and (dbComplemento.Text <> '') and
(dbBairro.Text <> '') and (cbxCidade.Text <> '') and (cbxUF.Text <> '') and
(dbCEP.Text <> '') and (rgpLocalizacao.ItemIndex <> -1) and (dbNumAlunos.Text <> '') and
(rgpTipoInstituicao.ItemIndex <> -1))
then
begin
dm_dadosSeduc.tbl_escolaOrgao.Post;
btnNovo.Enabled:= True;
btnSalvar.Enabled:= False;
btnVoltar.Enabled:= True;
btnAvancar.Enabled:= True;
btnAlterar.Enabled:= True;
btnPesquisar.Enabled:= True;
btnCancelar.Enabled:=False;
btnExcluir.Enabled:= True;
btnImprimir.Enabled:= True;
dbINEP.Enabled:= False;
dbNomeEscola.Enabled:= False;
cbxLogradouro.Enabled:= False;
dbEndereco.Enabled:= False;
dbNumero.Enabled:= False;
dbComplemento.Enabled:= False;
dbBairro.Enabled:= False;
cbxCidade.Enabled:= False;
cbxUF.Enabled:= False;
dbCEP.Enabled:= False;
dbTelefone.Enabled:= False;
dbEmail.Enabled:= False;
rgpLocalizacao.Enabled:= False;
dbNumAlunos.Enabled:= False;
dbDataCadastro.Enabled:= False;
dbCadEscolar.Enabled:= False;
dbPortaria.Enabled:= False;
dbDataPortaria.Enabled:= False;
dbCNPJ.Enabled:= False;
rgpTipoInstituicao.Enabled:= False;
dbObservacoes.Enabled:= False;
dbMatDirecao.Enabled:= False;
cbxDiretor.Enabled:= False;
dbMatAdjunto.Enabled:= False;
cbxAdjunto.Enabled:= False;
dbMatSecretario.Enabled:=False;
cbxSecretario.Enabled:= False;
Foto.Enabled:= False;
carregarImagem.Enabled:= False;
MessageDlg('ESCOLA OU ÓRGÃO CADASTRADO(A) COM SUCESSO!',mtInformation,[mbOK],0);
end
else
begin
MessageDlg('ERRO AO CADASTRAR: CAMPO OBRIGATÓRIO NÃO PREENCHIDO!', mtError,[mbOK],0);
end;
end;
end;

procedure TfrmEscolaOrgao.btnVoltarClick(Sender: TObject);
begin
dm_dadosSeduc.tbl_escolaOrgao.Prior;
btnAvancar.Enabled:= True;
if dm_dadosSeduc.tbl_escolaOrgao.Bof then
begin
btnVoltar.Enabled:= False;
end;
if (dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value <> '') then
begin
Foto.Picture.LoadFromFile(dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value);
end;
end;

procedure TfrmEscolaOrgao.btnAvancarClick(Sender: TObject);
begin
dm_dadosSeduc.tbl_escolaOrgao.Next;
btnVoltar.Enabled:= True;
if dm_dadosSeduc.tbl_escolaOrgao.Eof then
begin
btnAvancar.Enabled:= False;
end;
if (dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value <> '') then
begin
Foto.Picture.LoadFromFile(dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value);
end;
end;

procedure TfrmEscolaOrgao.btnAlterarClick(Sender: TObject);
begin
dm_dadosSeduc.tbl_escolaOrgao.Edit;
btnNovo.Enabled:= False;
btnSalvar.Enabled:= True;
btnVoltar.Enabled:= False;
btnAlterar.Enabled:= False;
btnPesquisar.Enabled:= False;
btnCancelar.Enabled:= True;
btnExcluir.Enabled:= False;
btnImprimir.Enabled:= False;
dbINEP.Enabled:= True;
dbNomeEscola.Enabled:= True;
cbxLogradouro.Enabled:= True;
dbEndereco.Enabled:= True;
dbNumero.Enabled:= True;
dbComplemento.Enabled:= True;
dbBairro.Enabled:= True;
cbxCidade.Enabled:= True;
cbxUF.Enabled:= False;
dbCEP.Enabled:= True;
dbTelefone.Enabled:= True;
dbEmail.Enabled:= True;
rgpLocalizacao.Enabled:= True;
dbNumAlunos.Enabled:= True;
dbDataCadastro.Enabled:= True;
dbCadEscolar.Enabled:= True;
dbPortaria.Enabled:= True;
dbDataPortaria.Enabled:= True;
dbCNPJ.Enabled:= True;
rgpTipoInstituicao.Enabled:= True;
dbObservacoes.Enabled:= True;
dbMatDirecao.Enabled:= True;
cbxDiretor.Enabled:= True;
dbMatAdjunto.Enabled:= True;
cbxAdjunto.Enabled:= True;
dbMatSecretario.Enabled:=True;
cbxSecretario.Enabled:= True;
Foto.Enabled:= True;
carregarImagem.Enabled:= True;
end;

procedure TfrmEscolaOrgao.btnCancelarClick(Sender: TObject);
begin
dm_dadosSeduc.tbl_escolaOrgao.Cancel;
if (dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value <> '')
then
begin
Foto.Picture.LoadFromFile(dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value);
end;
btnNovo.Enabled:= True;
btnSalvar.Enabled:= False;
btnVoltar.Enabled:= True;
btnAvancar.Enabled:= True;
btnAlterar.Enabled:= True;
btnPesquisar.Enabled:= True;
btnCancelar.Enabled:= False;
btnExcluir.Enabled:= True;
btnImprimir.Enabled:= True;
dbINEP.Enabled:= False;
dbNomeEscola.Enabled:= False;
cbxLogradouro.Enabled:= False;
dbEndereco.Enabled:= False;
dbNumero.Enabled:= False;
dbComplemento.Enabled:= False;
dbBairro.Enabled:= False;
cbxCidade.Enabled:= False;
cbxUF.Enabled:= False;
dbCEP.Enabled:= False;
dbTelefone.Enabled:= False;
dbEmail.Enabled:= False;
rgpLocalizacao.Enabled:= False;
dbNumAlunos.Enabled:= False;
dbDataCadastro.Enabled:= False;
dbCadEscolar.Enabled:= False;
dbPortaria.Enabled:= False;
dbDataPortaria.Enabled:= False;
dbCNPJ.Enabled:= False;
rgpTipoInstituicao.Enabled:= False;
dbObservacoes.Enabled:= False;
dbMatDirecao.Enabled:= False;
cbxDiretor.Enabled:= False;
dbMatAdjunto.Enabled:= False;
cbxAdjunto.Enabled:= False;
dbMatSecretario.Enabled:=False;
cbxSecretario.Enabled:= False;
Foto.Enabled:= False;
carregarImagem.Enabled:= False;
end;

procedure TfrmEscolaOrgao.btnExcluirClick(Sender: TObject);
begin
if (MessageDlg('DESEJA EXCLUIR O CADASTRO DESTE/DESTA ESCOLA/ÓRGÃO?', mtConfirmation, [mbYes, mbNo], 0) = mrYes)
then
begin
dm_dadosSeduc.tbl_escolaOrgao.Delete;
if (dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value <> '')
then
begin
Foto.Picture.LoadFromFile(dm_dadosSeduc.tbl_escolaOrgaoESC_LOGO.Value);
end;
MessageDlg('CADASTRO DE ESCOLA OU ÓRGÃO EXCLUÍDO COM SUCESSO!',mtInformation,[mbOK],0);
Exit;
end
else
begin
MessageDlg('CADASTRO DE ESCOLA/ÓRGÃO NÃO FOI EXCLUÍDO!',mtInformation,[mbOK],0);
Exit;
end;
end;
procedure TfrmEscolaOrgao.btnImprimirClick(Sender: TObject);
begin
try
Application.CreateForm(TfrmRptFichaEscola,frmRptFichaEscola);
frmRptFichaEscola.QuickRep1.Preview;
finally
FreeAndNil(frmRptFichaEscola);
end;
end;

end.

 

---------------------------------------------------------------------------------------------------------------------------------------------------

 

IMPORTANTE: erro quando que aparece toda vez que vou cadastrar o diretor no formulário frmEscolaOrgao, no Delphi:

 

Project SeducLi.exe raised exception class EDatabaseError with
message 'tbl_escolaOrgao: Dataset not in edit or insert mode'.
Process stopped. Use Step or Run to continue.

 

OBSERVAÇÃO IMPORTANTE: Apesar do erro, os dados são cadastrados na tabela escolaOrgão, no firebird.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estes "alter" deram zebra ?

ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCADJUNTO_FK" FOREIGN KEY ("ESC_ADJUNTO") REFERENCES "FUNCIONARIOS" ("FUN_MATRICULA");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCCID_FK" FOREIGN KEY ("ESC_CIDADE") REFERENCES "CIDADES" ("CID_CODIGO");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCDIRETOR_FK" FOREIGN KEY ("ESC_DIRETOR") REFERENCES "FUNCIONARIOS" ("FUN_MATRICULA");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCESTADO_FK" FOREIGN KEY ("ESC_ESTADO") REFERENCES "ESTADOS" ("EST_CODIGO");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCSECRETARIO_FK" FOREIGN KEY ("ESC_SECRETARIO") REFERENCES "FUNCIONARIOS" ("FUN_MATRICULA");
ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESLOG_FK" FOREIGN KEY ("ESC_LOGRADOURO") REFERENCES "LOGRADOUROS" ("LOG_CODIGO");

"ESC_DIRETOR" VARCHAR(8),

 

Deveria ter o mesmo "type da PK de funcionarios "FUN_CODIGO" INTEGER NOT NULL,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as alterações que você propos Motta e continua apresentando o mesmo erro:

 

ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCADJUNTO_FK" FOREIGN KEY ("ESC_ADJUNTO") REFERENCES "FUNCIONARIOS" ("FUN_CODIGO");

ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCCID_FK" FOREIGN KEY ("ESC_CIDADE") REFERENCES "CIDADES" ("CID_CODIGO");

ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCDIRETOR_FK" FOREIGN KEY ("ESC_DIRETOR") REFERENCES "FUNCIONARIOS" ("FUN_CODIGO");

ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCESTADO_FK" FOREIGN KEY ("ESC_ESTADO") REFERENCES "ESTADOS" ("EST_CODIGO");

ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESCSECRETARIO_FK" FOREIGN KEY ("ESC_SECRETARIO") REFERENCES "FUNCIONARIOS" ("FUN_CODIGO");

ALTER TABLE "ESCOLAORGAO" ADD CONSTRAINT "ESLOG_FK" FOREIGN KEY ("ESC_LOGRADOURO") REFERENCES "LOGRADOUROS" ("LOG_CODIGO");

 

IMPORTANTE: o mais engraçado é que quando eu faço qualquer alteração na tabela escolaOrgao e dou um post ela salva normalmente as alterações, mas quando essa alteração diz respeito ao diretor de uma escola aí dá aquele erro.

Mas descobri uma coisa importante, o problema deve ser no delphi, porque se eu faço as alterções diretamente no banco (firebird) e dou um commit não dá erro. Porém não entendo porque tá dando esse erro no delphi, porque, como já falei a cima, no formulário Escolas/Órgão, se eu faço uma alteração em qualquer outro campo e salvo dá tudo normal, porém se essa alteração é no campo diretor, diretor adjunto ou chefe de secretaria então aparece aquele erro:

 

Project SeducLi.exe raised exception class EDatabaseError with

message 'tbl_escolaOrgao: Dataset not in edit or insert mode'.

Process stopped. Use Step or Run to continue.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Checou os tipos diferentes ?

 

Campo de uma tabela (fk) contra a chave (pk) da outra !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tabela funcionarios

- Chave primaria: fun_codigo integer not null

 

Tabela escolaOrgao

- Chave estrangeira: esc_diretor integer

 

Então tá tudo ok com relação a esse ponto.

 

Estou quase decidido a retirar o campo esc_diretor da tabela escolaOrgao, mas aí fica muito estranho ter uma tabela de cadastro de escolas sem o nome do diretor.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Estou quase decidido a retirar o campo esc_diretor da tabela escolaOrgao, mas aí fica muito estranho ter uma tabela de cadastro de escolas sem o nome do diretor.

 

 

Mas isto seria o certo , não ter o nome e sim o código (em termos de normalização) , o nome poderia ser obitido por um "join" e até num campo virtual como você quer desde que o BD suporte a síntaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.