Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Guardar configuracion de app...

Estas en el tema de Guardar configuracion de app... en el foro de Visual Basic clásico en Foros del Web. Buenas tardes, estoy comenzando con VB y ahora me surgio la necesidad de tener que guardar algunos datos, como un tamaño de ventana y una ...
  #1 (permalink)  
Antiguo 30/12/2009, 17:06
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 18 años
Puntos: 23
Pregunta Guardar configuracion de app...

Buenas tardes, estoy comenzando con VB y ahora me surgio la necesidad de tener que guardar algunos datos, como un tamaño de ventana y una variable (un simple numero) y alguos datos mas seguramente.. estuve leyendo que se pueden guardar en:

- base de datos (preferentemente no quiero)
- archivos de texto
- archivos INI
- archivos CONFIG


quisiera que me recomenden algunos de esos archivos ( el mas simple por ahora ) y que me den una ayuda con el código..

Muchas Gracias!
  #2 (permalink)  
Antiguo 30/12/2009, 18:51
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 9 meses
Puntos: 19
Respuesta: Guardar configuracion de app...

Hola, yo lo haria con un .INI, fijate que la mayoria de los programas lo tienen, en el registro tambien lo podes hacer si son pocos datos, pero por las dudas es mejor dejar el registro como esta.para escribir en un ini debes conocer que son las secciones y las claves, por ejemplo la seccion VENTANA esta conformado por alto y ancho y quedaria algo asi:

[VENTANA]
ancho=1000
alto=2000

y asi mismo podes tener varias secciones, se usan las api's GetPrivateProfileString y WritePrivateProfileString , creo que ya te dije todo, ahora te toca buscar en internet que esta repleta de ejemplos.

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #3 (permalink)  
Antiguo 31/12/2009, 04:59
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Guardar configuracion de app...

Para facilitar las cosas os paso el código que uso yo para guardar y leer de ficheros ini.
Hay en las faqs algo sobre esto pero no queda demasiado claro.

Código vb:
Ver original
  1. #If Win32 Then
  2.     'Declaraciones para 32 bits
  3.    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
  4.         (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
  5.          ByVal lpDefault As String, ByVal lpReturnedString As String, _
  6.          ByVal nSize As Long, ByVal lpFileName As String) As Long
  7.     Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" _
  8.         (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
  9.          ByVal lpString As Any, ByVal lpFileName As String) As Long
  10. #Else
  11.     'Declaraciones para 16 bits
  12.    Private Declare Function GetPrivateProfileString Lib "Kernel" _
  13.         (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
  14.          ByVal lpDefault As String, ByVal lpReturnedString As String, _
  15.          ByVal nSize As Integer, ByVal lpFileName As String) As Integer
  16.     Private Declare Function WritePrivateProfileString Lib "Kernel" _
  17.         (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
  18.          ByVal lpString As Any, ByVal lplFileName As String) As Integer
  19. #End If
  20.  
  21. Sub GuardarIni(ByVal FicheroINI As String, ByVal Seccion As String, _
  22. ByVal Clave As String, ByVal Valor As String)
  23.   On Local Error GoTo ErrorGuardarIni
  24.   WritePrivateProfileString Seccion, Clave, Valor, FicheroINI
  25.   Exit Sub
  26. ErrorGuardarIni:
  27.   MsgBox Err.Number & ". " & Err.Description, vbCritical
  28.   Err.Clear
  29. End Sub
  30.  
  31. '------------------------------------
  32.  
  33. Function LeerIni(ByVal FicheroINI As String, ByVal Seccion As String, _
  34. ByVal Clave As String, Optional ByVal ValorDefault As String) As String
  35.   Dim lpString As String
  36.   Dim LTmp As Long
  37.   Dim sRetVal As String
  38.   On Local Error GoTo ErrorLeerIni
  39.   If IsMissing(ValorDefault) Then
  40.     lpString = ""
  41.   Else
  42.     lpString = ValorDefault
  43.   End If
  44.   sRetVal = String$(255, 0)
  45.   LTmp = GetPrivateProfileString(Seccion, Clave, _
  46.   lpString, sRetVal, Len(sRetVal), FicheroINI)
  47.   If LTmp = 0 Then
  48.     LeerIni = lpString
  49.   Else
  50.     LeerIni = Left(sRetVal, LTmp)
  51.   End If
  52.   Exit Function
  53. ErrorLeerIni:
  54.   MsgBox Err.Number & ". " & Err.Description, vbCritical
  55.   Err.Clear
  56. End Function

Ejemplo para guardar y leer el alto y ancho del form1:

Código vb:
Ver original
  1. '               fichero       seccion    clave   valor a guardar
  2.  GuardarIni "C:\Config.ini", "Ventanas", "F1Alto", Form1.Height
  3.   GuardarIni "C:\Config.ini", "Ventanas", "F1Ancho", Form1.Width

En el fichero ini se guardaría:

Código :
Ver original
  1. [Ventanas]
  2. F1Alto=3500
  3. F1Ancho=4200

El fichero ini se crea automáticamente al guardar un dato en el.

Para devolver su tamaño a la ventana pondríamos:

Código vb:
Ver original
  1. '                                fichero     seccion    clave   valor por defecto
  2.  Form1.Height = LeerIni ("C:\Config.ini", "Ventanas", "F1Alto", Form1.Height)
  3.   Form1.Width = LeerIni ("C:\Config.ini", "Ventanas", "F1Ancho", Form1.Width)

Como veis, pongo como valores por defecto el actual ancho y alto de la ventana, de modo que si no existen valores guardados en el fichero .INI, dejamos la ventana con su tamaño original.

Como muchos sabrán, todos los valores se pueden poner como variables o textuamente como he hecho yo, además de que se pueden guardar textos, no solo valores numéricos:
Ejm:

Código vb:
Ver original
  1. Fichero = App.Path & "\Config.ini"
  2.   Seccion = "Ventanas"
  3.   Clave = "F1Titulo"
  4.   Valor = Form1.Caption
  5.   GuardarIni Fichero, Seccion, Clave, Valor

Espero que esto anime a muchos a usar este tipo de ficheros tan cómodos. Una vez que tienes las 2 funciones, guardar y leer datos es muy simple, y al ser un fichero de texto se puede editar fácilmente con el bloc de notas de windows.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 27/03/2010 a las 17:28 Razón: Modificar declaraciones para evitar posibles errores de uso
  #4 (permalink)  
Antiguo 31/12/2009, 08:45
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 18 años
Puntos: 23
Respuesta: Guardar configuracion de app...

Muchisimas gracias a ambos.. tengo un par de dudas que me surgieron de éste codigo..

la prima es todo el codigo grande del principio donde lo coloco? (es una duda que tuve estos dias) osea tiene que ir dentro del Form1_Load() o puede ir fuera de eso? o donde es lo correcto..?

la otra es, una ves creado el archivo INI con 2 datos por ejemplo, al agregarle mas datos se borran los anteriores o como es?

Saludos y muchas gracias!
  #5 (permalink)  
Antiguo 31/12/2009, 09:57
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Guardar configuracion de app...

El código puedes ponerlo al comienzo del todo del código del formulario, si solo usas un formulario, pero lo mejor es ponerlo en un modulo y podrás usarlo desde cualquier formulario de la aplicación.

Por otro lado, los datos del ini nunca se borran.
Si guardas la misma clave 2 veces, la segunda vez sobreescribes el valor que había.
Si metes nuevos datos se añaden en la sección correspondiente sin afectar a los datos anteriores.

Feliz Navidad
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #6 (permalink)  
Antiguo 31/12/2009, 09:59
Avatar de McBlink  
Fecha de Ingreso: noviembre-2006
Ubicación: $ARG->LaPampa()
Mensajes: 1.694
Antigüedad: 18 años
Puntos: 23
Respuesta: Guardar configuracion de app...

ah buenisimo! mil gracias! me voy a poner a leer sobre los modulos..

Saludos y FELIZ AÑO 2010!
  #7 (permalink)  
Antiguo 31/12/2009, 10:13
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Guardar configuracion de app...

Lo de los módulos no es muy complicado, al menos los módulos normales.

En caso de poner en código p.ej. en el Form1 y querer usarlo desde el Form2, solo hay que declararlo como Public o, como he hecho yo, no añadir Private al comienzo de la declaración.
La cuestión es que para usarlo desde el Form2 tienes que incluir delante de la llamada el nombre del formulario que contiene la sub o función que quieres ejecutar.
Ej:
Form1.GuardarIni blablabla...

Si en lugar de eso, copias el código en un módulo normal (Proyecto/Agregar Modulo), las constantes, variables, subs y funciones que declares como públicas (o no pongas Private) se podrán usar desde cualquier sitio sin tener que incluir el nombre del módulo:
GuardarIni blablabla...

Que se dé bien.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #8 (permalink)  
Antiguo 10/02/2010, 12:46
Avatar de smoke001  
Fecha de Ingreso: enero-2008
Mensajes: 83
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Guardar configuracion de app...

como te lo agradezco esto de cargar INI y salvar INI tenia dudas pero he probado tu codigo y me ha hido de maravilla en hora buena te agradezco
  #9 (permalink)  
Antiguo 10/02/2010, 13:31
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años, 6 meses
Puntos: 7
Respuesta: Guardar configuracion de app...

Aqui dejo otro codigo haber si les sirve.

En un modulo bas
Código:
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Public Sub GrabaINI(Archivo As String, Seccion As String, Clave As String, Text As String)
 WritePrivateProfileString Seccion, Clave, Text, Archivo
End Sub

Public Function LeeINI(Archivo As String, Seccion As String, Clave As String)
 Dim iRetLen As Integer
 Dim sRet As String
 sRet = Space(255)
 iRetLen = GetPrivateProfileString(Seccion, Clave, "", sRet, Len(sRet), Archivo)
 sRet = Left(sRet, iRetLen)
 LeeINI = sRet
End Function
Para utilizarlo en cualquier form
Código:
Dim xRuta As String

Private Sub Form_Load()
xRuta = App.Path & "\archivo.ini"
End Sub

Private Sub Command1_Click()

Text1 = LeeINI(xRuta, "datos", "nombre")
Text2 = LeeINI(xRuta, "datos", "apellido")

End Sub

Private Sub Command2_Click()
Call GrabaINI(xRuta, "datos", "nombre", "tu nombre")
Call GrabaINI(xRuta, "datos", "apellido", "tu apellido")
End Sub
  #10 (permalink)  
Antiguo 27/03/2010, 17:42
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Guardar configuracion de app...

He retocado las declaraciones del código que puse en mi primer mensaje de este post, ya que la función GuardarIni estaba declarada para recibir cadenas de texto y generaba errores cuando intentabas guardar una variable numérica. Un desliz de última hora.
Y dado que en los ejemplos se simula guardar el tamaño de un form directamente, seguramente esas mismas líneas ya generarían errores (no he llegado a probarlo).

Creo que esta vez ha quedado "a prueba de torpes". Osea, apta para mi propio uso.

Un saludo.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:43.