Seite 1 von 1
Anfängerfrage: Feld automatisch füllen
Verfasst: Di, 17.04.2012 18:06
von Blackavar
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!
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Di, 17.04.2012 20:39
von komma4
Blackavar hat geschrieben:für eine MySQL-Datenbank
Das würde ich mit MySQL
CREATE TRIGGER erledigen.
Unter OOo geht das nur mit Code - die DB erledigt das von alleine.
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Di, 17.04.2012 22:44
von F3K Total
Hi,
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
Gruß R
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Mi, 18.04.2012 09:13
von komma4
F1>OpenOffice.org Basic>ENVIRON [Laufzeit]
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
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Mi, 18.04.2012 09:33
von Blackavar
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.
So ist es.
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.
Da sehe ich eher das Problem, daß es einfach "vergessen" wird, dort etwas auszuwählen, und immer der Default-Wert stehen bleibt.
Viele Grüße
Volker
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Mi, 18.04.2012 09:35
von Blackavar
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
Klingt sehr vielversprechend. Wo muß denn dieser Code in Base hinterlegt werden?
Viele Grüße
Volker
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Mi, 18.04.2012 19:09
von RobertG
Am besten gehst Du folgendermaßen vor:
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
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
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Mi, 18.04.2012 22:27
von Blackavar
RobertG hat geschrieben:Am besten gehst Du folgendermaßen vor:
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
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.
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:
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
Verfasst: Mi, 18.04.2012 22:55
von F3K Total
Hi,
ich würde es mal mit "Nach der Datensatzaktion" (Änderung) versuchen.
Gruß R
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Do, 19.04.2012 16:38
von RobertG
Hallo Volker,
Blackavar hat geschrieben:
Ich habe das Makro dem "Vor der Datensatzaktion" zugewiesen, es schein aber nicht zu funktionieren.
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).
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
Verfasst: Fr, 20.04.2012 18:47
von Blackavar
F3K Total hat geschrieben:
ich würde es mal mit "Nach der Datensatzaktion" (Änderung) versuchen.
Hallo,
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
Kann damit jemand etwas anfangen? Der Name des Formulars ist richtig...
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Fr, 20.04.2012 18:53
von Blackavar
RobertG 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).
Siehe Vorposting, es kam nur eine Fehlermeldung
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.
Ich habe das Makro einfach unter Extras/Makros... eingetragen...
- 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.
Die Sicherheitsmeldung kam nach dem nächsten mal Starten von Base, das hab ich entsprechend umgestellt.
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 ...)?
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.
Gruß
Volker
Re: Anfängerfrage: Feld automatisch füllen
Verfasst: Fr, 20.04.2012 19:59
von RobertG
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