Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   problema con fichero .ini (https://www.clubdelphi.com/foros/showthread.php?t=27791)

coleleon 30-11-2005 19:56:38

problema con fichero .ini
 
Hola a todos! tengo un problema al leer un fichero .ini,es la primera vez q los utilizo, no sé si será problema de código o q el fichero ini lo escribo de la siguiente manera: creo un archivo de texto,escribo en él y luego lo guardo con extensión .ini.
El código q tengo es este

Código Delphi [-]
procedure InicializarIni;
begin
  ficheroini:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.ini'));
  Finicio.Tcomandos.DatabaseName:=ficheroini.ReadString('Ficheros','comandos','error');
  Finicio.Testado.DatabaseName := ficheroini.ReadString('Ficheros','estado','error');
  Finicio.Tlog.DatabaseName := ficheroini.ReadString('Ficheros','log','error');
end;
Gracias!!

delphi.com.ar 30-11-2005 19:57:50

y..... ¿Cuál es el problema?

coleleon 30-11-2005 20:31:29

El problema es q si muestro lo q lee del fichero,siempre sale error, creo q entonces no lee bien el fichero,no?

delphi.com.ar 30-11-2005 20:35:43

Cita:

Empezado por coleleon
El problema es q si muestro lo q lee del fichero,siempre sale error, creo q entonces no lee bien el fichero,no?

Depende de cuál sea este error, será el problema... ¿Que error te da? ¿En qué línea? ¿Te compila?

Lee esto por favor: Guía de Estilo

coleleon 30-11-2005 20:47:25

Compilar sí compila,lo q me refería es q devuelve el tercer parámetro de la función ReadString,y creo q eso es porq no encuentra la key q le paso,pero no sé por qué,ya q en el fichero de texto si q está bien escrito.Gracias por tu atención.:)

Coco 30-11-2005 20:51:36

cual es el contenido del archivo ini?
Lo estas tomando del path correcto?

delphi.com.ar 30-11-2005 21:00:18

Comprueba que tu aplicación este accediendo el archivo que piensas que estas accediendo, comprueba que la Key se llame exactamente como dice en el archivo. Prueba guardando los datos desde tu programa mediante WriteString, tienes que ver cambios en el ini!

coleleon 30-11-2005 21:27:10

El contenido es muy simple:
[Ficheros]
Comandos=C:\ComandosDB\Comandos.dbf
Estado=C:\ComandosDB\Estado.dbf
Log=C:\ComandosDB\Log.dbf
y el path lo obtengo de la función ChangeFileExt(Application.ExeName,'.ini') ,q creo q vale,no?

delphi.com.ar 30-11-2005 21:38:45

Si vale... ¡Pero fíjate que sea lo mismo que imaginas que es!...
Prueba con un ShowMessage(ChangeFileExt(Application.ExeName,'.ini'));

Saludos!

dec 30-11-2005 22:08:15

Hola,


Cita:

Empezado por Federico
Código Delphi [-]
ShowMessage(ChangeFileExt(Application.ExeName,'.ini'));

Pero,... eso siempre le mostraría una ruta correcta, puesto que es claro que el ejecutable existe y nomás la ruta del ejecutable aparecerá con una extensión ".ini", que es justo lo que le dices que muestre, como puede verse. No sé... me llamó la atención esto Federico, disculpa la tontería: por otro lado no he leído el Hilo desde un principio así que no sé qué hago aquí... ¿respondiendo el qué? ;)

coleleon 30-11-2005 22:15:21

Sí,lo acabo de comprobar,y la ruta que resulta es correcta.No sé..ya dudo...no será q no se puede hacer desde un archivo de texto normal y corriente?

coleleon 30-11-2005 22:29:32

Una pregunta:no hay otra manera de crear el .ini sin tener q ejecutar antes las funciones WriteString ..etc para introducir los datos iniciales?

dec 30-11-2005 22:31:40

1 Archivos Adjunto(s)
Hola,

Algo así debiera funcionar:

Código Delphi [-]
uses
  IniFiles;

procedure TfrmPrincipal.btnLeerIniClick(Sender: TObject);
var
  ini: TIniFile;
begin
  ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
  try
    ShowMessage( 'Clave Comandos = ' + ini.ReadString('Ficheros', 'Comandos', 'Error') );
    ShowMessage( 'Clave Estado = ' + ini.ReadString('Ficheros', 'Estado', 'Error') );
    ShowMessage( 'Clave Log = ' + ini.ReadString('Ficheros', 'Log', 'Error') );
  finally
    ini.Free;
  end;
end;
Te adjunto un sencillo ejemplo en donde se hace uso del código de arriba.

dec 30-11-2005 22:33:48

Hola,


Cita:

Empezado por coleleon
Una pregunta:no hay otra manera de crear el .ini sin tener q ejecutar antes las funciones WriteString ..etc para introducir los datos iniciales?

Claro, hombre, digitalmente: como lo he hecho yo en el ejemplo de arriba: con los puritos dedos. ;)

Es un archivo de texto plano: puedes escribirlo con el Bloc de notas, por ejemplo, sin problemas, siempre que te percates de que incluyes las secciones, claves y valores tal y como esperes encontrarlas.

Claro, que, una ayuda podría ser que usases cierto programa que creo que se llama XEditor (no lo recuerdo bien), el cual puede resaltarte la sintaxis de los archivos INI, de tal manera que algo podrá ayudarte. Y, por supuesto, desde el propio Delphi, yo creo que también te resaltará la sintaxis de dichos archivos.

Edito: De todas formas, que tampoco se te haga especialmente complicado el hecho de utilizar el método "WriteString" para escribir los valores oportunos en el archivo INI, oyes:

Código Delphi [-]
procedure EscribirValoresIni(const log, estado, comandos: string);
var
  ini: TIniFile;
begin
  ini := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
  try
    ini.WriteString('Ficheros', 'Log', log);
    ini.WriteString('Ficheros', 'Estado', estado);
    ini.WriteString('Ficheros', 'Comandos', comandos);
  finally
    ini.Free;
  end;
end;

coleleon 30-11-2005 22:49:35

Jo ,no gano para disgustos,resulta que los datos q leo del ini son los nombres de las tablas DBase que utilizo en el programa.Ahora me pregunto, si tengo un componente Ttable xa cada tabla, en que propiedad tengo q asignar los valores leidos antes en tiempo de ejecución,para poder acceder a las tablas desde los componentes ttable,TABLENAME o DATABASENAME?Gracias d nuevo

dec 30-11-2005 22:58:30

Hola,


Cita:

Empezado por coleleon
Jo ,no gano para disgustos,resulta que los datos q leo del ini son los nombres de las tablas DBase que utilizo en el programa.Ahora me pregunto, si tengo un componente Ttable xa cada tabla, en que propiedad tengo q asignar los valores leidos antes en tiempo de ejecución,para poder acceder a las tablas desde los componentes ttable,TABLENAME o DATABASENAME?Gracias d nuevo

Creo que ese es un tema diferente del que se ha tratado en este Hilo. A distintas preguntas, mejor distintos Hilos: la guía de estilo de estos Foros, que nadie lee, es lo que dice, a lo menos, y tiene su razón de ser. Y,... por otro lado... ¿qué tal con el archivo INI? ¿Te hiciste ya con ello? ;)

coleleon 30-11-2005 23:05:42

Perdón,debe ser el estres q me produce encontrarme con dudas de estas...el INi ya superado!

dec 30-11-2005 23:16:59

Hola,


Cita:

Empezado por coleleon
Perdón,debe ser el estres q me produce encontrarme con dudas de estas...el INi ya superado!

Me alegro, hombre. Respecto de la cuestión que planteas últimamente, es posible que pudieras plantearla en el apartado "Conexión con bases de datos" de estos Foros. A mí, ya lo he dicho, me parece lo suyo para que cada cosa quede más o menos en su sitio. ;)

delphi.com.ar 01-12-2005 13:17:38

Cita:

Empezado por dec
Pero,... eso siempre le mostraría una ruta correcta, puesto que es claro que el ejecutable existe y nomás la ruta del ejecutable aparecerá con una extensión ".ini", que es justo lo que le dices que muestre, como puede verse.

Si, mi idea es que compare esa ruta con el ini que esta creando a mano... si verdaderamente el programa la va a buscar donde el cree que la esta buscando..

Saludos!

delphi.com.ar 01-12-2005 13:19:27

Cita:

Empezado por coleleon
Perdón,debe ser el estres q me produce encontrarme con dudas de estas...el INi ya superado!

¿Y cuál era el problema?


La franja horaria es GMT +2. Ahora son las 05:36:33.

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