Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Los ficheros ini, normalmente, tienen una estructura. Están divididos en bloques o
secciones, y dentro de cada sección hay valores que se usan en la configuración
del programa que gestiona ese fichero o esa sección. Digo esa sección porque el
fichero Win.ini almacena datos sobre Windows, y algunos programas añaden
secciones a él. Aquí hay que hacer una aclaración ya que esto solo ocurre en
Windows 3.x, y Windows 95 tiene este archivo aunque esta en desuso (por
compatibilidad).
[Ports]
LPT1:=
LPT2:=
LPT3:=
COM1:=9600,n,8,1,x
COM2:=9600,n,8,1,x
COM3:=9600,n,8,1,x
COM4:=9600,n,8,1,x
FILE:=
Como podéis ver es todo Ascii, así que alguien puede pensar que con lo que sabe
de ficheros, se puede sentar delante del ordenador y hacerse unas rutinas para
leerlos, a lo cual yo respondo que tu mismo, pero que Delphi ya tiene un sistema
para leerlos, y muy bueno.
Delphi tiene una unidad donde tiene todos los procedimientos y funciones
definidos. Así que lo único que tienes que hacer para poder empezar a trabajar
con estos ficheros es añadir la palabra IniFiles a la cláusula uses de tu unidad.
Esta es la lista de funciones y procedimientos para leer y escribir en estos
ficheros.
Quizás ante tanto nombre os asustéis, pero en cuanto explique un par de detalles
el resto será coser un cantar. Para acceder a un fichero ini, lo primero es indicar
que fichero es, y eso se hace cuando creamos el objeto. He dicho objeto, y lo he
soltado así de refilón, resulta que como Delphi es un lenguaje orientado al objeto,
y el sistema de lectura/escritura de ficheros ini, es una clase pues hay que
inicializarlo. Seguro que hay alguno de esta pensando que se ha metido en un lió,
pero Delphi no nos abandona en los momentos difíciles, y el sistema es muy fácil.
Un procedimiento genérico (cuando digo genérico es que se puede poner dentro
de cualquier procedimiento) seria como sigue:
Var
MiFicheroIni : TiniFile;
Begin
MiFicheroIni := TIniFile.Create ('pepe.ini');
MiFicheroIni.Free;
En este mini programa lo que he hecho crear una variable tipo IniFile, la cual
inicializo en la primera línea indicando que el fichero con el cual vamos a trabajar
se llama Pepe.ini, después podría hacer lo que me plazca, y al final libero la
variable que he creado, para que no ocupe memoria. Atención porque sino se
indica el nombre del fichero con la ruta completa se asume que este está en el
directorio Windows, y NO donde se esta ejecutando tu programa. Si quieres
acceder al fichero dentro de otro directorio, debes ponerlo así:
Vamos hacer un ejemplo donde se usen las principales funciones. Para lo cual
construye un formulario como este, con dos botones, dos campos edit, un
CheckBox, y un par de etiquetas. Como os dije, el fichero se creará en el directorio
donde se ejecuta este programa, así que para ello debemos saber donde se
ejecuta, la manera que yo he usado es declarar un variable en la sección privada
de la unidad, la cual contendrá el directorio y el nombre del fichero, y estos datos
le serán asignados en el momento de la creación del formulario, así que este
procedimiento será como sigue:
Las funciones de lectura de datos devuelven los valores en el formato que los
leen. Así cuando usamos ReadString la variable que recoge los datos debe ser un
String, cae de cajón, pero por si las moscas. Además tienen tres parametros, el
primero es el nombre de la sección, el segundo el nombre de la variable, y el
tercero el valor por defecto, en el caso que no exista tal variable, sección, o incluso
si el fichero no existiese y fuera creado en el momento de su apertura. Como la
edad he decido almacenarla como un valor numérico (integer), para poderla
mostrarla en el campo Edit2 he de convertirla a texto, que es lo que hace la última
línea.
Fijaros que el procedimiento es casi indentico al anterior, pero esta vez se usan
las ordenes de escritura. Aqui ocurre lo mismo, si el fichero, la seccion, o la
variable no existen son creadas. Como regla general se puede decir que si al leer
o escribir algo no existe, este es creado.
Estas funciones leen partes de un fichero ini. Así ReadSectionValues, lee los
valores de las variables contenidas en una seccion. ReadSections, lee el nombre
de las secciones de un fichero ini, y ReadSection lee el nombre de las variables de
la sección. He hecho un pequeño ejemplo que lee de nuestro fichero ini.
end;
end;
Bueno pues los ficheros ini no tienen más secretos, solo comentar que yo
personalmente prefiero trabajar sobre un fichero ini propio que tocar en el win.ini.
El motivo es que así el fichero ini lo creo en el directorio donde esta el programa
ejecutable, con lo que obtengo una ventaja, y es que es que si el usuario borra el
programa, borrando el directorio donde está el programa ya borra el fichero ini, y
no se queda en el directorio Windows y si hubiera añadido entradas al fichero
win.ini este no quedaria engordado inultilmente.
En el primer ejemplo lo que vamos a hacer es aprender a: crear un archivo INI
Para eso vamos a crear un nuevo proyecto y en el form creado, en el evento Oncreate
vamos a poner:
Código DELPHI
Tened en cuenta que hay que colocar en el uses el tipo Tinifile, asi:
Código DELPHI
1. uses
2. Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
3. Dialogs, IniFiles;
Guardad el proyecto.
En este segundo ejemplo veremos como se escribe dentro de un archivo INI y como podemos
obtener esa información.
Primero creemos un nuevo proyecto:
Flile New Application.
En el form creado vamos a poner:
2 Panel
3 botones
1 Combobox
1 memo
2 edit
3 label
Seguimos:
Vamos a escribir el código que nos servirá para este ejemplo:
Primero el mas sencillo:
El boton Salir:
Dadle doble click y poned esto:
Código DELPHI
1. Close;
1. var
2. B: TIniFile; // contiene el dato de tipo TIniFile
3. Codigo: String;
4. Tipo: String;
5. Dato: String;
6. begin
7. Codigo:= Edit1.Text; //Obtiene el dato del edit1
8. Tipo:= ComboBox1.Text; //Obtiene el dato del
combobox1
9. Dato:= Edit2.Text; //Obtiene el dato del edit2
10. B := TIniFile.Create(ExtractFilePath(ParamStr(0))
+ 'MiArchivo.Ini'); // busca el archivo INI en el
directorio del programa
11. with B do
12. begin
13. B.WriteString(Codigo,Tipo,Dato); // Escribe los
datos en el archivo ini
14. Showmessage('Dato Guardado'); // muestra un
mensaje
15.
1. var
2. BF: TIniFile;
3. Codigo: String;
4. A, B, C: String;
5. begin
6. Codigo:= Edit1.Text;
7. BF := TIniFile.Create(ExtractFilePath(ParamStr(0))
+'MiArchivo.Ini');
8. with BF do
9. begin
10. A := BF.ReadString(Codigo,'Nombre','');
11. B := BF.ReadString(Codigo,'Apellido','');
12. C := BF.ReadString(Codigo,'DNI','');
13. Memo1.Clear;
14. Memo1.Lines.Add('Nombre = '+A);
15. Memo1.Lines.Add('Apellido = '+B);
16. Memo1.Lines.Add('DNI = '+C);
17. end;
18.
Como veis en este segundo botón se busca el archivo ini, se leen los datos con la
función ReadString y se muestran en el memo.
1. uses
2. Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,
3. Dialogs, IniFiles;
Corred el programa y empezad a jugar con datos, veréis que los guarda y los recupera
según el dato que se escriba en el edit1 el cual sera el código de referencia.
Seguimos...
Como visteis anteriormente un archivo INI lee la información en un sector especifico dentro de el.
Esto es lo que usaremos para poder conectar una BD por medio de un archivo INI.
Una cosa a tomar en cuenta es que aunque los datos son del tipo Texto se puede usar con datos
numéricos, eso tal vez lo veamos en otra ocasión por ahora nos enfocaremos al enlace con las BD.
Sabemos, según lo que pudimos ver que el dato de tipo ''control'' se encuentra encerrado dentro
de corchetes [ ] y que los datos contenidos dentro del principal se definen con un signo de igual =.
En el caso de la conexión con una BD se puede desde colocar todos los datos necesarios, los
básicos, las claves etc. etc. etc..
Lo normal es colocar solamente la dirección donde se encuentra la BD.
Aveces se necesita colocar la clave y el usuario, por lo menos yo lo prefiero en el caso de Firebird.
En el siguiente paso os mostrare tanto el código para access como para Firebird, como veréis serán
prácticamente lo mismo con ligeras diferencias.
Seguimos.....
Seguimos....
Conectarnos a una BD access por medio de un archivo INI.
Bien, en este caso usaremos los componentes ADO.
Este código lo podemos colocar en un form o en un datamodule (que es lo mas eficiente),
siempre dentro del evento OnCreate.
Hay que recordar que en el uses del from hay que poner el uses IniFiles, en el caso de un
datamodule:
Código DELPHI
1. uses
2. SysUtils, Classes, DB, ADODB, IniFiles, Forms,
Dialogs;
1. Var
2. BaseDeDatos, ConStr : String;
3. IniFile: TIniFile;
4. begin
5. // Obtiene la ruta y el nombre de la base de datos
6. IniFile :=
TIniFile.Create(ExtractFilePath(Application.ExeName)+'Mi
Archivo.ini');
7. BasedeDatos := IniFile.ReadString('BD','Path','');
8. If BasedeDatos = '' then ShowMessage('Error al
cargar Base de Datos');
9. ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
10. 'Data Source='+BaseDeDatos+';'+
11. 'Persist Security Info=False;'+
12. 'Jet OLEDB:Database Password=admin';
13. AdoConnection1.ConnectionString := ConStr;
14. AdoConnection1.Open;
15.
Como veis el sector principal se llama BD este estará encerrado entre corchetes y el dato se
sacara del sector Path que es donde se escribirá la dirección de la BD.
Bien, abrid el archivo INI y poned los datos para que sean leídos por el programa, tendrán
que quedar de esta forma:
Cita
[BD]
Path="C:\MICarpeta\Micarpetadebd\MiBD.MDB"
Si colocáis en el sector Path la dirección de la carpeta donde esta la BD y el nombre de la
BD entonces el programa la buscara y enlazara conectándola.