PDA

Vollständige Version anzeigen : Option Explicit


yellow2007
11.06.2012, 16:43
Hallo,
ich habe vor kurzem in meiner Datenbank eine Leistungsoptimierung druchführen lassen und der Assistent hat mir geraten, die Funktion Option Explicit zu verwenden, jedoch nur dann, wenn die Variablen alle deklariert sind. Ich habe in einem Code folgende Variable:

varUpdate = GetIniString("Pfade", "Updatepfad", "", CurrentProject.Path & "\buecher.ini")

Wie muss ich diese Variable jetzt deklarieren?

Vielen Dank

MfG

Anne Berg
11.06.2012, 16:46
Hallo,varUpdate = GetIniString(...)dem Namen der Funktion nach, sollte es wohl eine String-Variable sein.
Um sicher zu gehen, schau nach, was die Funtion als Rückgabewert liefert.

yellow2007
11.06.2012, 17:35
und wie geht das genau? ich glaube ich habe das schon einmal gemacht, kann mich aber leider nicht daran erinnern.

mfg

gpswanderer
11.06.2012, 17:37
Hallo,
das erkennst Du bereits in der ersten Zeile der Funktion.
Zeige die mal hier.

Option Explicit muss/sollte in allen Modulen und Klassenmodulen gesetzt sein.
In den Optionen kannst einen Haken setzen, der Option Explicit generell einschaltet.

yellow2007
11.06.2012, 17:41
Private Sub Form_Current()

varUpdate = GetIniString("Pfade", "Updatepfad", "", CurrentProject.Path & "\buecher.ini")

If Dir(varUpdate & "\Bücher.accdb") = "" Then
Else
If MsgBox("Es ist ein Update verfügbar! Soll das Update jetzt installiert werden?", vbQuestion + vbYesNo, "Programmupdater") = vbYes Then
If MsgBox("Soll die Datenbank vor dem Update gesichert werden?", vbQuestion + vbYesNo, "Datenbanksicherung") = vbYes Then
Shell CurrentProject.Path & "\Module\Sicherung.bat"
Else
Shell CurrentProject.Path & "\Module\Updater.bat"
DoCmd.Quit
End If
Shell CurrentProject.Path & "\Module\Updater.bat"
DoCmd.Quit
Else
MsgBox "Bitte führen Sie das Programmupdate sobald wie möglich durch.", vbExclamation, "Programmupdater"
End If
End If
End Sub


also das ist die gesamte funktion.

mfg

gpswanderer
11.06.2012, 17:46
Hallo,
nein, das ist keine Funktion, das ist die Ereignisprozedur "Beim Anzeigen". Ist zwar genaugenommen auch ein Funktion, wird aber nicht so genannt.
Die Funktion die Du brauchst heist "GetIniString" zu finden in den Modulen. Aber auf Grund der Zeile
If Dir(varUpdate & "\Bücher.accdb") = "" Then
kann es nur String sein, sonst könntest Du das & nicht verwenden.

yellow2007
11.06.2012, 17:48
Option Compare Database
Option Explicit

Public 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

Public 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 Function GetIniString(ByVal Sektion As String, _
ByVal Titel As String, ByVal Vorgabe As String, _
ByVal INIFile As String, _
Optional ByVal nSize As Long = 256) As String

Dim sValue As String
Dim lResult As Long

sValue = Space$(nSize)
lResult = GetPrivateProfileString(Sektion, Titel, _
Vorgabe, sValue, nSize, INIFile)
GetIniString = Left$(sValue, lResult)
End Function




das ist die ini-funktion, also die getinistring

gpswanderer
11.06.2012, 17:53
Hallo,
sag ich doch, String.
Public Function GetIniString(ByVal Sektion As String, _
ByVal Titel As String, ByVal Vorgabe As String, _
ByVal INIFile As String, _
Optional ByVal nSize As Long = 256) As String
.
.

yellow2007
11.06.2012, 17:54
gut und was muss ich jetzt machen, damit alles deklariert wird?

gpswanderer
11.06.2012, 18:04
Hallo,
mit Dim wird deklariert:
Private Sub Form_Current()
Dim varUpdate As String
varUpdate = GetIniString("Pfade", "Updatepfad", "", CurrentProject.Path & "\buecher.ini")

Jede im Code verwendete Variable muss deklariert werden. Setze in jedem Modul die Option Explicit und dann kompilierst Du den Code. Jede fehlende Deklaration wird jetzt vom Compiler angemeckert. Dann musst Du so lange die angemeckerten Variablen mit dem korrekten Datentyp deklarieren/dimensionieren bis keine Fehlermeldung mehr kommt.

maikek
11.06.2012, 18:06
Moin,
du gibst einfach am Anfang der Prozedur, in der die Variable verwendet wird, den Datentyp an:
Private Sub Form_Current()
Dim varUpdate as String
varUpdate = GetIniString("Pfade", "Updatepfad", "", CurrentProject.Path & "\buecher.ini")
If Dir(varUpdate '...
Am besten benennst du die Variablen auch so, dass du den Typ direkt entnehmen kannst, in diesem Fall also z.B.
Dim stUpdate as String
Eine kurze Beschreibung/Anleitung findest du hier.
DBWiki, Tipps zurVariablendeklaration (http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Tipps_zur_Variablendeklaration)
maike

gpswanderer
11.06.2012, 18:13
Hallo,
wenn Du dem Rat von Maike fogst und die Variable umbenennst (was sinnvoll ist), musst Du überall den Namen anpassen.
Wollte ich nur vorbeugend noch erwähnt haben.
Private Sub Form_Current()
Dim stUpdate As String
stUpdate = GetIniString("Pfade", "Updatepfad", "", CurrentProject.Path & "\buecher.ini")
If Dir(stUpdate & "\Bücher.accdb") = "" Then

yellow2007
11.06.2012, 18:44
alles klar vielen dank, funktioniert sehr gut :)

mfg