Opes no Database Desktop Chave secundria ndices auxiliares
Opções no Database Desktop • Chave secundária – índices auxiliares utilizados em tabelas com o objetivo de classificar e agrupar registros em um conjunto de dados (tabela) • Integridade referencial – manter íntegro os relacionamentos entre as tabelas do banco de dados
Através do Database Desktop é possível criar índices auxiliares para uma determinada tabela.
Criando um índice secundário: 2 1. tabela Funcionários. db 2. campo Nome 3. nome do índice Func. Nome 3
Estudo de Caso • criar uma tabela e seus respectivos índices em tempo de execução (via código) • propriedades e métodos do componente TTable utilizados: – Exists – Field. Defs – Index. Defs – Create. Table verifica se a tabela existe definições dos campos definições dos índices cria fisicamente a tabela
componente Radio. Group da página Standard
{ Se a tabela “Pessoas. db” não existe no diretório do disco, então a sua estrutura de campos e seus respectivos índices são criados pelo procedimento local Criar. Tabela. } var path: string; i: integer; begin { criando alias via código } if not Session. Is. Alias('Database Desktop') then begin path : = Extract. File. Path(Application. Exe. Name); Session. Add. Standard. Alias('Database Desktop', path, 'Paradox'); Session. Save. Config. File; end; tb. Pessoas. Database. Name : = 'Database Desktop'; tb. Pessoas. Table. Name : = 'Pessoas. db'; propriedade do if not(tb. Pessoas. Exists) componente TTable que then Criar. Tabela; indica se a tabela existe ou não no disco
procedure Tfr. Chaves. Sec. Form. Activate(Sender: TObject); procedure Criar. Tabela; begin { Cria a estrutura (campos) da tabela } tb. Pessoas. Field. Defs. Add. Field. Def { Cria os índices da tabela } tb. Pessoas. Index. Defs. Add. Index. Def { Cria fisicamente a tabela } tb. Pessoas. Create. Table; end; begin. . . if not(tb. Pessoas. Exists) then Criar. Tabela; tb. Pessoas. Open; . . . end;
Propriedade Field. Defs • lista contendo as definições de todos os campos do dataset • Add. Field. Def, este método cria um novo campo adicionado-o aos Items do objeto TField. Defs – Name – Data. Type – Size nome do campo tipo do campo tamanho do campo
procedure Criar. Tabela; { definição dos campos } begin with tb. Pessoas. Field. Defs. Add. Field. Def do begin Name : = 'Código'; Data. Type : = ft. Integer; end; with tb. Pessoas. Field. Defs. Add. Field. Def do begin Name : = 'Nome'; Data. Type : = ft. String; Size : = 35; end; with tb. Pessoas. Field. Defs. Add. Field. Def do begin Name : = 'Sexo'; Data. Type : = ft. String; Size : = 1; end; . . . end;
Propriedade Index. Defs • contém informações sobre os índices do dataset • Add. Index. Def, este método cria um novo índice adicionado-o aos Items do objeto TIndex. Defs – Name – Fields – Options nome do arquivo de índices campo(s) que formam o índice atributo do índice (primário, . . . )
procedure Criar. Tabela; { definição dos índices } begin. . . with tb. Pessoas. Index. Defs. Add. Index. Def do begin Name: = ''; Fields : = 'Código’; { indica a chave primária } Options : = [ix. Primary]; { obs sempre os primeiros campos } end; with tb. Pessoas. Index. Defs. Add. Index. Def do begin Name: = 'Nome'; Fields : = 'Nome'; Options : = []; end; with tb. Pessoas. Index. Defs. Add. Index. Def do begin Name: = 'Sexo. ENome'; Fields : = 'Sexo; Nome'; Options : = []; end; tb. Pessoas. Create. Table; { cria a tabela “pessoas. db” } end;
{ cria uma lista, usando o componente Radio. Group, contendo todos os índices da tabela Pessoas. db } tb. Pessoas. Open; adiciona o índice da tb. Pessoas. Index. Defs. Update; tabela como um novo item na lista rg. Indices. Items. Clear; for i: =0 to tb. Pessoas. Index. Defs. Count-1 do begin rg. Indices. Items. Add(tb. Pessoas. Index. Defs. Items[i]. Fields); end; { utiliza o primeiro índice para indexar a tabela } rgindices. itemindex : = 0; tb. Pessoas. Index. Field. Names : = tb. Pessoas. Index. Defs. Items[0]. Fields; Update Count obtêm a relação de índices disponíveis quantidade de índices disponíveis Items lista com as definições dos índices. Items[0], primeiro índice da tabela campo(s) que formam o índice define o índice atual da tabela Fields Index. Field. Names
procedure Tfr. Locate. rg. Indices. Click(Sender: TObject); begin with tb. Pessoas do begin Index. Field. Names: =Index. Defs. Items[rg. Indices. Item. Index]. Fields; First; end;
Integridade Referencial • Regras que são seguidas para preservar os relacionamentos definidos entre tabelas: – adicionar registros a uma tabela relacionada quando não houver registro associado na tabela primária – alterar valores na tabela primária que resultariam em registros órfãos em uma tabela relacionada – excluir registros da tabela primária quando houver registros coincidentes em uma tabela relacionada.
Este diagrama de dados demonstra os relacionamentos entre as tabelas: Customer clientes Orders pedidos Items itens dos pedidos
Estudo de Caso • criar e verificar a integridade referencial entre as tabelas: Times. db (Master) e Jogadores. db (Detail) através do campo Cd. Time 1: n Times. db tem 1: 1 Jogadores. db
Criar o alias da aplicação: Integridade_Referencial
Times. db (Master) Jogadores. db (Detail)
1. selecionar o alias da aplicação 2. abrir a tabela detalhe (jogadores. db)
Através do Database Desktop é possível criar a integridade referencial entre tabelas relacionadas (Master/ Detail)
A integridade é definida na tabela detalhe (Jogadores. db) em relação a tabela master (Times. db) através do campo Cd. Time
configurar as propriedades: Database. Name Integridade_Referencial Table. Name Times. db (Master) configurar as propriedades: Database. Name Integridade_Referencial Table. Name Jogadores. db (Detail) Master. Source ds. Times Master. Fields Cd. Time
procedure TForm 1. Times. Delete. Error(Data. Set: TData. Set; E: EDatabase. Error; var Action: TData. Action); begin if (E is EDBEngine. Error) then if (E as EDBEngine. Error). Errors[0]. Errorcode = 9734 then begin Message. Dlg('Para deletar este registro, . . . ', mt. Warning, [mb. OK], 0); Abort; end; EDBEngine. Error é a classe exceção para erros do BDE Erros pilha de erros levantados no BDE Errorcode = 9734 código de erro que indica que existem registros de jogadores relacionados ao time que está sendo excluído (BDE. int, pasta Doc do Delphi) Abort este método aborta a operação corrente
- Slides: 34