Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ungültiger Bezeichner System bei Aufruf von System.PrivateProfileString(...)

99 views
Skip to first unread message

Frank Scholz

unread,
Aug 22, 2004, 2:20:16 PM8/22/04
to
Hallo liebe NG,

beim stöbern im Internet habe ich gelesen, das man eine Ini-Datei mit der
Funktion PrivateProfileString auslesen kann. Hierfür habe ich folgenden Code
in eine Funktion geschrieben:

Public Function fct_DBSystemFile(sSection As String, sKey As String) As
String

Dim fso As New FileSystemObject

If fso.FileExists("ReMaDATA.ini") = True Then
fct_DBSystemFile = System.PrivateProfileString("ReMaDATA.ini",
sSection, sKey)
Else
Msgbox "FEHLER"
Endif

End Function

Jedoch kann ich den Code nicht kompilieren, da der Bezeichner 'System' nicht
erkannt wird.
Habe ich die Funktion falsch geschrieben? Fehlt ein Verweis?

Vielen Dank für Eure Hilfe.

Gruß
Frank Scholz


Michel Fouquet

unread,
Aug 22, 2004, 3:48:06 PM8/22/04
to
Hallo Frank,

"Frank Scholz" <schf...@web.de> schrieb im Newsbeitrag
news:%23yFt8SH...@tk2msftngp13.phx.gbl

Das würde wohl in Word so funktionieren, in Access aber nicht.

Nimm statt dessen das Modul mdlINIDatei aus KnowHow.MDB

mfg,
Michel
--
FAQ: http://www.donkarl.com/AccessFAQ.htm
KnowHow.mdb: http://www.freeaccess.de/knowhow.asp

Henry Habermacher [MVP Access]

unread,
Aug 22, 2004, 4:10:11 PM8/22/04
to
Hallo Frank

Frank Scholz <schf...@web.de> wrote:

Dort stand sicher noch mehr dabei, ausser dieser Code, so z.B. dass das
für Word und nicht für Access ist.
Weisst Du, was dieser Code denn macht?

Zuerst mal:
Damit Du ein FileSystemObject anlegen kannst, musst Du einen Verweis auf
die Microsoft Scripting Runtime und evt. auch auf die Windows Scription
Host Runtime Library setzen.
Desweiteren ist das System-Object im Word Object Model enthalten, Du
musst also auch eine Referenz auf Word setzen. Zudem musst Du noch die
Datei ReMaDATA.ini haben, wo der Schlüssel reingeschrieben werden soll.
Am besten schaust Du mal in der Word VBA Online Hilfe nach, was diese
Methode überhaupt macht.

Dann noch ein paar Kommentare: Statt das FileSystemObject zu bemühen,
nur um zu schauen, ob es die Datei ReMaDATA.ini gibt, kannst Du auch das
ganze mit dem FileSystem Object weglassen und statt dessen einfach:

If len(Dir("ReMaDATA.ini")) > 0 Then
..
Else
MsgBox "Datei ReMaDATA.ini nicht gefunden"
End If

Statt diese Daten in eine Datei ReMaDATA.ini wegzuschreiben, empfehle
ich Dir die Registry zu verwenden. INI-Files waren in der 16-bit Welt
üblich. In Win32 wurde die Registry vorgesehen, damit der INI-Wildwuchs
endlich verschwindet.
Dies kannst Du einfach mit der Funktion SaveSettings machen (welche in
Access 2.0 auch existiert hat, dort aber eben ein INI-File angelegt
hat), das würde dann so aussehen:

Dieser schreibt dann in HKCU\Software\VB and VBA Program
Settings\ReMaDATA
im Zweig sSection einen Schlüssel sKey rein. Dieser ist aber "leer",
weil Du mit obiger Funktion dort ja nichts reinschreibst, nur den
Schlüssel anlegst, rsp. weil ich einfach den vergessenen Parameter in
der Funktion auf leer setze. Einfacher verwendest Du die SaveSetting
Funktion direkt, ohne diese in eine weitere Funktion einzukapseln.

Public Function fct_DBSystemFile(sSection As String, sKey As String) As
String

Call SaveSetting("ReMaDATA", sSection, sKey, "leer")
End Function

Ob dies bei Dir ebenfalls in \VB and VBA Program Settings\
reingeschrieben wird, kann ich nicht sagen, kann sein, dass das
Installationsabhängig ist. Nimm' das einfach mal als gegeben an, das ist
das unproblematischste. Windows/VBA wird es genau dort reinschreiben, wo
es es später mit GetSetting auch wieder auslesen oder mit DeleteSetting
wieder löschen wird.

Gruss
Henry

--
Keine E-Mails auf Postings in NGs senden!
Don't send e-mails to postings in newsgroups!
KB: http://support.microsoft.com/default.aspx
FAQ: http://www.donkarl.com/AccessFAQ.htm
OH: Online Hilfe von Microsoft Access (Taste F1)
Downloads: http://www.dbdev.org

Henry Habermacher [MVP Access]

unread,
Aug 22, 2004, 4:11:47 PM8/22/04
to
Hallo Michel

Michel Fouquet <MaPou...@wanadoo.fr> wrote:
>
> Das würde wohl in Word so funktionieren, in Access aber nicht.

Und auch dort nur mit Verweis auf die Scripting Bibliothek...

>
> Nimm statt dessen das Modul mdlINIDatei aus KnowHow.MDB

Wieso soll denn überhaupt eine INI Datei geschrieben werden. Seit Win32
ist dafür die Registry zuständig und da würde ich das auch hinschreiben,
nicht in eine INI-Datei.

Michel Fouquet

unread,
Aug 22, 2004, 4:42:54 PM8/22/04
to
"Henry Habermacher [MVP Access]" <DontSp...@psp-online.com> schrieb
im Newsbeitrag news:2osd9oF...@uni-berlin.de

> Wieso soll denn überhaupt eine INI Datei geschrieben werden.

da darfste mich nicht nach fragen, Henry! Vielleicht geht's ums "Hacken"
(ich meine nicht: "Haken") einer bestehenden Anwendung.

Mal unabhängig vom OP und losgelöst vom INI-Aspekt: es könnte ja eine
x-beliebige Textdatei mit dem *Aufbau* einer INI-Datei (Section / Key)
sein. INNO u.a. verwenden sowas praktischerweise für die Language Files.

> Seit
> Win32 ist dafür die Registry zuständig und da würde ich das auch
> hinschreiben, nicht in eine INI-Datei.

Ohne diesen alten Religionskrieg zwischen INI-Befürwortern und
Registry-Fans wieder aufleben lassen zu wollen: es ist schon praktisch,
mal eben eine Datei zu überspielen oder per Texteditor eine kleine
Änderung zu machen.

Mit Gruß nach SEA,
Michel

Henry Habermacher [MVP Access]

unread,
Aug 22, 2004, 4:56:52 PM8/22/04
to
Hallo Michael

Michel Fouquet <MaPou...@wanadoo.fr> wrote:

> Ohne diesen alten Religionskrieg zwischen INI-Befürwortern und
> Registry-Fans wieder aufleben lassen zu wollen: es ist schon
> praktisch, mal eben eine Datei zu überspielen oder per Texteditor
> eine kleine Änderung zu machen.

Und genau so praktisch ist es eine Sektion in der Registry zu
exportieren, dort schnell mal was zu ändern, dann zu testen und danach
den Export auf die erzeugte Reg-Datei wieder einzuspielen. Diese
Reg-Dateien lassen sich übrigens auch problemlos in einem Texteditor
ändern, wenn Dir das lieber ist als die Registry.

Michel Fouquet

unread,
Aug 22, 2004, 5:20:49 PM8/22/04
to
Hallo Henry,

"Henry Habermacher [MVP Access]" <DontSp...@psp-online.com> schrieb

im Newsbeitrag news:2osfknF...@uni-berlin.de


>
> Und genau so praktisch ist es eine Sektion in der Registry zu
> exportieren, dort schnell mal was zu ändern, dann zu testen und danach
> den Export auf die erzeugte Reg-Datei wieder einzuspielen. Diese
> Reg-Dateien lassen sich übrigens auch problemlos in einem Texteditor
> ändern, wenn Dir das lieber ist als die Registry.

da gebe ich Dir gerne recht, dass das Arbeiten mit *.reg-Dateien ebenso
praktisch ist. Diese Möglichkeit ist vielen gar nicht bekannt oder wird
nur selten und/oder zaghaft benutzt.

Der Unterschied liegt wohl auch darin, welche Zugriffsrechte der User
auf Verzeichnisse und Dateien hat. Es wird in vielen Fällen leichter,
einfacher, sicherer (welchen DAU willst Du denn schon gerne an der
Registry rumfummeln lassen?) sein, eine Textdatei im
Anwendungsverzeichnis des betreffenden Users zu handhaben.

Aber wie gesagt: ich bin in dieser Hinsicht leidenschaftslos. Gut ist
es, viele Möglichkeiten und ihre Auswirkungen zu kennen, um dann bewusst
und zielführend die geeignete Vorgehensweise zu wählen.

In diesem Sinne,
Michel

Henry Habermacher [MVP Access]

unread,
Aug 22, 2004, 5:29:19 PM8/22/04
to
Hallo Michel

Michel Fouquet <MaPou...@wanadoo.fr> wrote:

> .. Gut ist


> es, viele Möglichkeiten und ihre Auswirkungen zu kennen, um dann
> bewusst und zielführend die geeignete Vorgehensweise zu wählen.

Das hast Du schön gesagt!

(LOL)

0 new messages