Buscar

Criando seu próprio banco de dados em delphi

Código

{Criando seu próprio banco de dados com o Delphi


Cenário: Em meu programa Delphi eu precisei de um modo de armazenar um pouco de informação no disco. Eu não queria trabalhar com arquivos texto - não deveria haver nenhum modo fácil para ver/alterar a informação do arquivo. Pode haver ações como changing/updating dos dados existentes; mas escritas e leituras acontecerão. Que tipo de arquivo eu devo usar?


Arquivos Typed
Enquanto arquivos de texto consistirem em linhas terminadas com uma combinação de CR/LF, arquivos typed consistem em dados levados de um tipo particular de estrutura de dados.
}



type
TMember = record
Name : string[50];
eMail : string[30];
Posts : LongInt;
end;

var Members : array[1..50] of TMember;

{Antes de escrevermos alguma informação no disco nós temos que declarar uma variável de um tipo de arquivo. A linha seguinte de código declara a variável F de arquivo.}

var F : file of TMember;

{Nota: Para criar um arquivo typed em Delphi, nós usamos a sintaxe seguinte: }

var SomeTypedFile: file of SomeType

{O tipo básico (SomeType) para um arquivo pode ser um tipo escalar (gosta Double), um tipo de array ou tipo de registro. Não deve ser string longa, array dinâmico, class, objeto ou um ponteiro.

Para começar o funcionamento com arquivos Delphi nós temos que unir um arquivo em um disco para uma variável de arquivo em nosso programa. Para criar esta ligação nós temos que usar o procedimento AssignFile para associar um arquivo em um disco com uma variável de arquivo.}


AssignFile(F, 'Members.dat')

{Uma vez a associação com um arquivo externo é estabelecida, a variavel F deve ser 'aberta' para preparar ele para leitura ou escrita. Nós chamamos o procedimento Reset para abrir um arquivo existente ou Rewrite para criar um arquivo novo. Quando um programa completar o processo em um arquivo, o arquivo precisa se fechado com o procedimento CloseFile. Depois que um arquivo estiver fechado, seu arquivo externo associado é atualizado. A variável de arquivo pode ser associada então com outro arquivo externo. Em geral, nós sempre deveríamos usar manipulação de exceção; muitos erros podem surgir ao trabalhar com arquivos. Por exemplo: se nós chamamos CloseFile para um arquivo que já esta fechado, o Delphi informa um erro de I/O. Por outro lado, se nós tentamos fechar um arquivo mas não chamamos AssignFile, os resultados são imprevisíveis.

Escrita
Suponha que nós preenchemos uma array de sócios do Delphi com os nomes deles, e-mails e número de postagem e nós queremos armazenar esta informação em um arquivo no disco. O seguinte código fará o trabalho:}


var F : file of TMember;
begin
AssignFile(F,'members.dat');
Rewrite(F);
try
for i:= 1 to 50 do
Write (F, Members[i]);
finally
CloseFile(F);
end;
end;

{Leitura
Na ordem, para receber toda a informação do arquivo 'members.dat' nós poderíamos usar este código:}


var Member: TMember
F : file of TMember;
begin AssignFile(F,'members.dat');
Reset(F);
try
while not Eof(F) do begin
Read (F, Member);
end;
finally
CloseFile(F);
end;
end;

{Nota: Eof é função que confere se é o fim do arquivo. Nós usamos esta função para ter certeza que nós não estamos tentando ler além do fim do arquivo (além do último registro armazenado).

Buscando e posicionando
Normalmente arquivos são acessados consecutivamente. Quando um arquivo é lido usando o procedimento Read ou escrito usando o procedimento Write, a posição do arquivo atual move para o próximo numericamente ordem do componente (próximo registro). Arquivos typed também podem ser acessados fortuitamente arquivos de arquivos pelo procedimento standard Seek que move a posição corrente do arquivo atual para um componente especificado. As funções FilePos e FileSize podem ser usadas para determinar a posição do arquivo atual e o tamanho do arquivo atual.}


// volte para o começo - o primeiro registro
Seek(F, 0);

// vá para o 5º registro
Seek(F, 5);

// Salte para o fim - "depois do" último registro
Seek(F, FileSize(F));

{Mudança e atualização
Nós há pouco vimos como escrever e ler a ordem inteira dos Sócios. O que quando tudo que nós queremos fazer é buscar ao 10º sócio e mudar o seu e-mail? O próximo procedimento faz isso exatamente:}


procedure ChangeEMail
(const RecN : integer; const NewEMail : string);
var DummyMember : TMember;
begin
{ nomeie, abra, exceção que controla bloco }
Seek(F, RecN);
Read(F, DummyMember);
DummyMember.Email := NewEMail;
{ leia mova para o próximo registro, nós temos
que voltar para o registro original, então escreva }

Seek(F, RecN);
Write(F, DummyMember);
{fecha arquivo}
end;

{Tudo terminado
Pronto, agora nós temos tudo que nós precisamos para realizar nossa tarefa. Nós podemos escrever informação de Sócios no disco, nós podemos ler-lo e nós podemos mudar alguns dos dados até mesmo (e-mail, por exemplo) no "meio" do arquivo. }

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Banco de dados
Adicionada dia: 11/12/03
Por: Jerry Ads
Visualizada: 13433 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009