PDA

Ver la Versión Completa : Asignar BBDD con archivo .ini


molina669
20-11-2007, 18:08:15
Hola a todos,
utilizo un archivo ini para asignar la bbdd de mi aplicacion para prevenir posibles cambios de ubicacion de esta y así ahorrarme tener que cambiar el codigo.
El problema es que me salta el error "no es un nombre de archivo valido", cuando os puedo asegurar que si lo es.
El codigo para leer la ruta en el ini y asignarla a la bbdd es este

var
bbdd:TStringList;
posicion,posicion2:integer;
nombreBBDD:string;
begin
bbdd:=TStringList.Create;
bbdd.LoadFromFile('datos/telefonos.ini');
posicion:=pos('',bbdd.Text);
posicion2:=pos('',bbdd.Text);
nombreBBDD:=copy(bbdd.text,posicion+8,posicion2-posicion-8);
ShowMessage(nombreBBDD);
with DataModule2 do
begin
Database.DatabaseName:=nombreBBDD;
Database.Connected:=true;
QDepartamento.Active:=true;
QInformeInterno.Active:=true;
QPersonal.Active:=true;
QDepartamentoFax.Active:=true;
QDepartamentoTelefono.Active:=true;
QExterno.Active:=true;
tbExterno.Active:=true;
end;


Gracias

egostar
20-11-2007, 18:45:24
Curioso que uses un TString para obtener la información del archivo INI, porque no usas la función que Delphi proporciona para ello.


uses IniFiles;

with tinifile.create ('ARCHIVO.INI') do begin
Base := readstring ('BBDD', 'RutaDB', '');
end;


Por otro lado, veo que tienes esto


[BBDD] [/ BBDD]


Eso no me suena que sea un archivo INI.

Salud OS.

Lepe
20-11-2007, 19:43:21
Aunque se usa la clase inifile para atacar los archivos, también puedes hacerlo con TStrings, pero asegúrate de que el archivo tiene la estructura de un .ini

Mira mejor la ayuda de delphi sobre el TStrings, tienes
- Values
- ValuesNames
- etc.
(creo recordar)

Así no tienes que preocuparte de la sección en la que está, sino que cada línea del TStrings estará en la forma:

Names=Value

Eso se puede cargar / modificar / guardar desde el propio TStrings.

Por otra parte, te aconsejo uses rutas absolutas para indicar nombres de archivo.

En windows el directorio activo puede ser distinto al de tu aplicación, y al intentar leer 'datos\mio.txt' normalmente se va a 'c:\windows\mio.txt' que no existirá.

Saludos

BlueSteel
20-11-2007, 20:17:02
Hola molina669

yo realice un proceso para tener los datos de configuración desde un archivo .ini... eso si trabaje con Interbase..

en el Form donde tengo el menu, tengo esto..

el Form Datos corresponde a un datamodule donde tengo la conexión con la base


procedure TMenu.FormCreate(Sender: TObject);
Var
Parametro:Tinifile;
begin
If not DirectoryExists('D:\Sistemas\ProyectoX') Then
Begin
{$I-}
MkDir('D:\Sistemas\ProyectoX');
End;
if FileExists('D:\Sistemas\ProyectoX\config.ini') Then
Begin
Parametro := TiniFile.Create('D:\Sistemas\ProyectoX\config.ini');
Datos.IBD_Compras.Connected := False;
Datos.IBD_Compras.DatabaseName := Parametro.ReadString('BaseDato','Servidor',' ');
Datos.IBD_Compras.Params.Values ['user_name'] := Parametro.ReadString('BaseDato','Usuario',' ');
Datos.IBD_Compras.Params.Values ['password'] := Parametro.ReadString('BaseDato','Clave',' ');
Datos.IBD_Compras.Connected := True;
Parametro.Free;
End
Else
Begin
ShowMessage('Debe Seleccionar Base de Datos para continuar');
Man_Datos := TMan_Datos.Create(Self);
Try
Man_Datos.ShowModal;
// Aqui lo envio a un modulo que hice para ingresar los datos de conexión correspondientes
// En el caso de que no exista el archivo .ini
Finally
Man_Datos.Free;
End;
End;
end;


si tienes dudas.. me avisas

molina669
21-11-2007, 11:55:28
Gracias a todos,
finalmente utilicé el iniFiles y me funciona de maravilla.