Anfängerfrage: Feld automatisch füllen
Moderator: Moderatoren
Anfängerfrage: Feld automatisch füllen
Hallo!
Ich habe Base (OOo 3.2 oder aktuelles LO) als Frontend für eine MySQL-Datenbank eingerichtet. In der Datenbankstruktur gibt es ein Feld, in der beim Anlegen eines Satzes oder bei einer Änderung der jeweilige User eingetragen werden soll. Einen konstanten Wert einzutragen habe ich schon geschafft...
Kann ich Base irgendwie beibringen, daß eines der Felder in einem Formular jedesmal mit dem aktuell in Windows angemeldeten Usernamen gefüllt werden soll? Die dazugehörige .odb Datei liegt auf dem lokalen Netzwerk, kann und soll somit von verschiedenen Usern benutzt werden können.
Wie man merkt, bin ich bezüglich Base ein ziemlicher Anfänger. Gibt es empfehlenswerte Literatur zu solchen Details? Oder macht es Sinn, sich ein Buch über Access zu beschaffen, weil die Logik übertragbar ist?
Vielen Dank im voraus und
viele Grüße!
Ich habe Base (OOo 3.2 oder aktuelles LO) als Frontend für eine MySQL-Datenbank eingerichtet. In der Datenbankstruktur gibt es ein Feld, in der beim Anlegen eines Satzes oder bei einer Änderung der jeweilige User eingetragen werden soll. Einen konstanten Wert einzutragen habe ich schon geschafft...
Kann ich Base irgendwie beibringen, daß eines der Felder in einem Formular jedesmal mit dem aktuell in Windows angemeldeten Usernamen gefüllt werden soll? Die dazugehörige .odb Datei liegt auf dem lokalen Netzwerk, kann und soll somit von verschiedenen Usern benutzt werden können.
Wie man merkt, bin ich bezüglich Base ein ziemlicher Anfänger. Gibt es empfehlenswerte Literatur zu solchen Details? Oder macht es Sinn, sich ein Buch über Access zu beschaffen, weil die Logik übertragbar ist?
Vielen Dank im voraus und
viele Grüße!
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Anfängerfrage: Feld automatisch füllen
Das würde ich mit MySQL CREATE TRIGGER erledigen.Blackavar hat geschrieben:für eine MySQL-Datenbank
Unter OOo geht das nur mit Code - die DB erledigt das von alleine.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Anfängerfrage: Feld automatisch füllen
Hi,
vielleicht liege ich völlig daneben, aber ich kann meinen Usernamen unter W7 so auslesen:
Gruß R
vielleicht liege ich völlig daneben, aber ich kann meinen Usernamen unter W7 so auslesen:
Code: Alles auswählen
function f_getuser as string
f_getuser = Environ("USERNAME")
end function
Sub showUser
msgbox f_getuser
end sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Anfängerfrage: Feld automatisch füllen
F1>OpenOffice.org Basic>ENVIRON [Laufzeit]
bei unterschiedlichen Betriebssystemen müssen unterschiedliche Variablen abgefragt werden
bei unterschiedlichen Betriebssystemen müssen unterschiedliche Variablen abgefragt werden
Code: Alles auswählen
sUser = "unable to determine USER "
sHostname = "unable to determine HOSTNAME"
Select Case GetGuiType
Case 1 ' Windows
sUser = Environ( "USERNAME" )
sHostname = Environ( "COMPUTERNAME" )
Case 3 ' MacOS
sUser = Environ( "USER" )
sHostname = Environ( "SHORTHOST" )
Case 4 ' Unix
sUser = Environ( "USER" )
sHostname = Environ( "HOSTNAME" )
Case Else
sUser = "unknown operating system - no way to find USER"
sHOSTNAME = " no way to find out HOSTNAME"
End Select
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Anfängerfrage: Feld automatisch füllen
So ist es.Gast hat geschrieben:Ich nehme an, dass die Datenbank nur mit den Rechten eines Users genutzt wird und damit der Trigger immer nur brav den entsprechenden Namen nutzen würde.
Da sehe ich eher das Problem, daß es einfach "vergessen" wird, dort etwas auszuwählen, und immer der Default-Wert stehen bleibt.Gast hat geschrieben:Praktischer wäre da ein Listfeld mit allen Nutzernamen im Hauptformular - eventuell auch als Tabellenkontrollfeld. Der User wählt seinen Namen, der dann anschließend in alle Datensätze des Subformulars übertragen wird. Setzt natürlich voraus, dass niemand einem anderen etwas unterschieben will.
Viele Grüße
Volker
Re: Anfängerfrage: Feld automatisch füllen
Klingt sehr vielversprechend. Wo muß denn dieser Code in Base hinterlegt werden?F3K Total hat geschrieben: vielleicht liege ich völlig daneben, aber ich kann meinen Usernamen unter W7 so auslesen:Code: Alles auswählen
function f_getuser as string f_getuser = Environ("USERNAME") end function Sub showUser msgbox f_getuser end sub
Viele Grüße
Volker
Re: Anfängerfrage: Feld automatisch füllen
Am besten gehst Du folgendermaßen vor:
Das Feld ist das, was den Usernamen aufnehmen soll. Das Makro lässt Du bei jedem neu gegründeten Datensatz ablaufen - oder sobald ein Feld in einem neuen Datensatz den Focus verliert, damit nicht jeder neue Datensatz sofort mit dem Usernamen beschrieben wird.
Gruß
Robert
Moderation,4: CODE tags gesetzt
Code: Alles auswählen
SUB Benutzername_einfuegen
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
oForm=oDrawpage.Forms.getByName("NameFormular")
oFeld=oForm.getByName("NameFeld")
oFeld.BoundField.updateString(Environ("USERNAME"))
END SUB
Gruß
Robert
Moderation,4: CODE tags gesetzt
Re: Anfängerfrage: Feld automatisch füllen
Ich habe den Code als Makro gespeichert. Wenn ich jetzt das Formular bearbeite, habe ich unter Formular-Eigenschaften auf dem Feld unter "Ereignisse" die Möglichkeiten:RobertG hat geschrieben:Am besten gehst Du folgendermaßen vor:
Das Feld ist das, was den Usernamen aufnehmen soll. Das Makro lässt Du bei jedem neu gegründeten Datensatz ablaufen - oder sobald ein Feld in einem neuen Datensatz den Focus verliert, damit nicht jeder neue Datensatz sofort mit dem Usernamen beschrieben wird.Code: Alles auswählen
SUB Benutzername_einfuegen oDoc=thisComponent oDrawpage=oDoc.Drawpage REM Lage des Feldes in dem entsprechenden Formular aufsuchen oForm=oDrawpage.Forms.getByName("NameFormular") oFeld=oForm.getByName("NameFeld") oFeld.BoundField.updateString(Environ("USERNAME")) END SUB
Vor dem Zurücksetzen
Nach dem Zurücksetzen
Vor dem Submit
Beim Laden
Vor dem erneuten Laden
Beim erneuten Laden
Vor dem Entladen
Beim Entladen
Löschen bestätigen
Vor der Datensatzaktion
Nach der Datensatzaktion
Vor dem Datensatzwechsel
Nach dem Datensatzwechsel
Parameter füllen
Fehler aufgetreten
Ich habe das Makro dem "Vor der Datensatzaktion" zugewiesen, es schein aber nicht zu funktionieren.
Was mach ich falsch?
Viele Grüße
Volker
Re: Anfängerfrage: Feld automatisch füllen
Hi,
ich würde es mal mit "Nach der Datensatzaktion" (Änderung) versuchen.
Gruß R
ich würde es mal mit "Nach der Datensatzaktion" (Änderung) versuchen.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Anfängerfrage: Feld automatisch füllen
Hallo Volker,
Jetzt kommt es natürlich auf die folgenden Komponenten an:
- Die Variablen sind bisher nicht definiert worden. Wenn Du irgendwo "option explicit" in den Makros angegeben hast funktioniert das Makro entsprechend nicht. Muss also mit "DIM oDoc AS OBJECT" usw. nachgebessert werden.
- Du hast vorher noch gar keine Makros verwandt und eventuell die Makrosicherheit noch so eingestellt, dass Makros grundsätzlich nicht ausgeführt werden. Einstellbar ist die Sicherheit unter Extras → Optionen → OpenOffice → Sicherheit → Makrosicherheit (Muss auf Mittel eingestellt sein, damit Du wenigstens gefragt wirst, ob Makros ausgeführt werden; ich gebe einen Pfad an, der als Vertrauenswürdige Quelle angesehen werden soll)
- Du hast in dem Dokument noch keine Makros stehen gehabt. Dies war also das erste Makro. Dann kann ja die Sicherheitsabfrage noch nicht gekommen sein. Folglich sind die Makros erst einmal deaktiviert, bis das Dokument einmal geschlossen und anschließend wieder aufgerufen wurde.
Hast Du denn irgendwelche Fehlermeldungen? Willst Du den Eintrag vor dem Abspeichern sehen (dann besser an ein Feld binden, in dem eine Eingabe erfolgen soll - dort mit Fokusverlust koppeln ...)?
Gruß
Robert
Ich habe das gerade einmal in einer Testdatenbank laufen lassen. Natürlich wird der Username erst geschrieben, wenn abgespeichert wird - weil Du ja "Vor der Datensatzaktion" geschrieben hast. Gehe ich also zurück zu dem Datensatz, so steht dort mein Nutzername (der, wie ich ja jetzt weiß, unter Linux dann einfach über "USER" zu erreichen ist).Blackavar hat geschrieben: Ich habe das Makro dem "Vor der Datensatzaktion" zugewiesen, es schein aber nicht zu funktionieren.
Jetzt kommt es natürlich auf die folgenden Komponenten an:
- Die Variablen sind bisher nicht definiert worden. Wenn Du irgendwo "option explicit" in den Makros angegeben hast funktioniert das Makro entsprechend nicht. Muss also mit "DIM oDoc AS OBJECT" usw. nachgebessert werden.
- Du hast vorher noch gar keine Makros verwandt und eventuell die Makrosicherheit noch so eingestellt, dass Makros grundsätzlich nicht ausgeführt werden. Einstellbar ist die Sicherheit unter Extras → Optionen → OpenOffice → Sicherheit → Makrosicherheit (Muss auf Mittel eingestellt sein, damit Du wenigstens gefragt wirst, ob Makros ausgeführt werden; ich gebe einen Pfad an, der als Vertrauenswürdige Quelle angesehen werden soll)
- Du hast in dem Dokument noch keine Makros stehen gehabt. Dies war also das erste Makro. Dann kann ja die Sicherheitsabfrage noch nicht gekommen sein. Folglich sind die Makros erst einmal deaktiviert, bis das Dokument einmal geschlossen und anschließend wieder aufgerufen wurde.
Hast Du denn irgendwelche Fehlermeldungen? Willst Du den Eintrag vor dem Abspeichern sehen (dann besser an ein Feld binden, in dem eine Eingabe erfolgen soll - dort mit Fokusverlust koppeln ...)?
Gruß
Robert
Re: Anfängerfrage: Feld automatisch füllen
Hallo,F3K Total hat geschrieben: ich würde es mal mit "Nach der Datensatzaktion" (Änderung) versuchen.
es wird jetzt immerhin aufgerufen. Folgende Fehlermeldung erscheint:
BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten.
Type: com.sun.star.container.NoSuchElementException
Message: .
Der Code sieht folgendermaßen aus:
Code: Alles auswählen
SUB Benutzername_einfuegen
oDoc=thisComponent
oDrawpage=oDoc.Drawpage
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
oForm=oDrawpage.Forms.getByName("TAGEBUCH.FUS")
oFeld=oForm.getByName("Benutzer")
oFeld.BoundField.updateString(Environ("USERNAME"))
END SUB
Re: Anfängerfrage: Feld automatisch füllen
Siehe Vorposting, es kam nur eine FehlermeldungRobertG hat geschrieben: Ich habe das gerade einmal in einer Testdatenbank laufen lassen. Natürlich wird der Username erst geschrieben, wenn abgespeichert wird - weil Du ja "Vor der Datensatzaktion" geschrieben hast. Gehe ich also zurück zu dem Datensatz, so steht dort mein Nutzername (der, wie ich ja jetzt weiß, unter Linux dann einfach über "USER" zu erreichen ist).

Ich habe das Makro einfach unter Extras/Makros... eingetragen...Jetzt kommt es natürlich auf die folgenden Komponenten an:
- Die Variablen sind bisher nicht definiert worden. Wenn Du irgendwo "option explicit" in den Makros angegeben hast funktioniert das Makro entsprechend nicht. Muss also mit "DIM oDoc AS OBJECT" usw. nachgebessert werden.
Die Sicherheitsmeldung kam nach dem nächsten mal Starten von Base, das hab ich entsprechend umgestellt.- Du hast vorher noch gar keine Makros verwandt und eventuell die Makrosicherheit noch so eingestellt, dass Makros grundsätzlich nicht ausgeführt werden. Einstellbar ist die Sicherheit unter Extras → Optionen → OpenOffice → Sicherheit → Makrosicherheit (Muss auf Mittel eingestellt sein, damit Du wenigstens gefragt wirst, ob Makros ausgeführt werden; ich gebe einen Pfad an, der als Vertrauenswürdige Quelle angesehen werden soll)
- Du hast in dem Dokument noch keine Makros stehen gehabt. Dies war also das erste Makro. Dann kann ja die Sicherheitsabfrage noch nicht gekommen sein. Folglich sind die Makros erst einmal deaktiviert, bis das Dokument einmal geschlossen und anschließend wieder aufgerufen wurde.
Fehlermeldung siehe letztes Posting. Klar wäre das Klasse, wenn ich den Eintrag vor dem Abspeichern sehen könnte, aber ich wäre schon froh wenn es ohne das geht. Nicht, daß ich irgendwann gar nichts mehr kapiere, da das für mich komplettes Neuland ist.Hast Du denn irgendwelche Fehlermeldungen? Willst Du den Eintrag vor dem Abspeichern sehen (dann besser an ein Feld binden, in dem eine Eingabe erfolgen soll - dort mit Fokusverlust koppeln ...)?
Gruß
Volker
Re: Anfängerfrage: Feld automatisch füllen
Hallo Volker,
ich gehe das erst einmal im Detail durch und versuche dann einmal einen Dateianhang hochzuladen, der die Funktion zeigt.
Das Makro wird in dem Datenbankdokument selbst gespeichert. Du musst also ein Modul in der Datenbankdatei erstellen. In diesem Modul ist der entsprechende Inhalt zu speichern, den ich Dir aufgeschrieben hatte. Die Fehlermeldung, die Du bekommst, deutet darauf hin, dass entweder das Formular oder das Formularfeld nicht gefunden wird. Habe ich, wenn ich mich bei so einer Eingabe verschreibe.
Das Makro habe ich in dem beigefügten Beispiel an das Feld Inhalt gebunden. Du kannst jedes Feld mit einem Makro verbinden. Ich habe jetzt einfach das Inhaltsfeld genommen und den Fokusverlust als Auslöser. Dann wird der Name jedes Mal geschrieben, wenn der Cursor erst in dem Inhaltsfeld war und dann wieder herausgekommen ist. Das Feld für den Nutzernamen kannst Du auch für die Eingabe sperren, so dass nicht nachträglich ein Nutzer angegeben wird, der eventuell gar nicht existiert.
Gruß
Robert
ich gehe das erst einmal im Detail durch und versuche dann einmal einen Dateianhang hochzuladen, der die Funktion zeigt.
Das Makro wird in dem Datenbankdokument selbst gespeichert. Du musst also ein Modul in der Datenbankdatei erstellen. In diesem Modul ist der entsprechende Inhalt zu speichern, den ich Dir aufgeschrieben hatte. Die Fehlermeldung, die Du bekommst, deutet darauf hin, dass entweder das Formular oder das Formularfeld nicht gefunden wird. Habe ich, wenn ich mich bei so einer Eingabe verschreibe.
Das Makro habe ich in dem beigefügten Beispiel an das Feld Inhalt gebunden. Du kannst jedes Feld mit einem Makro verbinden. Ich habe jetzt einfach das Inhaltsfeld genommen und den Fokusverlust als Auslöser. Dann wird der Name jedes Mal geschrieben, wenn der Cursor erst in dem Inhaltsfeld war und dann wieder herausgekommen ist. Das Feld für den Nutzernamen kannst Du auch für die Eingabe sperren, so dass nicht nachträglich ein Nutzer angegeben wird, der eventuell gar nicht existiert.
Gruß
Robert
- Dateianhänge
-
- Username.odb
- Tabelle mit Formular. Im Formular wird der USERNAME automatisch erstellt
- (13.16 KiB) 128-mal heruntergeladen