Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Asignar BBDD con archivo .ini (https://www.clubdelphi.com/foros/showthread.php?t=50505)

molina669 20-11-2007 18:08:15

Asignar BBDD con archivo .ini
 
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
Código:

var
        bbdd:TStringList;
        posicion,posicion2:integer;
        nombreBBDD:string;
begin
bbdd:=TStringList.Create;
bbdd.LoadFromFile('datos/telefonos.ini');
posicion:=pos('[BBDD]',bbdd.Text);
posicion2:=pos('[/BBDD]',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.

Código Delphi [-]
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:
Código Delphi [-]
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

Código Delphi [-]
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.


La franja horaria es GMT +2. Ahora son las 13:28:47.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi