Sie sind auf Seite 1von 44

Capt.

12
ARCHIVOS – BASES DE DATOS
Hasta ahora, en todas las aplicaciones que se han considerado, los datos se han
introducido de manera interactiva a través del teclado durante la ejecución del programa.
Con este método si se quieren los mismos datos en otra aplicación se deben volver a
ingresar. Este método no es deseable cuando se necesitan grandes cantidades de datos.
Por ejemplo, requeriría mucho tiempo para una empresa grande, volver a escribir los
datos de sus empleados cada vez que un programa deba usar este información para una
aplicación concreta. Los archivos proporcionan un medio eficiente para almacenar datos
de manera que puedan ser utilizados por varios programas.

BASES DE DATOS
Los componentes en la pagina Data Acces, la pagina ADO o la pagina InterBase de la
Paleta de componentes permiten que nuestras aplicaciones lean desde y escriban a
bases de datos. Los componentes en la pagina Data Acces usa El Motor de Base de
Datos de Borland (BDE) para acceder a la información de la base de datos que esta
disponible a los controles en su interfaz de usuario. Los componentes en la pagina ADO
usan Objetos Data ActiveX (ADO). Los componentes en la pagina InterBAse acceden a
una base de datos interBase directamente.

ARCHIVO
Es una estructura de datos formada por una serie de componentes, que son todos del
mismo tipo. Es una colección de datos relacionados, normalmente almacenados en disco
y referenciados por un nombre simple.
Un archivo es una colección de datos del mismo tipo que con un título o nombre se
almacenan o graban en dispositivos externos al computador tales como: Discos,
diskettes, cintas magnéticas, etc.
Se suele usar el termino Archivo externo para referirnos a un archivo almacenado
permanentemente, separado de la ejecución del programa.

CLASIFICACION
1) Archivo de texto: Es un archivo de caracteres que esta también divido en líneas.
2) Archivo Binario: Es un archivo que se crea dentro de un programa para ser leído por
otro programa o por el mismo programa mas adelante; estos archivos se escriben en la
representación interna de la maquina.
Los datos de un archivo pueden ser leídos y utilizados por otros medio.

OPERACIONES CON LOS ARCHIVOS

1
Para operar con un archivo hay que referirse a él mediante un nombre. Las operaciones
básicas para usar un archivo son:
1) Declaración del manipulador interno del archivo, dándole un nombre y otras
especificaciones.
2) Asignación del manipulador interno a un archivo externo.
3) Apertura del archivo para el modo de proceso que se iniciará.
4) Lectura o escritura de los datos desde o en el archivo (según la apertura)
5) Cierre del archivo.

I. ARCHIVOS DE TEXTO
Un archivo de texto es una secuencia de caracteres imprimibles (código ASCII) que
fluyen entre el programa y un dispositivo o el disco.
A demás de los caracteres ordinarios, en un archivo de texto se pueden escribir
caracteres de fin o cambio de línea [Eoln “end of line”] constituidos por un Retorno de
Carro (CR) y un Avance de Línea (LF). Para conseguir un delimitador pulse Enter. Un
archivo de texto se puede crear con cualquier editor de texto ( Bloc de Notas, WordPad,
Win Word o el editor de DELPHI).
1) Declaración de un archivo
Definir una variable de tipo archivo Text.
Formato:
Var
VarArchivo: TEXT;

Asociar a esta variable el nombre de un archivo en disco.


2) Asignación de archivos
Establece una correspondencia entre variables tipo archivo con un archivo de texto
situado en un disco.
Formato:
Assign(VarArchivo, NombArchExterno);

Ejemplo: Si el archivo se almacena en el diskette como arch1.txt, podemos referirnos


a él dentro del programa como archA:

Assign(archA, ‘a:arch1.txt’)
El prefijo de la unidad se podrá omitir cuando el archivo que se va a leer esta en la
unidad por omisión.

2
3) Abrir un archivo para Lectura
Formato
Reset(VarArchivo);
Para leer información de un archivo desde un programa, utilice una instrucción Assign y
una instrucción Reset.
Ejemplo: Assign(archA, ‘arch1.txt’);
Reset (archA);

4) Abrir un archivo para Escritura


Utilizar la instrucción ReWrite para ubicar el puntero al principio del archivo. Tener
cuidado, pues, si el archivo ya existe se borrará su contenido.
5) Añadir datos a un archivo
Usar Append para añadir datos al final del archivo.
Formato:
Append(VarArchivo)
6) Escritura de un archivo
Cuando abrimos un archivo para escritura con ReWrite o Append, podemos utilizar las
instrucciones Write, WriteLn para escribir datos en él.
Formato:
Write (VarArchivo, V1, V2,……);
WriteLn(VarArchivo, V1, V2,…..);

Donde: V1, V2,…… son variables del tipo de datos.


Ejemplo:
Write(ArchA, ‘Esta línea se escribirá ‘);
WriteLn(ArchA, ‘en una sola linea’);

7) Lectura en un Archivo

Luego de abrir un archivo para lectura con Reset, utilizaremos Read, o bien ReadLn
para leer datos de un archivo.

Formato:
Read(VarArchivo, V1, V2,….);

3
ReadL(VarArchivo, V1, V2,…..);

Donde: V1, V2,… son variables de tipo Char, integer, real o string.

8) Cerrar un Archivo

Cuando haya terminado de leer o escribir información en un archivo utilice la instrucción


Close para cerrar el archivo.

Formato
Close(VarArchivo);

Resumen Archivos de Texto


1. Declaracion
Var
Fich: File of Char,
Arch: Text;

2. Asociación
Sintaxis

AssignFile (F, NombArchExterno);

3. Apertura

Escritura: ReWrite(F),
Lectura: Reset(F);
Añadir: Append(F);

4. Lectura de Datos
Procedimiento: Read
Procedimiento: RedLn

5. Escritura de Datos
Procedimiento: Write
Procedimiento: WritLn

6. Delimitador de Dato
Retorno de Carro + Avance de línea
Eof(F)
Eoln(F)

7. Otras operaciones

FileExists: FileExists (NombArch);

4
Función de tipo lógica que devuelve True si el archivo existe o False en caso
contrario.

Las siguientes dos operaciones requieren que el archivo no este abierto, cerrándolo si es
necesario antes de llamar al procedimiento:

FileRename o Rename (F, cNuevoNombre); Renombra un Archivo.


FileDelete o Erase(F); Elimina un archivo.

Object TStringList
Métodos:
LoadFromFile: Lectura del texto de un archivo
SaveToFile: Escritura del texto en un archivo.

EJEMPLOS DE PROGRAMA CON MANEJO DE ARCHIVOS


1) Programa Abecedario

Elaborar un programa que guarde en el archivo abc.txt las letras del alfabeto. Siga los
siguientes pasos:
1. Haga clic en el comando New / Other… del menú File para crear un nuevo
Proyecto.
2. En el dialogo Nuevos Elementos New Items situese en la carpeta Other Files y
haga doble clic sobre el icono Text.
3. Digite el siguiente programa:
program pABC;
uses
SysUtils, Dialogs;

var
NomArch:String[30];
Fich: Text;
car:char;
begin
NomArch:=InputBox(‘Crear Archivo’,’Ruta y Nombre: ‘,’d:\ing. zabalaga\abc.txt’);
Assign(Fich,NomArch);
Rewrite(Fich);
writeln(Fich,’Abecedario’);
for car:=’A’ to ‘Z’ do
write(Fich,car,’ ‘);
Close(Fich)

5
end.
1. Sitúese en el menú File y haga clic en el comando Save As…
2. En el cuadro Nombre de Archivo digite: pABC.DPR donde la extensión debe ser
introducida explícitamente.
3. Luego debemos cerrar el archivo para que sea reconocido como un archivo de
proyecto seleccionando la opción Close All del menú File.
4. Vuelva a abrir el Proyecto haciendo clic en el menú File a través del comando
Open Project…
Al ejecutar el programa pulsando la tecla F9 se mostrara la siguiente ventana:

Ubique el archivo abc.txt en la carpeta ing. Zabalaga y haga doble clic sobre él para
revisar su contenido:

En lo que sigue, usaremos esta carpeta para almacenar nuestros archivos.

2) Programa Números Aleatorios


Elaborar un programa que guarde en el archivo random.txt diez números aleatorios.
Siga los siguientes pasos:
1. Haga clic en el comando New / Other… del menú File para crear un nuevo
Proyecto.
2. En el dialogo Nuevos Elementos New Items sitúese en la carpeta Other Files y
haga doble clic sobre el icono Text.
3. Digite el siguiente programa:
program pRand;
uses
dialogs, sysutils;

6
var
arch:text;
i:integer;
cad:string;

begin
showmessage('Uso de Rewrite');
assign(arch,'d:\ing. zabalaga\arhivos\random.txt');
rewrite(arch); //añade datos al archivo
randomize;

for i:=1 to 10 do
writeln(arch,trunc(10*random));

close(arch);
showmessage('Lectura del archivo mediante Reset');
cad:='';
assign(arch,'c:\ficheros\random.txt');
reset(arch);

while not eof(arch) do


begin
readln(arch,i);
cad:=cad+inttostr(i)+chr(13);
end;
cad := 'Información Encontrada'+chr(13)+cad;
showmessage(cad);
close(arch)

end.
1. Sitúese en el menú File y haga clic en el comando Save As…
2. En el cuadro Nombre de Archivo digite: pRand.DPR donde la extensión debe ser
introducida explícitamente.
3. Luego debemos cerrar el archivo para que sea reconocido como un archivo de
proyecto seleccionando la opción Close All del menú File.
4. Vuelva a abrir el Proyecto haciendo clic en el menú File a través del comando
Open Project…
Al ejecutar el programa pulsando la tecla F9 se mostrara la siguiente ventana:

7
Al presionar OK se generaran los numeros aleatorios en el archivo. Posteriomente
aparece el cuadro de dialogo:

Los datos del archivo son leidos y almacenados en la cadena cad, la cual finalmente se
muestra:

Ubique el archivo Random.txt en la carpeta d:\ing. zabalaga\archivos y haga doble


clic sobre él para revisar su contenido:

8
3) Programa Triangulo de Floyd
Elaborar un programa que guarde en el archivo floyd.txt los numeros correspondientes
al Triangulo de Loyd.
program Floyd;
uses
dialogs, sysutils;

var
sN,ruta:string;
n:integer;
arch:text;

procedure tFloyd(n:byte);
var
i,j,r:integer;
begin
writeln(arch,'El triángulo de Floyd para n = ',n,' es: ');
writeln(arch,' ');
r:=0;
for i:=1 to n do
begin
for j:=1 to i do
begin
r:=r+1;
write(arch,r:4,' ');
end;
writeln(arch);
end;
close(arch);
end;

9
begin
ruta:=inputbox('archivo','nombre=','d:\ing. zabalaga\archivos\floyd.txt');
assign(arch,ruta);
rewrite(arch);
sN:=inputbox('ingrese n','n = ','5');
n:=strtoint(sN);
tFloyd(n);
showmessage('Archivo Generado...')
end.

Al ejecutar el programa pulsando la tecla F9 se mostrara la siguiente ventana

Luego de digitar el nombre del archivo, ingresar el total de filas del triangulo:

Ubique el archivo floyd.txt en la carpeta d:\ing. zabalaga\archivos y haga doble clic


sobre él para revisar su contenido.

10
4) Programa Matriz
Elaborar un programa que grabe en el archivo matriz.txt los elementos de una matriz
rectangular así como su dimension.
program matriz;
uses
dialogs, sysutils;

var
val,NomArch:string;
m,n:byte;
arch:text;

procedure Matrix(m,n:byte);
var
i,j:byte;
r:real;
begin
writeln(arch,'Dimensión: ',m,'*',n);
showmessage('Ingrese la matriz'+inttostr(m)+'*'+inttostr(n));
for i:=1 to m do
begin
for j:=1 to n do
begin
val:=inputbox('fila'+inttostr(i),'a[' +inttostr(i)+','+inttostr(j)+']=','1.0');
r:=strtofloat(val);
write(arch,r:7:2,' ');
end;
writeln(arch);

11
end;
close(arch);
end;

begin
NomArch:=inputbox('archivo','nombre=','d:\ing. zabalaga\archivos\matriz.txt');
assign(arch,NomArch);
rewrite(arch);
val:=inputbox('matriz m*n','m=','1');
m:=strtoint(val);
val:=inputbox('matriz m*n','n=','1');
n:=strtoint(val);
Matrix(m,n);
showmessage('Matríz generada....')
end.

Al ejecutar el programa pulsando la tecla F9 se mostrara la siguiente ventana:

digite el nombre del archivo y haga clic en el botón OK. A continuación se le solicitara la
dimensión de la matriz rectangular a leer, introduciendo primero el total de filas y luego el
de columnas. Finalmente, debe ingresar cada elemento de la matriz.

12
, etc.

Ubique el archivo matriz.txt en la carpeta d:\ing. zabalaga\archivos y haga doble clic


sobre él para revisar su contenido.

5) Programa Generador de Aleatorios


Desarrollar una aplicación que guarde en el archivo rand.txt “n” números aleatorios.
Siga los siguientes pasos:
1. Proceda a crear una nueva aplicación.
2. En el formulario coloque: 2 etiquetas, 2 cuadros de edición, 2 botones
3. Modifique las propiedades de los componentes

13
Control Propiedad Valor
Form1 Caption Generador de n Números
Position poScreenCenter
Label1 Caption Nombre de archivo:
Label2 Caption Total de números:
Edit1 Text ‘‘
Edit2 Text ‘‘
Button1 Caption &Generar
Button2 Caption &Salir

Aspecto de la interfaz de usuario:

Asociemos un procedimiento al control button1 para el evento OnClick.


1. En el formulario, seleccionar el control button1, hacer doble clic…
2. Digitar el siguiente código:

procedure TForm1.spbGenClick(Sender: TObject);


var
f:textfile;
i,n:byte;
archivo:string;
begin
spbgen.Enabled:=false;
Archivo:=edtRuta.text;
n:=strtoint(msknum.text);
assignFile(f,Archivo);
rewrite(f);
randomize;
for i:=1 to n do
begin
writeln(f,inttostr(trunc(10*random)))

14
end;
closeFile(f);
ShowMessage('Archivo generado...');
end;

Hacer doble clic en el control SpeedButton2 y digitar el siguiente procedimiento en el


Editor de Código:
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
close
end;

Formularios que usan Archivos


Las siguientes instrucciones sólo son válidas para formularios, con componentes que
mantengan archivos de texto.
1. Declaración
Var

15
F: TextFile;

2. Asociación
AssignFile(F, NomArch);
3. Cerrar un archivo
CloseFile(F);

6) Programa Agenda Personal


Desarrollar una aplicación que guarde en el archivo agenda.txt los siguientes datos de
los compañeros de oficina:
Código, Nombres Completos, Dirección, Teléfono
Siga estos pasos:
1. Proceda a crear una nueva aplicación.
2. En el formulario coloque: 5 etiquetas, 4 cuadros de edición, 2 botones y dos
botones de figura.
3. Modifique las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Agenda
Position poScreenCenter
Label1 Caption Nombre de Archivo:
Label2 Caption Código:
Label3 Caption Nombres Completos:
Label4 Caption Dirección:
Label5 Caption Teléfono:
Edit1 Text “
Edit2 Text “
Edit3 Text “
Edit4 Text “
Button1 Caption &Registrar
Button2 Caption &Nuevo
Button3 Caption &Generar
Button4 Caption &Salir

Declaremos dos variables: F (Archivo de Texto) que almacenara cadenas de caracteres y


Ruta (cadena) que guardara la ruta, nombre y extensión del archivo, todo esto en la
sección:
Var

16
F: TextFile;
Ruta: string;

Aspecto de la interfaz de usuario:

En la sección Implementation digite el código del procedimiento SoloLectura:


implementation
{$R *.DFM}
procedure SoloLectura(Valor:Boolean);
begin
With Form1 do
begin
Edit1.ReadOnly:=Valor;
Edit2.ReadOnly:=Valor;
Edit3.ReadOnly:=Valor;
Edit4.ReadOnly:=Valor
end
end;
Asociemos un procedimiento al control BitBtn1 accionado por el evento Onclick. Este
procedimiento pide la ruta y el nombre para el archivo, luego abre el archivo para una
operación de escritura y finalmente, agrega los títulos del encabezado.

1. Haga doble clic en el control BitBtn1


2. En el controlador de evento que se abre en el editor de código, digite las
siguientes instrucciones:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Ruta:=InputBox('Archivo','Ruta y Nombre:','d:\ing. zabalaga\archivos\Agenda.txt');

17
AssignFile(F,Ruta);
Rewrite(F);
WriteLn(F,#9,#9,'Relación de Empleados');
WriteLn(F,'Código ',' Nombres Completos ',' Dirección ',' Teléfono');
CloseFile(F);
Edit1.SetFocus;
BitBtn1.Enabled:=False
end;
Asociemos un procedimiento al control Button1 accionado por el evento OnClick. Este
procedimiento copiara los datos actuales en pantalla al archivo, almacenándolos todos
en una sola línea además llama a la rutina SoloLectura para impedir hacer cambios en
los cuadros de edición. La instrucción Append añade datos a un archivo existente;
luego de usarla volvemos a cerrar el archivo.
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(F,Ruta);
Append(F);
Write(F,Edit1.Text,#9);
Write(F,Edit2.Text,#9);
Write(F,Edit3.Text,#9);
Writeln(F,Edit4.Text);
CloseFile(F);
ShowMessage('Registro Almacenado..');
Button1.Enabled:=False;
SoloLectura(True);
Button3.SetFocus
end;
Para salvar un nuevo registro haga doble clic en el control Button3 accionado por el
evento OnClick y luego digite lo siguiente:
procedure TForm1.Button3Click(Sender: TObject);
begin
SoloLectura(False);
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit1.SetFocus;
Button1.Enabled:=True;
BitBtn1.Enabled:=True
end;
Finalmente, digite el código para abandonar la aplicación en el evento OnClick del
control BitBtn2:
procedure TForm1.BitBtn2Click(Sender: TObject);
18
begin
Close
end;

El programa Agenda en ejecución.

II. ARCHIVOS CON TIPO


1. Declaración
Var
F: File of T;

Donde: T: Char, Integer, Real, TRegistro

Ejemplo:

Type
TFicha = Record
Nombre: String [25];
Edad: Byte;
Telefono: String [7];
End;

Var
ArchAgenda: File of TFicha;

2. Asociación
AssignFile (varArch, RutaNomArch);

Asigna el camino y nombre del archivo al identificador que representa el archivo.

3. Apertura del Archivo

19
a) Rewrite (varArch)
Crea un archivo y a continuación lo abre para escritura. Puede perder la información
actual.
b) Reset(varArch)
Se utiliza solo cuando un archivo ya existe, se puede establecer el modo de apertura
para solo leer, solo escribir o realizar ambas operaciones (predeterminado)
FileMode
Variable a la que se asignara uno de los siguientes valores mostrados en la tabla
antes de abrir el archivo con Reset

0 Para solo lectura


1 Para solo escritura
2 Para lectura y escritura

4. Escritura y Lectura de datos


Write(VarArch, ListaDatos)
Escribe uno o más datos en el archivo.

Read(VarArch, ListaDatos)
Lee uno o más datos del archivo

5. Comandos de uso frecuente

FilePos(VarArch)
Devuelve un numero “p” indicando la posición o valor actual del apuntador. 0≤p≤n-1

Seek(VarArch, Pos)
Ubica el puntero en una posición permitida para poder leer y escribir en cualquier
orden y no necesariamente de forma secuencial.

FileSize(VarArch)
Total de componentes o elementos del archivo (tamaño del archivo)

6. Cierre del archivo


CloseFile(VarArch);
Asegura la correcta escritura de toda la información en el archivo.

7. Otras operaciones

20
a) FileExists(cNomArch)
Devuelve true si el archivo especificado existe.

b) FileSearch(cNomArch, cListaDirectorios)
Función que retorna una cadena conteniendo el camino completo donde ha
encontrado el archivo, incluyendo el nombre de éste. Si no se encuentra el archivo
el valor obtenido será una cadena vacía.

c) Errores de Archivo
En la apertura o escritura de un archivo pueden generar fallos, los que constituyen
una excepción.

ElnOutError
Se produce cuando una operación de trabajo de archivos no se puede llevar a
cabo con éxito. Esta excepción contiene un campo llamado:

ErrorCode
Código de error generado por el Sistema Operativo que nos sirve para determinar
que ha ocurrido.

En 0 indica la ausencia de error.

d) Función GetLogicalDriveString(LongCad, Cadena)


Devuelve las letras de la unidad, separando c/u de ellas de la siguiente por un
carácter nulo, almacenándolos en el parámetro cadena.

e) DiskSize(Unidad)
Devuelve el tamaño total de una determinada unidad. Ver tabla para averiguar los
Valores de Unidad.

f) DiskFree(Unidad)
Retorna el espacio que queda libre. Unidad es un parámetro de tipo entero que
toma los valores:

0 Unidad actual
1 Unidad A
2 Unidad B

g) GetDriveType(cCaminoRaiz)
Devuelve el tipo de una determinada unidad. El valor de retorno será:

Constante Tipo de Unidad


DRIVE_FIXED Fija, como un disco duro
DRIVE_REMOVABLE Móvil, como un diskette

21
DRIVE_CDROM CD-ROM
DRIVE_REMOTE Remota, como una unidad de red.
DRIVE_RAMDISK Disco virtual o disco RAM

h) GetVolumeInformation
Recupera el nombre del volumen, el número de serie, sistema de archivos

Selección de la Unidad
Disponemos de los siguientes controladores:

a) Control TDriveComboBox
Se encuentra en la Pagina Win 3.1

Propiedades Comentario
Items Elementos existentes en la lista
ItemIndex Elemento seleccionado actual
TexCase Estado en que aparecerá la letra y nombre de
la Unidad
TCLowerCase: Predeterminado Minúsculas
TCUpperCase: Mayúsculas
Drive Contiene la letra de la unidad seleccionada
DirList Asocia una lista de unidades con una lista de
directorios

Eventos:
OnChange Se genera cada vez que el usuario modifique la selección actual
Componente SaveDialog
Muestra una ventana de dialogo modal para seleccionar los nombres de los archivos y
grabarlos. El diálogo no aparece en tiempo de ejecución hasta que éste es activado
mediante una llamada al método Execute. Cuando el usuario presiona el botón Guardar,
el dialogo se cierra y el archivo seleccionado es almacenado en la propiedad FileName.
Componente OpenDialog
Muestra una ventana de dialogo para seleccionar y abrir archivos. El dialogo no aparece
en tiempo de ejecución hasta que éste es activado mediante una llamada al método
Execute. Cuando el usuario hace clic en el botón Abrir, el dialogo se cierra y el archivo o
archivos seleccionados son almacenados en la propiedad Files.

EJEMPLOS DE PROGRAMAS CON ARCHIVOS CON TIPO


1) Ingreso de Libros

22
Desarrollar una aplicación que guarde en el archivo Invent.dat la información
correspondiente a los libros de una biblioteca. Para cada obra se debe reunir la siguiente
información:
Código, Titulo, Autor, Editorial, Numero de ejemplares, Precio
Siga los siguientes pasos:
1. Proceda a crear una nueva aplicación
2. En el formulario coloque 6 etiquetas, 6 cuadros de edición y 4 botones
3. Modifique las propiedades de los componentes.

Control Propiedad Valor


Form1 Caption Ingreso de Libros
Position poScreenCenter
Label1 Caption Código:
Label2 Caption Titulo:
Label3 Caption Autor:
Label4 Caption Editora:
Label5 Caption #Ejemplares:
Label6 Caption Precio:
Edit1 Text ‘‘
Edit2 Text ‘‘
Edit3 Text ‘‘
Edit4 Text ‘‘
Edit5 Text ‘‘
Edit6 Text ‘‘
Button1 Caption &Crear
Button2 Caption &Grabar
Enabled False
Button3 Caption &Nuevo
Enabled False
Button4 Caption &Salir

A continuación diríjase a la Ficha Dialogs de la Paleta de Componentes e inserte el


control SaveDialog el que nos permitirá personalizar la ventana Guardar Como,
observe que no es visible en tiempo de ejecución, de modo que el aspecto de la interfaz
de usuario será el siguiente:

23
En la sección Type declare el TLibro con los campos indicados:

Type
Tlibro = record
Cod:string[6];
Tit:string[20];
Aut:string[30];
Edi:string[20];
Nej:byte;
Pre:real;
end;

Declaremos dos variables: Fich(archivo binario) cuyos componentes serán del tipo
TLibro y Lib para almacenar los datos de un libro en particular en la sección:

Var
Lib:TLibro;
Fich:File of TLibro;

Asociemos un procedimiento al control Button1 accionado por el evento OnClick. Este


procedimiento pide la ruta y el nombre para el fichero luego abre el archivo para una
operación d escritura y finalmente habilita el botón Grabar.

1. Haga doble clic en el control Button1


2. En el código haremos referencia a las propiedades del componente SaveDialog
para filtrar los archivos a visualizar, establecer el directorio inicial, la extensión
predeterminada y capturar el nombre del archivo.
procedure TForm1.Button1Click(Sender: TObject);
Var
NomArch:string;

24
begin
SaveDialog1.Filter:='Archivos de Datos(*.dat)|*.dat|Todos'+
'los archivos(*.*)|*.*';
SaveDialog1.FilterIndex:=1;
Savedialog1.InitialDir:='D:\ing. zabalaga\archivos\Ingreso libros';
SaveDialog1.DefaultExt:='*.dat';
If SaveDialog1.Execute then
begin
NomArch:=SaveDialog1.FileName;
AssignFile(Fich,NomArch);
Rewrite(Fich);
Button3.Enabled:=False;
Button2.Enabled:=True;
Edit1.SetFocus;
end;
end;

Asociemos un procedimiento al control Button2 accionado por el evento OnClick.


Este procedimiento copiara los datos actuales en pantalla el registro Lib, como un medio
de almacenamiento temporal, enseguida con el procedimiento Write se escribe en el
archivo el componente Lib.

procedure TForm1.Button2Click(Sender: TObject);


begin
with Lib do
begin
Cod:=Edit1.Text;
Tit:=Edit2.Text;
Aut:=Edit3.Text;
Edi:=Edit4.Text;
Nej:=StrToInt(Edit5.Text);
Pre:=StrToFloat(Edit6.Text);
end;
Write(Fich,Lib);
Button2.Enabled:=False;
Button3.Enabled:=True;
Button3.SetFocus;
ShowMessage('Informacion procesada');
end;

Haga doble clic sobre el control Button3 y digite lo siguiente:

procedure TForm1.Button3Click(Sender: TObject);


begin
Edit1.Text:='';
Edit2.Text:='';
25
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
Edit6.Text:='';
Edit1.SetFocus;
Button2.Enabled:=True;
Button3.Enabled:=False;
end;

Por último, el código para el control Button4 sería:

procedure TForm1.Button4Click(Sender: TObject);


begin
If FileExists(NomArch) then
CloseFile(Fich);
Close;
end;

La función FileExits averigua si el archivo se encuentra almacenado en algún lugar del


disco; de ser así cierra el archivo previamente, sino sólo cierra la aplicación:

Programa ejecutándose:

2) Lectura de Libros

Desarrollar una aplicación que lea del archivo Invent.dat la información concerniente a
los libros de una biblioteca. Para cada obra se debe mostrar la siguiente información:

Código; Título; Autor; Editorial; Número de Ejemplares; Precio

26
Par revisar la información de un archivo binario tendremos que diseñar otra aplicación,
pues al usar un editor para abrir el archivo en cuestión, el contenido se muestra ilegible
casi en su totalidad.

Siga estos pasos:


1. Crear una aplicación con formulario
2. En el formulario coloque los siguientes componentes: 6 etiquetas, 6 Cuadros de
Edición, 1 control Panel, 2 Controles SpeedButton y 1 Botón de Figura.
3. Modificar las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Lectura de Libros
Position poScreenCenter
Label1 Caption Código:
Label2 Caption Titulo:
Label3 Caption Autor:
Label4 Caption Editora:
Label5 Caption #Ejemplares:
Label6 Caption Precio:
Edit1 Text ‘‘
Edit2 Text ‘‘
Edit3 Text ‘‘
Edit4 Text ‘‘
Edit5 Text ‘‘
Edit6 Text ‘‘
Panel1 Caption ‘‘
SpeedButton1 Caption <
SpeedButton2 Caption >
Button1 Caption &Salir
Kind bkClose

Al realizar el diseño superponga los controles SpeedButton al control Panel1.


Aspecto inicial de la ficha:

27
Inserte también desde la Paleta Dialogs un control OpenDialog para modificar las
propiedades de la ventana de diálogo Abrir. En la sección type declare el tipo TLibro
con los campos indicados, los cuales deben coincidir al menos en tipo y ancho con los
del ejemplo anterior.
type
TLibro=Record
cod:string[4];
tit:string[20];
aut:string[30];
edi:string[20];
nej:byte;
pre:real
end;

Declaremos dos variables: Fich(Archivo binario) cuyos componentes serán del tipo
TLibro y Lib para recuperar los datos de un libro en particular en la sección
var
frmLectura: TfrmLectura;
lib:TLibro;
fich:file of TLibro;

En la sección Implementation digite el código del procedimiento Actualiza, para mostrar


los datos a los que señala el puntero del archivo.

implementation

{$R *.DFM}
procedure TfrmLectura.Actualiza;

28
begin
If not eof(Fich) Then
Begin
read(fich,lib);
seek(fich,filepos(fich)-1);
with lib do
begin
edit1.text:=cod;
edit2.text:=aut;
edit3.text:=tit;
edit4.text:=edi;
edit5.text:=IntToStr(nej);
edit6.text:=FloatToStr(pre)
end;
panel1.Caption:='Registro '+IntToStr(filepos(fich)+1)+' de '+IntToStr(filesize(fich))
end
end;

Al crearse la ficha haremos que se muestre la ventana Abrir para seleccionar el nombre
del archivo de datos a visualizar. Haga doble clic sobre un lugar libre del formulario, se
desplegara la ventana de código para el evento OnCreate, digite lo siguiente:

procedure TForm1.FormCreate(Sender: TObject);


begin
Opendialog1.Filter:='Archivos de Datos(*.dat)|*.dat|Todos'+
'los archivos(*.*)|*.*';
OpenDialog1.FilterIndex:=2;
OpenDialog1.InitialDir:='D:\ing. zabalaga\archivos\Ingreso libros';
OpenDialog1.DefaultExt:='*.dat';
if OpenDialog1.Execute then
begin
NomArch:=Opendialog1.FileName;
AssignFile(Fich,NomArch);
Reset(fich);
Actualiza;
end;
end;

Para desplazarse una posición a la derecha (avanzar un registro) haremos clic en el


control SpeedButton2. Debemos averiguar la posición actual del puntero del archivo,
luego si no hemos alcanzado el fin de archivo avanzaremos a una posición, en caso
contrario el control quedará no accesible. Asociemos un procedimiento al control
SpeedButton2 accionado por el evento OnClick.

procedure TForm1.SpeedButton2Click(Sender: TObject);


begin
if FilePos(Fich)<(FileSize(fich)-1) then
29
begin
Seek(Fich,filePos(fich)+1);
Actualiza;
SpeedButton1.enabled:=true;
end
else
begin
speedButton2.Enabled:=false;
SpeedButton1.Enabled:=true;
end
end;

Análogamente, asociemos un procedimiento al control SpeedButton1 accionado por el


evento Onclick.

procedure TForm1.SpeedButton1Click(Sender: TObject);


begin
if FilePos(fich)>0 then
begin
seek(fich,FilePos(Fich)-1);
Actualiza;
SpeedButton2.Enabled:=true;
end
else
begin
SpeedButton1.Enabled:=False;
SpeedButton2.enabled:=true;
end
end;

Asociemos un procedimiento al control Salir. Cuando el usuario haga clic en este botón,
la ejecución del programa debe finalizar.

procedure TForm1.SalirClick(Sender: TObject);


begin
closeFile(Fich);
Close;
end;

Programa ejecutándose:

30
La paleta Dialogs, contiene los componentes OpenDialog y SaveDialog entre otros.

3) Impresión

Desarrollar una aplicación para imprimir mapas de bits. Utilizar el componente


TabControl para permitir al usuario examinar una serie de mapas de bits.

En el formulario colocar 1 componente OpenDialog, 1 componente MainMenu, 1


TabControl y sobre este 1 componente Image. Luego Modificar las propiedades de los
componentes:

Control Propiedad Valor


Form1 Caption Imprimir Bitmap
TabControl Tabs Ruta

Haga doble clic sobre el componente MainMenu y diseñe un menú de acuerdo a la


siguiente tabla:
Caption Caption
Archivo Ayuda
Abrir… Acerca…
Imprimir
-
Salir

31
El comando Abrir mostrara un dialogo Abrir para seleccionar un archivo bitmap:

procedure TForm1.Abrir1Click(Sender: TObject);


begin
if OpenDialog1.Execute then
begin
TabControl1.Tabs := OpenDialog1.Files;
TabControl1.TabIndex := 0;
TabControl1Change (TabControl1);
Imprimir1.Enabled := True;
end;
end;

El siguiente evento carga al archivo bitmap al componente TabControl.

procedure TForm1.TabControl1Change(Sender: TObject);


begin
Image1.Picture.LoadFromFile (
TabControl1.Tabs [TabControl1.TabIndex]);
end;

El comando Acerca mostrara una ventana de información MessageDlg

procedure TForm1.Acerca1Click(Sender: TObject);


begin
MessageDlg ('Visor de Bitmaps con Tabs',
mtInformation, [mbOk], 0);
end;

32
Para acceder al Cuadro de Dialogo de vista previa haremos clic en el comando
Archivo/Imprimir de la aplicación.

Se mostrara un formulario en vista previa con una barra de herramientas con 4 botones y
1 componente ScrollBox que contiene un componente Image.

Primero se verifica si se ha seleccionado una imagen, de ser así se define una escala
predeterminada para el formulario, inicia la vista previa y aparece como un formulario
modal:

Usando los botones de cambio de tamaño para redimensionar la imagen seleccionada

procedure TForm1.Imprimir1Click(Sender: TObject);


begin
{comprueba dos veces si hay una imagen seleccionada}
if Image1.Picture.Graphic <> nil then
begin
{define una escala predeterminada
e inicia la vista previa}
FichaPreli.Escala:= 2;
FichaPreli.ConfigPag;
FichaPreli.DibujarVista;
FichaPreli.ShowModal;

33
end;
end;

En el método ConfigPag se define el tamaño del componente Image del formulario,


empleando el tamaño del pagina impresa. El tamaño de la pagina se divide entre cinco
para ajustarla a un área razonable de la pantalla.

procedure TFichaPreli.ConfigPag;
begin
{fija el tamaño de la imagen a ser
proporcional con el tamaño de página}
Image1.Width := Printer.PageWidth div 5;
Image1.Height := Printer.PageHeight div 5;
{Da salida a la Escala para la barra de herramientas}
Label1.Caption := IntToStr (Escala);
end;

El método DibujarVista calcula el rectángulo de destino dejando un margen de 10


pixels, escalando la imagen y empleando un factor fijo de zoom de 5. Luego borra la
imagen antigua que todavía esta en la pantalla, dibujando un rectángulo blanco encima
de ella. El método StrtchDraw utiliza el rectángulo calculado antes de la imagen actual
del componente Image.

procedure TFichaPreli.DibujarVista;
var
Rect: TRect;
begin
{calcula el rectangulo para la vista previa del bitmap}
Rect.Top := 10;
Rect.Left := 10;
Rect.Right := 10 +
(Form1.Image1.Picture.Graphic.Width * Escala) div 5;
Rect.Bottom := 10 +
(Form1.Image1.Picture.Graphic.Height * Escala) div 5;

{elimina la imagen actual}


Image1.Canvas.Pen.Mode := pmWhite;
Image1.Canvas.Rectangle (0, 0, Image1.Width, Image1.Height);

{ajusta el bitmap al rectangulo}


Image1.Canvas.StretchDraw (Rect,
Form1.Image1.Picture.Graphic);
end;

Los métodos de cambio de tamaño solamente definen la nueva escala de valores y


llaman al procedimiento DibujarVista para actualizar la imagen.

34
procedure TFichaPreli.BotonEscalarMasClick(Sender: TObject);
begin
{incrementa el tamaño del bitmap}
Escala := Escala * 2;
Label1.Caption := IntToStr (Escala);
DibujarVista
end;

procedure TFichaPreli.BotonEscalarMenosClick(Sender: TObject);


begin
{decrementa el tamaño de la imagen}
if Escala > 1 then
begin
Escala := Escala div 2;
Label1.Caption := IntToStr (Escala);
DibujarVista;
end;
end;

En el evento BotonImprimirClick el rectángulo de destino no se amplia y el mapa de


bits se envía a la impresora en un nuevo documento ( una pagina nueva).

procedure TFichaPreli.BotonImprimirClick(Sender: TObject);


var
Rect: TRect;
begin
{calcula el ractangulo para la impresora}
Rect.Top := 10;
Rect.Left := 10;
Rect.Right := 10 +
(Form1.Image1.Picture.Graphic.Width * Escala);
Rect.Bottom := 10 +
(Form1.Image1.Picture.Graphic.Height * Escala);
{imprime el bitmap}
Printer.BeginDoc;
try
Printer.Canvas.StretchDraw (Rect,
Form1.Image1.Picture.Graphic);
Printer.EndDoc;
except
Printer.Abort;
raise;
end;
end;

35
4) Una Ventana de Navegación

Desarrollar una aplicación que permita revisar los datos de la tabla Cliente contenida en
la base de datos DBDEMOS.

Siga estos pasos:


1. Crear una nueva aplicación con formulario
2. En el formulario colocar los siguientes componentes: 1 Control DataSource. Este
componente se encuentra en la pestaña Data Access.
3. Colocar ahora un control Table. Lo ubicará en la pagina BDE.
4. Para poder revisar el contenido de la tabla de una manera rápida seleccione el
componente DBGrid, lo encontrara en la pestaña DataControls.
5. Añada además un control BitBtn1.

Aspecto de la interfaz de usuario.

36
6. Modifique las propiedades de los componentes:

Control Propiedad Valor


Form1 Caption Visor de Tablas
DataSource DataSet Table1
Table1 DataBaseName DBDEMOS
TableName Clients.dbf
Active True
DBGrid1 Align AlNone
DataSource DataSource1
BitBtn1 Caption &Cerrar
Kind bkClose

Usamos la propiedad DataSet para asociar el objeto Table1 al control DataSource1. En


el objeto Table1 debemos especificar el nombre de la base de datos (DataBaseName) y
la tabla que va a ser abierta (TableName). La propiedad Datasource la utilizamos para
enlazar el objeto DataSource1 con el control DBGrid. Si la propiedad Active del objeto
Table1 esta en True en la rejilla se mostraran inmediatamente los datos de la tabla.
Luego se tendrá la siguiente pantalla:

37
Para facilitar la navegación por los datos que hemos seleccionado, lo único que tenemos
que hacer es insertar un control TDBNavigator¸ que se encuentra en la pagina
DataControls. La propiedad mas relevante de este control es DataSource que nos
servirá para conectarnos a los datos de la tabla a través del objeto DataSource1.
Realice los siguientes cambios:

Objeto Propiedad Valor


DBNavigator DataSource DataSource1
Align alTop

El control DBNavigator solo permite la navegación por los datos durante la ejecución. Al
interactuar con este control podremos movernos de un registro a otro, borrar una fila,
añadir una nueva fila; es decir, la mayoría de las operaciones que están permitidas en
una tabla con tan solo una pulsación.

38
Desde la pestaña Standard vamos a seleccionar el componente MainMenu y además
agregaremos un cuadro AbriFicheros (OpenDialog) que se encuentra en la pagina
Dialogs de la paleta de componentes. Al menú principal llamaremos Archivo, y dentro
de el ubicaremos dos submenús llamados Abrir y Salir.

39
En la propiedad Filter del cuadro de dialogo digite los siguientes filtros:
Nombre del Filtro Filtro
Bases de datos(*.db, *.dbf) *.db, *.dbf
Todos los archivos(*.*) *.*

El resto de las propiedades se dejaran como están con el fin de que mejore el cuadro de
dialogo a su libre decisión.

En el evento OnClick de la opción Abrir se utilizaran dos funciones muy útiles que son
ExtractFilePath y ExtractFileName. La primera devuelve la ruta sin el nombre del
archivo, y la segunda retorna el nombre del archivo. Debemos tener en cuenta que la
propiedad FileName del cuadro de dialogo (OpenDialog1) contiene la ruta completa del
archivo seleccionado, por ejemplo: c:\Enero\prueba.db.

Aquí debajo esta el código fuente del ejemplo para darle un vistazo:

Procedure TForm1.Abrir1Click(Sender: TObject);


begin
//Si el usuario selecciono un archive
If OpenDialog1.Execute then
begin //e hizo clic en el botón Open
//Cerramos cualquier tabla activa

40
Table1.Close:
// Almacena la ruta donde esta almacenada una base de datos
Table1.TableName := ExtractFilePath (OpenDialog1.Filename);
// Retorna el nombre de la base de datos seleccionada
Table1.TableName := ExtractFileName(OpenDialog1.FileName);
// Activa la table
Table1.Active := True
end;
//En caso que cancele no efectúa nada
end;

procedure TForm1.Salir1Click(Sender: TObject);


begin
Close
end;

procedure TForm1.FormCloseClick(Sender: TObject; var Action:TCloseAction);


begin
Table1.Active := False
end;

Finalmente, la interfaz debe tener el aspecto siguiente: (NO HAY PROGRAMA)

Al hacer clic en el comando Abrir del menú Archivo emergerá el dialogo Abir. Luego
bastara seleccionar un archivo de Base de Datos de la carpeta Data y hace clic en el
botón Abrir para pasar a revisar su contenido.

Las categorías DataControls (la cual contiene a los componentes DBGrid y


DBNavigator) y BDE que sirve para modificar las propiedades de Table.

5) Una Rejilla de Base de Datos


Desarrollar una aplicación que permita listar las estadísticas de los países que se
encuentran en la tabla Country contenida en la base de datos DBDEMOS.

Siga estos pasos:

1. Crear una nueva aplicación con formulario


2. En el formulario colocar los siguientes componentes: 1 Control DataSource. Este
componente se encuentra en la pestaña Data Access.
3. Colocar ahora un control Table. Lo ubicará en la pagina BDE.
4. Para poder revisar el contenido de la tabla de una manera rápida seleccione el
componente DBGrid, lo encontrara en la pestaña DataControls.

41
5. Modifique las propiedades de los componentes.

Control Propiedad Valor


Form1 Caption Rejilla Demo
DataSource DataSet Table1
Table1 DataBaseName DBDEMOS
TableName Country.dbf
Active True
DBGrid1 Align AlClient
DataSource DataSource1

Observe que establecimos la propiedad Active de la tabla a True e inmediatamente los


registros aparecen en la tabla. A esta técnica se le llama Diseño de datos vivos.

En este punto ya podemos ejecutar el programa y editar los datos de la tabla aplicando
cambios permanentes. Esto es posible porque la propiedad Options del componente
DBGrid incluye el indicador dgEditing y la propiedad ReadOnly esta definida a False.

Veamos el aspecto de la interfaz de usuario: (NO HAY PROGRAMA)

En la imagen se observa que el DBGrid ha sido personalizado. Ubique la propiedad


Columns, presione su botón asociado y configure los siguientes campos:

Campo Propiedad Valor


Name Title>Caption País
Color clButtonShadow
Font>Color clWhite
Font>Style>fsBold True
Continent PickList Africa
Asia
Australia
Europa
North America
South America
Font>Style>fsItalic True

Ahora digitaremos código para indicar el estado del componente Table en ejecución.
Seleccionemos el componente DataSource y ubiquemos su evento OnStateChange en
la pagina Envents. Ingrese las siguientes instrucciones:

Procedure TForm1.DataSource1StateChange(Sender:TObject);
var
Titulo:String;
begin

42
Case Table1.State of
dsBrowse: Titulo:= ‘Examinar’;
dsEdit: Titulo := ‘Editar’;
dsInsert: Titulo := ‘Insertar’; // para insertar presione Ins
else // para borrar presione Control + Supr
Titulo := ‘Otro Estado’;
end;
Caption := ‘Rejilla Demo –‘ + Titulo;
end;

Programa ejecutándose: (NO HAY PROGRAMA)

6) Controlador de Fechas con Componente Grafico

Desarrollar una aplicación que permita visualizar fecha e imágenes de eventos olímpicos
los cuales están almacenados en la tabla Events contenida en la base de datos
DBDEMOS

Siga estos pasos:


1. Crear una nueva aplicación con formulario
2. En el formulario colocar los siguientes componentes: 1 Control DataSource. Este
componente se encuentra en la pestaña Data Access.
3. Colocar ahora un control Table. Lo ubicará en la pagina BDE.
4. Para poder revisar el contenido de la tabla de una manera rápida seleccione el
componente DBGrid, lo encontrara en la pestaña DataControls.
5. Agregue además los siguientes componentes: Label, DBEdit, DBGrid, DBImage;
DBNavogator y un control MonthCalendar
6. Modifique las propiedades de los componentes.

Control Propiedad Valor


Form1 Caption DbFechas
DataSource DataSet Table1
Table1 DataBaseName DBDEMOS
TableName Events.dbf
Active True
DBGrid1 Align AlNone
DataSource DataSource1
Label2 DataSource DataSource1
DataField Event_Photop
DBEdit2 DataSource DataSource1
DataField Events
DBImage1 DataSource DataSource1
DataField Event_Photop

43
Stretch True
DBNavigator DataSource DataSource1
MonthCalendar1 ShowToday False

Escribiremos código para conectar el control MonthCalendar al campo correspondiente.


Seleccione el control DataSource y controle los siguientes dos eventos.

Procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);


begin
MonthCalendar1.Date := Table1Event_Date.Value;
end;

Procedure TForm1.DataSource1UpdateData(Sender: TObject);


begin
Table1Event_DateValue := MonthCalendar1.Date;
end;

Además de copiar los datos a uno y otro, con el código anterior, el programa tiene que
poner la tabla en modo edición cuando el usuario haga clic en el calendario. Ahora, haga
doble clic sobre el calendario y digite las instrucciones para su evento OnClick.

Procedure TForm1. MonthCalendar1Click(Sender: TObject);


begin
//Desconecta el controlador
DataSource1.OnDataChange := nil;
//Establece la table en modo edición
Table1.Edit;
//conecta de nuevo el controlador
DataSource1.OnDateChange := DataSource1DataChange
end;

Con la primera instrucción desconectamos temporalmente el controlador para evitar


reiniciar la selección del calendario. El primer clic del usuario no debe cambiar la
selección. Con la siguiente instrucción fijamos la tabla en modo edición y luego pasamos
a reconectar el controlador.

Proceda a ejecutar la aplicación: (NO HAY PROGRAMA)

Para navegar por los registros de la tabla puede utilizar indistintamente o los botones de
desplazamiento del control DBNavigator o hacer clic sobre alguna fila de la rejilla o
cuadricula. En la imagen, si presionamos el botón – se eliminara el registro actual ( el
que indique el puntero), para evitar perdidas inesperadas emergerá antes una ventana
de Confirmación para verificar si realmente deseamos eliminar la fila actual.

44

Das könnte Ihnen auch gefallen