Anfängerfrage: Feld automatisch füllen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Blackavar
Beiträge: 6
Registriert: Di, 17.04.2012 16:42

Anfängerfrage: Feld automatisch füllen

Beitrag 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!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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.
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)
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
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)
Blackavar
Beiträge: 6
Registriert: Di, 17.04.2012 16:42

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
Blackavar
Beiträge: 6
Registriert: Di, 17.04.2012 16:42

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
Blackavar
Beiträge: 6
Registriert: Di, 17.04.2012 16:42

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Anfängerfrage: Feld automatisch füllen

Beitrag von F3K Total »

Hi,
ich würde es mal mit "Nach der Datensatzaktion" (Änderung) versuchen.
Gruß R
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
Blackavar
Beiträge: 6
Registriert: Di, 17.04.2012 16:42

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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...
Blackavar
Beiträge: 6
Registriert: Di, 17.04.2012 16:42

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Anfängerfrage: Feld automatisch füllen

Beitrag 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
Dateianhänge
Username.odb
Tabelle mit Formular. Im Formular wird der USERNAME automatisch erstellt
(13.16 KiB) 128-mal heruntergeladen
Antworten