Verschiedene Werte in INI-/Textdatei speichern/lesen

Terminator2

Erfahrenes Mitglied
Hallo,

Das Thema war zwar schon ein paar mal hier drinnen, aber bei mir ist es ein bisschen anders:

Es sollen Werte wie Slider Values oder CheckBox Values oder einfach Texte aus Textboxen gesichert werden. Bis jetzt habe ich das immer mit einem Modul per INI Datei gemacht, was auch ganz schön ist. Aber das Problem ist einfach, dass das Programm nach dem dritten Aufruf wieder die Default Werte übernimt, und nicht die Werte aus der INI Datei. Ich schreibe mal den Code rein, aber irgendwie ist da was falsch:

Code:
Option Explicit

Private Const cPath = "\pm98mpvar.ini"

Public sliSAP   As Long
Public sliKNG   As Long
Public sliSIZ   As Long
Public Text1    As String
Public Text2    As String
Public Text3    As String
Public Text4    As String
Public Text5    As String

Private 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
Private 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
Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long

Public Sub Main()
    Call Lade_Inidatei
    Form1.Show vbModal
End Sub

Public Sub Ende()
    Dim F As Form
    
    Call MainMod.Schreibe_IniDatei
    
    For Each F In Forms
        Unload F
        Set F = Nothing
    Next F
    
    End
End Sub

Public Sub Lade_Inidatei()
    Dim Buffer1 As String * 100
    Dim Buffer2 As String * 100
    Dim Buffer3 As String * 100
    Dim Buffer4 As String * 100
    Dim Buffer5 As String * 100
       
    sliSAP = GetPrivateProfileInt("Slider", "sliSAP", 7, App.Path & cPath)
    sliKNG = GetPrivateProfileInt("Slider", "sliKNG", 2, App.Path & cPath)
    sliSIZ = GetPrivateProfileInt("Slider", "sliSIZ", 70, App.Path & cPath)

    Call GetPrivateProfileString("Texte", "Text1", "E:", Buffer1, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text2", "C:\Programme\NetTemp\", Buffer2, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text3", "Q:\", Buffer3, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text4", "000", Buffer4, 100, App.Path & cPath)
    Call GetPrivateProfileString("Texte", "Text5", "C:\Programme\DvdTemp\", Buffer5, 100, App.Path & cPath)
    
    frmOptions.Text1.Text = Trim(Buffer1)
    frmOptions.Text2.Text = Trim(Buffer2)
    frmOptions.Text3.Text = Trim(Buffer3)
    frmOptions.txtHütte.Text = Trim(Buffer4)
    frmOptions.Text5.Text = Trim(Buffer5)
    
End Sub

Public Sub Schreibe_IniDatei()
    WritePrivateProfileString "Texte", "Text1", CStr(Text1), App.Path & cPath
    WritePrivateProfileString "Texte", "Text2", CStr(Text2), App.Path & cPath
    WritePrivateProfileString "Texte", "Text3", CStr(Text3), App.Path & cPath
    WritePrivateProfileString "Texte", "Text4", CStr(Text4), App.Path & cPath
    WritePrivateProfileString "Texte", "Text5", CStr(Text5), App.Path & cPath
    
    WritePrivateProfileString "Slider", "sliSAP", CStr(sliSAP), App.Path & cPath
    WritePrivateProfileString "Slider", "sliKNG", CStr(sliKNG), App.Path & cPath
    WritePrivateProfileString "Slider", "sliSIZ", CStr(sliSIZ), App.Path & cPath
End Sub

MFG
 
Hallo, das liegt am auslesen der Strings.

Code:
Option Explicit

Private Const cPath = "\pm98mpvar.ini"

Public sliSAP   As Long
Public sliKNG   As Long
Public sliSIZ   As Long

' Diese Variablen würde ich nicht so benennen wie TextBoxen
' Habe iText daraus gemacht
Public iText1    As String
Public iText2    As String
Public iText3    As String
Public iText4    As String
Public iText5    As String

Private 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
Private 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
Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long

Public Sub Main()
    Call Lade_Inidatei
    Form1.Show vbModal
End Sub


Public Sub Ende()
    Dim F As Form
    
    Call MainMod.Schreibe_IniDatei
    
    For Each F In Forms
        Unload F
        Set F = Nothing
    Next F
    
    End
End Sub


Public Sub Lade_Inidatei()
    Dim Buffer1 As String * 100
    Dim Buffer2 As String * 100
    Dim Buffer3 As String * 100
    Dim Buffer4 As String * 100
    Dim Buffer5 As String * 100
    
    Dim LenBuffer1 As Long
    Dim LenBuffer2 As Long
    Dim LenBuffer3 As Long
    Dim LenBuffer4 As Long
    Dim LenBuffer5 As Long
       
    sliSAP = GetPrivateProfileInt("Slider", "sliSAP", 7, App.Path & cPath)
    sliKNG = GetPrivateProfileInt("Slider", "sliKNG", 2, App.Path & cPath)
    sliSIZ = GetPrivateProfileInt("Slider", "sliSIZ", 70, App.Path & cPath)

' ************************************************************
' Strings werden so ausgelsen:

    LenBuffer1 = GetPrivateProfileString("Texte", "Text1", "E:", Buffer1, 100, App.Path & cPath)
    LenBuffer2 = GetPrivateProfileString("Texte", "Text2", "C:\Programme\NetTemp\", Buffer2, 100, App.Path & cPath)
    LenBuffer3 = GetPrivateProfileString("Texte", "Text3", "Q:\", Buffer3, 100, App.Path & cPath)
    LenBuffer4 = GetPrivateProfileString("Texte", "Text4", "000", Buffer4, 100, App.Path & cPath)
    LenBuffer5 = GetPrivateProfileString("Texte", "Text5", "C:\Programme\DvdTemp\", Buffer5, 100, App.Path & cPath)
    
    frmOptions.Text1.Text = Mid(Buffer1, 1, LenBuffer1)
    frmOptions.Text2.Text = Mid(Buffer2, 1, LenBuffer2)
    frmOptions.Text3.Text = Mid(Buffer3, 1, LenBuffer3)
    frmOptions.txtHütte.Text = Mid(Buffer4, 1, LenBuffer4)
    frmOptions.Text5.Text = Mid(Buffer5, 1, LenBuffer5)

' ************************************************************

End Sub


Public Sub Schreibe_IniDatei()
    WritePrivateProfileString "Texte", "Text1", iText1, App.Path & cPath
    WritePrivateProfileString "Texte", "Text2", iText2, App.Path & cPath
    WritePrivateProfileString "Texte", "Text3", iText3, App.Path & cPath
    WritePrivateProfileString "Texte", "Text4", iText4, App.Path & cPath
    WritePrivateProfileString "Texte", "Text5", iText5, App.Path & cPath
    
    WritePrivateProfileString "Slider", "sliSAP", CStr(sliSAP), App.Path & cPath
    WritePrivateProfileString "Slider", "sliKNG", CStr(sliKNG), App.Path & cPath
    WritePrivateProfileString "Slider", "sliSIZ", CStr(sliSIZ), App.Path & cPath
End Sub
 
Hi,

Habe den Fehler gefunden und gepostet, was er war. Ist aber anscheinend wieder weg. Also, das Problem war das, dass die Form mit den TextBoxen nicht jedes Mal geöffnet wird. Also läd er nichts und speichert die werde auch nicht mehr, weil die Variablen im Modul nicht auf den Wert der Textboxen gesetzt werden. Daher passierte folgendes:

1. Start: Variablen alle eingestellt und bei nachsehen auf der Form vorhanden und wieder gespeichert
2. Start: Variablen werden gelesen, man guckt nicht in die Form und daher werden sie nicht mehr gespeichert
3. Start: Variablen nicht mehr vorhanden

Ganz einfach. Ansonsten funktioniert das Modull sogar so wie ich es gepostet habe.

Aber dein Code ist besser find ich :)
 
Zurück