Vous êtes sur la page 1sur 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 travs del teclado durante la ejecucin del programa.
Con este mtodo si se quieren los mismos datos en otra aplicacin se deben volver a
ingresar. Este mtodo no es deseable cuando se necesitan grandes cantidades de datos.
Por ejemplo, requerira mucho tiempo para una empresa grande, volver a escribir los
datos de sus empleados cada vez que un programa deba usar este informacin para una
aplicacin 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 informacin 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 coleccin de datos relacionados, normalmente almacenados en disco
y referenciados por un nombre simple.
Un archivo es una coleccin de datos del mismo tipo que con un ttulo o nombre se
almacenan o graban en dispositivos externos al computador tales como: Discos,
diskettes, cintas magnticas, etc.
Se suele usar el termino Archivo externo para referirnos a un archivo almacenado
permanentemente, separado de la ejecucin del programa.

CLASIFICACION
1) Archivo de texto: Es un archivo de caracteres que esta tambin divido en lneas.
2) Archivo Binario: Es un archivo que se crea dentro de un programa para ser ledo por
otro programa o por el mismo programa mas adelante; estos archivos se escriben en la
representacin interna de la maquina.
Los datos de un archivo pueden ser ledos 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
bsicas para usar un archivo son:
1) Declaracin del manipulador interno del archivo, dndole un nombre y otras
especificaciones.
2) Asignacin 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 (segn la apertura)
5) Cierre del archivo.

I. ARCHIVOS DE TEXTO
Un archivo de texto es una secuencia de caracteres imprimibles (cdigo ASCII) que
fluyen entre el programa y un dispositivo o el disco.
A dems de los caracteres ordinarios, en un archivo de texto se pueden escribir
caracteres de fin o cambio de lnea [Eoln end of line] constituidos por un Retorno de
Carro (CR) y un Avance de Lnea (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) Declaracin 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) Asignacin 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 omisin.
2

3) Abrir un archivo para Lectura


Formato
Reset(VarArchivo);
Para leer informacin de un archivo desde un programa, utilice una instruccin Assign y
una instruccin Reset.
Ejemplo:

Assign(archA, arch1.txt);
Reset (archA);

4) Abrir un archivo para Escritura


Utilizar la instruccin ReWrite para ubicar el puntero al principio del archivo. Tener
cuidado, pues, si el archivo ya existe se borrar su contenido.
5) Aadir datos a un archivo
Usar Append para aadir 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 lnea 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 informacin en un archivo utilice la instruccin
Close para cerrar el archivo.
Formato
Close(VarArchivo);

Resumen Archivos de Texto


1. Declaracion
Var
Fich: File of Char,
Arch: Text;
2. Asociacin
Sintaxis
AssignFile (F, NombArchExterno);
3. Apertura
Escritura:
Lectura:
Aadir:

ReWrite(F),
Reset(F);
Append(F);

4. Lectura de Datos
Procedimiento:
Procedimiento:

Read
RedLn

5. Escritura de Datos
Procedimiento:
Procedimiento:

Write
WritLn

6. Delimitador de Dato
Retorno de Carro + Avance de lnea
Eof(F)
Eoln(F)
7. Otras operaciones
FileExists: FileExists (NombArch);
4

Funcin de tipo lgica que devuelve True si el archivo existe o False en caso
contrario.
Las siguientes dos operaciones requieren que el archivo no este abierto, cerrndolo si es
necesario antes de llamar al procedimiento:
FileRename o Rename (F, cNuevoNombre);
FileDelete o Erase(F);

Renombra un Archivo.
Elimina un archivo.

Object TStringList
Mtodos:
LoadFromFile:
SaveToFile:

Lectura del texto de un archivo


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)
end.
5

1. Sitese en el men File y haga clic en el comando Save As


2. En el cuadro Nombre de Archivo digite: pABC.DPR donde la extensin debe ser
introducida explcitamente.
3. Luego debemos cerrar el archivo para que sea reconocido como un archivo de
proyecto seleccionando la opcin Close All del men File.
4. Vuelva a abrir el Proyecto haciendo clic en el men File a travs 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 Nmeros Aleatorios


Elaborar un programa que guarde en el archivo random.txt diez nmeros 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 sitese en la carpeta Other Files y
haga doble clic sobre el icono Text.
3. Digite el siguiente programa:
program pRand;
uses
dialogs, sysutils;
var
6

arch:text;
i:integer;
cad:string;
begin
showmessage('Uso de Rewrite');
assign(arch,'d:\ing. zabalaga\arhivos\random.txt');
rewrite(arch); //aade 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 := 'Informacin Encontrada'+chr(13)+cad;
showmessage(cad);
close(arch)
end.
1. Sitese en el men File y haga clic en el comando Save As
2. En el cuadro Nombre de Archivo digite: pRand.DPR donde la extensin debe ser
introducida explcitamente.
3. Luego debemos cerrar el archivo para que sea reconocido como un archivo de
proyecto seleccionando la opcin Close All del men File.
4. Vuelva a abrir el Proyecto haciendo clic en el men File a travs del comando
Open Project
Al ejecutar el programa pulsando la tecla F9 se mostrara la siguiente ventana:

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:

3) Programa Triangulo de Floyd


8

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 tringulo 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;
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,'Dimensin: ',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);
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('Matrz generada....')
end.

11

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

digite el nombre del archivo y haga clic en el botn OK. A continuacin se le solicitara la
dimensin 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.

, etc.

12

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 aplicacin que guarde en el archivo rand.txt n nmeros aleatorios.
Siga los siguientes pasos:
1. Proceda a crear una nueva aplicacin.
2. En el formulario coloque: 2 etiquetas, 2 cuadros de edicin, 2 botones
3. Modifique las propiedades de los componentes
Control
Form1
Label1
Label2
Edit1
Edit2
Button1

Propiedad
Caption
Position
Caption
Caption
Text
Text
Caption

Valor
Generador de n Nmeros
poScreenCenter
Nombre de archivo:
Total de nmeros:

&Generar

Button2

Caption

&Salir

Aspecto de la interfaz de usuario:

13

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 cdigo:
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)))
end;
closeFile(f);
ShowMessage('Archivo generado...');
end;
Hacer doble clic en el control SpeedButton2 y digitar el siguiente procedimiento en el
Editor de Cdigo:
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
close
end;
14

Formularios que usan Archivos


Las siguientes instrucciones slo son vlidas para formularios, con componentes que
mantengan archivos de texto.
1. Declaracin
Var
F: TextFile;

2. Asociacin
AssignFile(F, NomArch);
3. Cerrar un archivo
CloseFile(F);

6) Programa Agenda Personal


Desarrollar una aplicacin que guarde en el archivo agenda.txt los siguientes datos de
los compaeros de oficina:
15

Cdigo, Nombres Completos, Direccin, Telfono


Siga estos pasos:
1. Proceda a crear una nueva aplicacin.
2. En el formulario coloque: 5 etiquetas, 4 cuadros de edicin, 2 botones y dos
botones de figura.
3. Modifique las propiedades de los componentes:
Control
Form1
Label1
Label2
Label3
Label4
Label5
Edit1
Edit2
Edit3
Edit4
Button1
Button2
Button3
Button4

Propiedad
Caption
Position
Caption
Caption
Caption
Caption
Caption
Text
Text
Text
Text
Caption
Caption
Caption
Caption

Valor
Agenda
poScreenCenter
Nombre de Archivo:
Cdigo:
Nombres Completos:
Direccin:
Telfono:

&Registrar
&Nuevo
&Generar
&Salir

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


Ruta (cadena) que guardara la ruta, nombre y extensin del archivo, todo esto en la
seccin:
Var
F: TextFile;
Ruta: string;

Aspecto de la interfaz de usuario:

16

En la seccin Implementation digite el cdigo 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
operacin de escritura y finalmente, agrega los ttulos del encabezado.
1. Haga doble clic en el control BitBtn1
2. En el controlador de evento que se abre en el editor de cdigo, digite las
siguientes instrucciones:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Ruta:=InputBox('Archivo','Ruta y Nombre:','d:\ing. zabalaga\archivos\Agenda.txt');
AssignFile(F,Ruta);
Rewrite(F);
WriteLn(F,#9,#9,'Relacin de Empleados');
WriteLn(F,'Cdigo ',' Nombres Completos ',' Direccin ',' Telfono');
CloseFile(F);
Edit1.SetFocus;
17

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, almacenndolos todos
en una sola lnea adems llama a la rutina SoloLectura para impedir hacer cambios en
los cuadros de edicin. La instruccin Append aade 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 cdigo para abandonar la aplicacin en el evento OnClick del
control BitBtn2:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Close
end;

18

El programa Agenda en ejecucin.

II. ARCHIVOS CON TIPO


1. Declaracin
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. Asociacin
AssignFile (varArch, RutaNomArch);
Asigna el camino y nombre del archivo al identificador que representa el archivo.
3. Apertura del Archivo
a) Rewrite (varArch)
Crea un archivo y a continuacin lo abre para escritura. Puede perder la informacin
actual.
19

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
1
2

Para solo lectura


Para solo escritura
Para lectura y escritura

4. Escritura y Lectura de datos


Write(VarArch, ListaDatos)
Escribe uno o ms datos en el archivo.

Read(VarArch, ListaDatos)
Lee uno o ms datos del archivo
5. Comandos de uso frecuente
FilePos(VarArch)
Devuelve un numero p indicando la posicin o valor actual del apuntador. 0pn-1
Seek(VarArch, Pos)
Ubica el puntero en una posicin permitida para poder leer y escribir en cualquier
orden y no necesariamente de forma secuencial.
FileSize(VarArch)
Total de componentes o elementos del archivo (tamao del archivo)
6. Cierre del archivo
CloseFile(VarArch);
Asegura la correcta escritura de toda la informacin en el archivo.
7. Otras operaciones
a) FileExists(cNomArch)
Devuelve true si el archivo especificado existe.
b) FileSearch(cNomArch, cListaDirectorios)
20

Funcin 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 vaca.
c) Errores de Archivo
En la apertura o escritura de un archivo pueden generar fallos, los que constituyen
una excepcin.
ElnOutError
Se produce cuando una operacin de trabajo de archivos no se puede llevar a
cabo con xito. Esta excepcin contiene un campo llamado:
ErrorCode
Cdigo de error generado por el Sistema Operativo que nos sirve para determinar
que ha ocurrido.
En 0 indica la ausencia de error.
d) Funcin GetLogicalDriveString(LongCad, Cadena)
Devuelve las letras de la unidad, separando c/u de ellas de la siguiente por un
carcter nulo, almacenndolos en el parmetro cadena.
e) DiskSize(Unidad)
Devuelve el tamao 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 parmetro de tipo entero que
toma los valores:
0
1
2

Unidad actual
Unidad A
Unidad B

g) GetDriveType(cCaminoRaiz)
Devuelve el tipo de una determinada unidad. El valor de retorno ser:
Constante
DRIVE_FIXED
DRIVE_REMOVABLE
DRIVE_CDROM
DRIVE_REMOTE
DRIVE_RAMDISK

Tipo de Unidad
Fija, como un disco duro
Mvil, como un diskette
CD-ROM
Remota, como una unidad de red.
Disco virtual o disco RAM

h) GetVolumeInformation
21

Recupera el nombre del volumen, el nmero de serie, sistema de archivos

Seleccin de la Unidad
Disponemos de los siguientes controladores:
a) Control TDriveComboBox
Se encuentra en la Pagina Win 3.1
Propiedades
Items
ItemIndex
TexCase

Drive
DirList

Comentario
Elementos existentes en la lista
Elemento seleccionado actual
Estado en que aparecer la letra y nombre de
la Unidad
TCLowerCase: Predeterminado Minsculas
TCUpperCase: Maysculas
Contiene la letra de la unidad seleccionada
Asocia una lista de unidades con una lista de
directorios

Eventos:
OnChange

Se genera cada vez que el usuario modifique la seleccin actual

Componente SaveDialog
Muestra una ventana de dialogo modal para seleccionar los nombres de los archivos y
grabarlos. El dilogo no aparece en tiempo de ejecucin hasta que ste es activado
mediante una llamada al mtodo Execute. Cuando el usuario presiona el botn 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 ejecucin hasta que ste es activado mediante una llamada al mtodo
Execute. Cuando el usuario hace clic en el botn 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
Desarrollar una aplicacin que guarde en el archivo Invent.dat la informacin
correspondiente a los libros de una biblioteca. Para cada obra se debe reunir la siguiente
informacin:
Cdigo, Titulo, Autor, Editorial, Numero de ejemplares, Precio
22

Siga los siguientes pasos:


1. Proceda a crear una nueva aplicacin
2. En el formulario coloque 6 etiquetas, 6 cuadros de edicin y 4 botones
3. Modifique las propiedades de los componentes.
Control
Form1
Label1
Label2
Label3
Label4
Label5
Label6
Edit1
Edit2
Edit3
Edit4
Edit5
Edit6
Button1
Button2
Button3
Button4

Propiedad
Caption
Position
Caption
Caption
Caption
Caption
Caption
Caption
Text
Text
Text
Text
Text
Text
Caption
Caption
Enabled
Caption
Enabled
Caption

Valor
Ingreso de Libros
poScreenCenter
Cdigo:
Titulo:
Autor:
Editora:
#Ejemplares:
Precio:

&Crear
&Grabar
False
&Nuevo
False
&Salir

A continuacin dirjase 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 ejecucin, de modo que el aspecto de la interfaz
de usuario ser el siguiente:

23

En la seccin 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 sern del tipo
TLibro y Lib para almacenar los datos de un libro en particular en la seccin:
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
operacin d escritura y finalmente habilita el botn Grabar.
1. Haga doble clic en el control Button1
2. En el cdigo haremos referencia a las propiedades del componente SaveDialog
para filtrar los archivos a visualizar, establecer el directorio inicial, la extensin
predeterminada y capturar el nombre del archivo.
procedure TForm1.Button1Click(Sender: TObject);
Var
NomArch:string;
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;
24

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:='';
Edit3.Text:='';
Edit4.Text:='';
Edit5.Text:='';
Edit6.Text:='';
Edit1.SetFocus;
Button2.Enabled:=True;
Button3.Enabled:=False;
end;
Por ltimo, el cdigo para el control Button4 sera:
procedure TForm1.Button4Click(Sender: TObject);
begin
If FileExists(NomArch) then
25

CloseFile(Fich);
Close;
end;
La funcin FileExits averigua si el archivo se encuentra almacenado en algn lugar del
disco; de ser as cierra el archivo previamente, sino slo cierra la aplicacin:
Programa ejecutndose:

2) Lectura de Libros
Desarrollar una aplicacin que lea del archivo Invent.dat la informacin concerniente a
los libros de una biblioteca. Para cada obra se debe mostrar la siguiente informacin:
Cdigo; Ttulo; Autor; Editorial; Nmero de Ejemplares; Precio
Par revisar la informacin de un archivo binario tendremos que disear otra aplicacin,
pues al usar un editor para abrir el archivo en cuestin, el contenido se muestra ilegible
casi en su totalidad.
Siga estos pasos:
1. Crear una aplicacin con formulario
2. En el formulario coloque los siguientes componentes: 6 etiquetas, 6 Cuadros de
Edicin, 1 control Panel, 2 Controles SpeedButton y 1 Botn de Figura.
3. Modificar las propiedades de los componentes:
Control
Form1
Label1

Propiedad
Caption
Position
Caption

Valor
Lectura de Libros
poScreenCenter
Cdigo:
26

Label2
Label3
Label4
Label5
Label6
Edit1
Edit2
Edit3
Edit4
Edit5
Edit6
Panel1
SpeedButton1
SpeedButton2
Button1

Caption
Caption
Caption
Caption
Caption
Text
Text
Text
Text
Text
Text
Caption
Caption
Caption
Caption
Kind

Titulo:
Autor:
Editora:
#Ejemplares:
Precio:

<

>
&Salir
bkClose

Al realizar el diseo superponga los controles SpeedButton al control Panel1.


Aspecto inicial de la ficha:

Inserte tambin desde la Paleta Dialogs un control OpenDialog para modificar las
propiedades de la ventana de dilogo Abrir. En la seccin 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];
27

edi:string[20];
nej:byte;
pre:real
end;

Declaremos dos variables: Fich(Archivo binario) cuyos componentes sern del tipo
TLibro y Lib para recuperar los datos de un libro en particular en la seccin
var
frmLectura: TfrmLectura;
lib:TLibro;
fich:file of TLibro;
En la seccin Implementation digite el cdigo del procedimiento Actualiza, para mostrar
los datos a los que seala el puntero del archivo.
implementation
{$R *.DFM}
procedure TfrmLectura.Actualiza;
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 cdigo para el evento OnCreate, digite lo siguiente:
procedure TForm1.FormCreate(Sender: TObject);
begin
Opendialog1.Filter:='Archivos de Datos(*.dat)|*.dat|Todos'+
28

'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 posicin a la derecha (avanzar un registro) haremos clic en el
control SpeedButton2. Debemos averiguar la posicin actual del puntero del archivo,
luego si no hemos alcanzado el fin de archivo avanzaremos a una posicin, 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
begin
Seek(Fich,filePos(fich)+1);
Actualiza;
SpeedButton1.enabled:=true;
end
else
begin
speedButton2.Enabled:=false;
SpeedButton1.Enabled:=true;
end
end;
Anlogamente, 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
29

SpeedButton1.Enabled:=False;
SpeedButton2.enabled:=true;
end
end;
Asociemos un procedimiento al control Salir. Cuando el usuario haga clic en este botn,
la ejecucin del programa debe finalizar.
procedure TForm1.SalirClick(Sender: TObject);
begin
closeFile(Fich);
Close;
end;
Programa ejecutndose:

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

3) Impresin
Desarrollar una aplicacin para imprimir mapas de bits. Utilizar el componente
TabControl para permitir al usuario examinar una serie de mapas de bits.

30

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
Form1
TabControl

Propiedad
Caption
Tabs

Valor
Imprimir Bitmap
Ruta

Haga doble clic sobre el componente MainMenu y disee un men de acuerdo a la


siguiente tabla:
Caption
Caption
Archivo
Ayuda
Abrir
Acerca
Imprimir
Salir

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;
31

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 informacin MessageDlg
procedure TForm1.Acerca1Click(Sender: TObject);
begin
MessageDlg ('Visor de Bitmaps con Tabs',
mtInformation, [mbOk], 0);
end;
Para acceder al Cuadro de Dialogo de vista previa haremos clic en el comando
Archivo/Imprimir de la aplicacin.
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:

32

Usando los botones de cambio de tamao 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;
end;
end;
En el mtodo ConfigPag se define el tamao del componente Image del formulario,
empleando el tamao del pagina impresa. El tamao de la pagina se divide entre cinco
para ajustarla a un rea razonable de la pantalla.
procedure TFichaPreli.ConfigPag;
begin
{fija el tamao de la imagen a ser
33

proporcional con el tamao de pgina}


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 mtodo DibujarVista calcula el rectngulo 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 todava esta en la pantalla, dibujando un rectngulo blanco encima
de ella. El mtodo StrtchDraw utiliza el rectngulo 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 mtodos de cambio de tamao solamente definen la nueva escala de valores y
llaman al procedimiento DibujarVista para actualizar la imagen.
procedure TFichaPreli.BotonEscalarMasClick(Sender: TObject);
begin
{incrementa el tamao del bitmap}
Escala := Escala * 2;
Label1.Caption := IntToStr (Escala);
DibujarVista
end;
procedure TFichaPreli.BotonEscalarMenosClick(Sender: TObject);
begin
34

{decrementa el tamao de la imagen}


if Escala > 1 then
begin
Escala := Escala div 2;
Label1.Caption := IntToStr (Escala);
DibujarVista;
end;
end;
En el evento BotonImprimirClick el rectngulo de destino no se amplia y el mapa de
bits se enva 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 Navegacin


Desarrollar una aplicacin que permita revisar los datos de la tabla Cliente contenida en
la base de datos DBDEMOS.
Siga estos pasos:
1. Crear una nueva aplicacin con formulario
2. En el formulario colocar los siguientes componentes: 1 Control DataSource. Este
componente se encuentra en la pestaa 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 rpida seleccione el
componente DBGrid, lo encontrara en la pestaa DataControls.
5. Aada adems un control BitBtn1.
Aspecto de la interfaz de usuario.
36

6. Modifique las propiedades de los componentes:


Control
Form1
DataSource
Table1
DBGrid1
BitBtn1

Propiedad
Caption
DataSet
DataBaseName
TableName
Active
Align
DataSource
Caption
Kind

Valor
Visor de Tablas
Table1
DBDEMOS
Clients.dbf
True
AlNone
DataSource1
&Cerrar
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 navegacin 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 travs del objeto DataSource1.
Realice los siguientes cambios:

Objeto
DBNavigator

Propiedad
DataSource
Align

Valor
DataSource1
alTop

El control DBNavigator solo permite la navegacin por los datos durante la ejecucin. Al
interactuar con este control podremos movernos de un registro a otro, borrar una fila,
aadir una nueva fila; es decir, la mayora de las operaciones que estn permitidas en
una tabla con tan solo una pulsacin.

38

Desde la pestaa Standard vamos a seleccionar el componente MainMenu y adems


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 submens llamados Abrir y Salir.

39

En la propiedad Filter del cuadro de dialogo digite los siguientes filtros:


Nombre del Filtro
Bases de datos(*.db, *.dbf)
Todos los archivos(*.*)

Filtro
*.db, *.dbf
*.*

El resto de las propiedades se dejaran como estn con el fin de que mejore el cuadro de
dialogo a su libre decisin.
En el evento OnClick de la opcin 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 cdigo 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 botn 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 efecta 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
botn Abrir para pasar a revisar su contenido.
Las categoras 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 aplicacin que permita listar las estadsticas de los pases que se
encuentran en la tabla Country contenida en la base de datos DBDEMOS.
Siga estos pasos:
1. Crear una nueva aplicacin con formulario
2. En el formulario colocar los siguientes componentes: 1 Control DataSource. Este
componente se encuentra en la pestaa 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 rpida seleccione el
componente DBGrid, lo encontrara en la pestaa DataControls.
41

5. Modifique las propiedades de los componentes.

Control
Form1
DataSource
Table1
DBGrid1

Propiedad
Caption
DataSet
DataBaseName
TableName
Active
Align
DataSource

Valor
Rejilla Demo
Table1
DBDEMOS
Country.dbf
True
AlClient
DataSource1

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


registros aparecen en la tabla. A esta tcnica se le llama Diseo 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 botn asociado y configure los siguientes campos:
Campo
Name

Continent

Propiedad
Title>Caption
Color
Font>Color
Font>Style>fsBold
PickList

Valor
Pas
clButtonShadow
clWhite
True
Africa
Asia
Australia
Europa
North America
South America
Font>Style>fsItalic True

Ahora digitaremos cdigo para indicar el estado del componente Table en ejecucin.
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 ejecutndose: (NO HAY PROGRAMA)

6) Controlador de Fechas con Componente Grafico


Desarrollar una aplicacin que permita visualizar fecha e imgenes de eventos olmpicos
los cuales estn almacenados en la tabla Events contenida en la base de datos
DBDEMOS
Siga estos pasos:
1. Crear una nueva aplicacin con formulario
2. En el formulario colocar los siguientes componentes: 1 Control DataSource. Este
componente se encuentra en la pestaa 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 rpida seleccione el
componente DBGrid, lo encontrara en la pestaa DataControls.
5. Agregue adems los siguientes componentes: Label, DBEdit, DBGrid, DBImage;
DBNavogator y un control MonthCalendar
6. Modifique las propiedades de los componentes.

Control
Form1
DataSource
Table1
DBGrid1
Label2
DBEdit2
DBImage1

Propiedad
Caption
DataSet
DataBaseName
TableName
Active
Align
DataSource
DataSource
DataField
DataSource
DataField
DataSource
DataField

Valor
DbFechas
Table1
DBDEMOS
Events.dbf
True
AlNone
DataSource1
DataSource1
Event_Photop
DataSource1
Events
DataSource1
Event_Photop
43

Stretch
DBNavigator
DataSource
MonthCalendar1 ShowToday

True
DataSource1
False

Escribiremos cdigo 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;
Adems de copiar los datos a uno y otro, con el cdigo anterior, el programa tiene que
poner la tabla en modo edicin 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 edicin
Table1.Edit;
//conecta de nuevo el controlador
DataSource1.OnDateChange := DataSource1DataChange
end;
Con la primera instruccin desconectamos temporalmente el controlador para evitar
reiniciar la seleccin del calendario. El primer clic del usuario no debe cambiar la
seleccin. Con la siguiente instruccin fijamos la tabla en modo edicin y luego pasamos
a reconectar el controlador.
Proceda a ejecutar la aplicacin: (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 botn se eliminara el registro actual ( el
que indique el puntero), para evitar perdidas inesperadas emerger antes una ventana
de Confirmacin para verificar si realmente deseamos eliminar la fila actual.

44

Vous aimerez peut-être aussi