❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Artikelnr. bei Eingabe automatisch anlegen u. Bestand zählen
Artikelnr. bei Eingabe automatisch anlegen u. Bestand zählen
Hallo,
Ich möchte mir eine Datenbank erstellen, um meine Modellbahn bestandstechnisch zu erfassen. Hierzu möchte ich ein Eingabeformular verwenden bei dem ich einfach die Artikelnr. eingebe und das Programm dann selbständig entscheidet ob diese Artikelnr angelegt werden muß und dann als Menge 1 gezählt wird oder wenn diese Artikelnr schon vorhanden ist einfach bei der Menge einer dazugezählt wird. Habe das Handbuch schon mehrmals durchgeblättert aber bei diesem Punkt werde ich nicht so ganz schlau daraus. Die Artikel werden nach Spurweite (Maßstab) unterteilt. Die Tabellen kann zu dem Artikel auch Zusatzinformationen enthalten, welche bei einer späteren Abfrage benötigt werden.
Gruß
StefanONE
Ich möchte mir eine Datenbank erstellen, um meine Modellbahn bestandstechnisch zu erfassen. Hierzu möchte ich ein Eingabeformular verwenden bei dem ich einfach die Artikelnr. eingebe und das Programm dann selbständig entscheidet ob diese Artikelnr angelegt werden muß und dann als Menge 1 gezählt wird oder wenn diese Artikelnr schon vorhanden ist einfach bei der Menge einer dazugezählt wird. Habe das Handbuch schon mehrmals durchgeblättert aber bei diesem Punkt werde ich nicht so ganz schlau daraus. Die Artikel werden nach Spurweite (Maßstab) unterteilt. Die Tabellen kann zu dem Artikel auch Zusatzinformationen enthalten, welche bei einer späteren Abfrage benötigt werden.
Gruß
StefanONE
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo StefanONE,
Anschließend geht der Rest nur mit Makros:
Der Feldinhalt muss ausgelesen werden - siehe Handbuch, Einstieg Makros, ...currentValue ...
Danach eine Abfrage, ob die Nummer schon vorhanden ist:
SELECT COUNT("Artikelnummer") FROM "Tabelle" WHERE "Artikelnummer" = Feldinhalt
Ergebnis auslesen, wenn 1, dann erfolgt ein Update, wenn 0, dann erfolgt ein Insert.
Wenn 1:
UPDATE "Tabelle" SET "Anzahl" = "Anzahl"+1 WHERE "Artikelnummer" = Feldinhalt
Wenn 0:
INSERT INTO "Tabelle" ("Artikelnummer", "Anzahl") VALUES (Feldinhalt, 1)
Sobald Du automatisch irgendetwas hochzählen willst wirst Du an Makros nicht vorbeikommen. Ansonsten schau Dir zur Suche und Filterung die entsprechenden Kapitel im Handbuch an (S. 240 ff)
Gruß
Robert
Du brauchst zuerst einmal ein Eingabefeld für die entsprechende Nummer (Suchbegriff). Von diesem Suchbegriff aus wird Deine Datenbank durchforstet. Kann ja nur ein Datensatz sein, wenn Du lediglich mit Nummerierungen arbeitest.StefanONE hat geschrieben:Hierzu möchte ich ein Eingabeformular verwenden bei dem ich einfach die Artikelnr. eingebe und das Programm dann selbständig entscheidet ob diese Artikelnr angelegt werden muß und dann als Menge 1 gezählt wird oder wenn diese Artikelnr schon vorhanden ist einfach bei der Menge einer dazugezählt wird.
Anschließend geht der Rest nur mit Makros:
Der Feldinhalt muss ausgelesen werden - siehe Handbuch, Einstieg Makros, ...currentValue ...
Danach eine Abfrage, ob die Nummer schon vorhanden ist:
SELECT COUNT("Artikelnummer") FROM "Tabelle" WHERE "Artikelnummer" = Feldinhalt
Ergebnis auslesen, wenn 1, dann erfolgt ein Update, wenn 0, dann erfolgt ein Insert.
Wenn 1:
UPDATE "Tabelle" SET "Anzahl" = "Anzahl"+1 WHERE "Artikelnummer" = Feldinhalt
Wenn 0:
INSERT INTO "Tabelle" ("Artikelnummer", "Anzahl") VALUES (Feldinhalt, 1)
Sobald Du automatisch irgendetwas hochzählen willst wirst Du an Makros nicht vorbeikommen. Ansonsten schau Dir zur Suche und Filterung die entsprechenden Kapitel im Handbuch an (S. 240 ff)
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo Robert,
Vielen Dank für Deine Antwort. Ich habe mal einen solchen Makro angelegt und den Basic-Text einfach übernommen. Dieses Makro habe ich mit dem Eingabeformular verknüpft. Wenn ich das Eingabeformular öffne kommt die Fehlermeldung (siehe Anhang):
BASIC-Syntaxfehler.
Erwartet: Case.
Wenn ich das das Wort Case einfüge kommt die Fehlermeldung:
BASIC-Syntaxfehler.
Erwartet: CRLF.
Was muß an der Syntax geändert werden
Gruß
Stefan
Vielen Dank für Deine Antwort. Ich habe mal einen solchen Makro angelegt und den Basic-Text einfach übernommen. Dieses Makro habe ich mit dem Eingabeformular verknüpft. Wenn ich das Eingabeformular öffne kommt die Fehlermeldung (siehe Anhang):
BASIC-Syntaxfehler.
Erwartet: Case.
Wenn ich das das Wort Case einfüge kommt die Fehlermeldung:
BASIC-Syntaxfehler.
Erwartet: CRLF.
Was muß an der Syntax geändert werden
Gruß
Stefan
- Dateianhänge
-
- BASIC-Syntaxfehler.
Erwartet: Case. - Base Makrofehlermeldung 1.jpg (395.23 KiB) 5843 mal betrachtet
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo Stefan,
mit den Makros scheinst Du Dir das recht einfach vorgestellt zu haben. Das beginnt schon damit, dass Du wohl gar keinen SQL-Befehlt zum Absetzen vorbereitest und dann auch noch die SQL-Formulierung so darstellst, dass dies von Basic überhaupt nicht interpretierbar ist. Mir scheint, dass Du mit Makros noch nicht gearbeitet hast ...
Schau Dir das Kapitel zu den Makros im Handbuch an. Dort steht, wie zu der Datenbank Kontakt aufgenommen wird, wie ein SQL-Befehl definiert wird usw. Gegebenenfalls kannst Du Dir auch die entsprechende Beispieldatenbank (Medien_mit_Makros) herunterladen. Da wird sehr häufig auf Tabellen der Datenbank zugegriffen und in Tabellen geschrieben.
Gruß
Robert
mit den Makros scheinst Du Dir das recht einfach vorgestellt zu haben. Das beginnt schon damit, dass Du wohl gar keinen SQL-Befehlt zum Absetzen vorbereitest und dann auch noch die SQL-Formulierung so darstellst, dass dies von Basic überhaupt nicht interpretierbar ist. Mir scheint, dass Du mit Makros noch nicht gearbeitet hast ...
Schau Dir das Kapitel zu den Makros im Handbuch an. Dort steht, wie zu der Datenbank Kontakt aufgenommen wird, wie ein SQL-Befehl definiert wird usw. Gegebenenfalls kannst Du Dir auch die entsprechende Beispieldatenbank (Medien_mit_Makros) herunterladen. Da wird sehr häufig auf Tabellen der Datenbank zugegriffen und in Tabellen geschrieben.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo Robert,
Du hast Recht. Ich habe mir das Erstellen einer Datenbank einfacher vorgestellt. Nun habe ich nochmal im handbuch geblättert und den Makro nach Deinen Anmerkungen abgeändert. Ich erhalte aber immer noch die bekannten Fehlermeldungen. Als Anhang habe ich einen Sreenshot der aktuellen Version des Makros hochgeladen. Die Abfrage habe ich um ein Kontrollfeld mit AND erweitert. Ich hoffe das ist richt so.
Gruß
Stefan
Du hast Recht. Ich habe mir das Erstellen einer Datenbank einfacher vorgestellt. Nun habe ich nochmal im handbuch geblättert und den Makro nach Deinen Anmerkungen abgeändert. Ich erhalte aber immer noch die bekannten Fehlermeldungen. Als Anhang habe ich einen Sreenshot der aktuellen Version des Makros hochgeladen. Die Abfrage habe ich um ein Kontrollfeld mit AND erweitert. Ich hoffe das ist richt so.
Gruß
Stefan
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo Stefan,
leider kann ich bei einem Screenshot nicht entsprechende Anmerkungen machen.
Du startest korrekt bis einschl. oForm, um eventuell den Inhalt eines Formularfeldes auszulesen. Jetzt müsste es weiter gehen zu
oFeld = ...
Anschließend müsste der Wert diese Feldes abgefragt werden. Eine Artikelnummer ist sich eine Zahl oder ein String. Wenn es eine Ganzzahl ist, dann könnte also der Artikelnummer z.B. die Variableneigenschaft Integer zugewiesen werden. Da Du später diese Variable als "Feldinhalt" bezeichnest:
Anschließend wird der Wert der Artikelnummer aus dem Formularfeld ausgelesen:
Du musst den SQL-Code formulieren. Dies mache ich der besseren Übersicht wegen mit der Zuweisung zur Variablen stSQL:
Jetzt muss festgestellt werden, welchen Wert Diese Abfrage ergibt:
Jetzt musst ein Datensatz eingefügt werden, falls iResult größer als 0 ist. Ich habe hier jetzt einmal ohne Umweg den SQL-Code direkt mit dem Befehl zusammen aufgeschrieben:
Wenn es nicht klappt, dann schicke doch neben dem Screenshot auch den Code mit, damit ich dort Änderungen eintragen kann.
Bei der Formulierung von SQL-Befehlen ist es wichtig, dass Basic das Ganze als Text versteht. Alles, was im Makroeditor grün erscheint, ist für Basic kein Text, sondern eine Variable, Funktion o.ä. Deshalb ist diese Kombination von doppelten Anführungszeichen direkt hintereinander notwendig. Damit werden einzelne Anführungszeichen für die Formulierung des SQL-Codes an die Datenbank weiter gegeben.
Gruß
Robert
leider kann ich bei einem Screenshot nicht entsprechende Anmerkungen machen.
Du startest korrekt bis einschl. oForm, um eventuell den Inhalt eines Formularfeldes auszulesen. Jetzt müsste es weiter gehen zu
oFeld = ...
Anschließend müsste der Wert diese Feldes abgefragt werden. Eine Artikelnummer ist sich eine Zahl oder ein String. Wenn es eine Ganzzahl ist, dann könnte also der Artikelnummer z.B. die Variableneigenschaft Integer zugewiesen werden. Da Du später diese Variable als "Feldinhalt" bezeichnest:
Code: Alles auswählen
DIM Feldinhalt AS INTEGER
Code: Alles auswählen
Feldinhalt = oFeld.getCurrentValue()
Code: Alles auswählen
stSql = "SELECT COUNT(""Artikelnummer"") FROM ""Tabelle"" WHERE ""Artikelnummer"" = '"+Feldinhalt+"'"
Code: Alles auswählen
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)
WHILE oAbfrageergebnis.next
iResult = oAbfrageergebnis.getInt(1)
WEND
Code: Alles auswählen
IF iResult > 0 THEN
oSQL_Anweisung.executeUpdate("Update ""Tabelle"" SET ""Anzahl"" = ""Anzahl""+1 WHERE ""Artikelnummer"" = '"+Feldinhalt+"'"
ELSE
oSQL_Anweisung.executeUpdate("INSERT INTO ""Tabelle"" (""Artikelnummer"",""Anzahl"") VALUES ( '"+Feldinhalt+"', 1)"
END IF
Bei der Formulierung von SQL-Befehlen ist es wichtig, dass Basic das Ganze als Text versteht. Alles, was im Makroeditor grün erscheint, ist für Basic kein Text, sondern eine Variable, Funktion o.ä. Deshalb ist diese Kombination von doppelten Anführungszeichen direkt hintereinander notwendig. Damit werden einzelne Anführungszeichen für die Formulierung des SQL-Codes an die Datenbank weiter gegeben.
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo Robert,
Ich hoffe ich habe oFeld richtig definiert. Warum muß immer ein "o" vor der Variable stehen? Hier der Code und ein Screenshot mit einer neuen Fehlermeldung:
REM ***** BASIC *****
Sub Main
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.forms.getByName("Eingabe")
oFeld = oforms.getByName("Artikelnummer").getByName("Bemerkung")
DIM Artikelnummer AS OBJECT
DIM Bemerkung AS OBJECT
DIM Feldinhalt AS STRING
Feldinhalt = oFeld.getCurrentValue()
DIM oConnection AS OBJECT
oConnection.oForm.activeConnection()
DIM oSQL_Statement AS OBJECT
DIM stSql AS STRING
DIM oResult AS OBJECT
DIM iResult AS INTEGER
oSQL_Statement = oConnection.createStatement()
stSql = "SELECT COUNT(""Artikelnummer"") FROM ""Tabelle"" WHERE ""Artikelnummer"" AND ""Bemerkung"" = '"+Feldinhalt+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)
WHILE oAbfrageergebnis.next
iResult = oAbfrageergebnis.getInt(1)
WEND
IF iResult > 0 THEN
oSQL_Anweisung.executeUpdate("Update ""Tabelle"" SET ""Anzahl"" = ""Anzahl""+1 WHERE ""Artikelnummer"" = '"+Feldinhalt+"'"
ELSE
oSQL_Anweisung.executeUpdate("INSERT INTO ""Tabelle"" (""Artikelnummer"",""Anzahl"") VALUES ( '"+Feldinhalt+"', 1)"
END IF
End Sub
Gruß
Stefan
Ich hoffe ich habe oFeld richtig definiert. Warum muß immer ein "o" vor der Variable stehen? Hier der Code und ein Screenshot mit einer neuen Fehlermeldung:
REM ***** BASIC *****
Sub Main
DIM oDoc AS OBJECT
DIM oDrawpage AS OBJECT
DIM oForm AS OBJECT
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.forms.getByName("Eingabe")
oFeld = oforms.getByName("Artikelnummer").getByName("Bemerkung")
DIM Artikelnummer AS OBJECT
DIM Bemerkung AS OBJECT
DIM Feldinhalt AS STRING
Feldinhalt = oFeld.getCurrentValue()
DIM oConnection AS OBJECT
oConnection.oForm.activeConnection()
DIM oSQL_Statement AS OBJECT
DIM stSql AS STRING
DIM oResult AS OBJECT
DIM iResult AS INTEGER
oSQL_Statement = oConnection.createStatement()
stSql = "SELECT COUNT(""Artikelnummer"") FROM ""Tabelle"" WHERE ""Artikelnummer"" AND ""Bemerkung"" = '"+Feldinhalt+"'"
oAbfrageergebnis = oSQL_Anweisung.executeQuery(stSql)
WHILE oAbfrageergebnis.next
iResult = oAbfrageergebnis.getInt(1)
WEND
IF iResult > 0 THEN
oSQL_Anweisung.executeUpdate("Update ""Tabelle"" SET ""Anzahl"" = ""Anzahl""+1 WHERE ""Artikelnummer"" = '"+Feldinhalt+"'"
ELSE
oSQL_Anweisung.executeUpdate("INSERT INTO ""Tabelle"" (""Artikelnummer"",""Anzahl"") VALUES ( '"+Feldinhalt+"', 1)"
END IF
End Sub
Gruß
Stefan
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo Stefan,
"o" soll nur anzeigen, dass das eine Variable ist, die als Objekt definiert wurde. Die Bezeichnung ist sonst egal - Du darfst nur nicht Bezeichnungen verwenden, die bereits vorgegebenen Funktionen entsprechen.
Ich benenne in der Regel die Variablen so, dass z.B. bei Strings "st" steht, bei Integer-Werte "in", bei boolschen Werten "bo", bei Arrays "ar" usw.
Die Fehlermeldung in Deinem Makro "NoSuchElement" ("NichtSoEinElement") - es gibt das Formular "Eingabe" in Deinem Formular nicht. Öffne das Formular zum Bearbeiten, öffne den Formularnavigator und wirf einen Blick auf die Bezeichnung des Formulars. Wenn Du irgendetwas mit dem Assistenten erstellt hast, dann steht als erstes Formular in der höchsten Ebene "MainForm". Die Bezeichnungen im Formular und im Makro müssen übereinstimmen ...
Gruß
Robert
Das mit dem "o" ist so etwas wie eine stille Vereinbarung bei vielen Leuten, die mit Makros etwas erstellen.StefanONE hat geschrieben:Hallo Robert,
Ich hoffe ich habe oFeld richtig definiert. Warum muß immer ein "o" vor der Variable stehen?
"o" soll nur anzeigen, dass das eine Variable ist, die als Objekt definiert wurde. Die Bezeichnung ist sonst egal - Du darfst nur nicht Bezeichnungen verwenden, die bereits vorgegebenen Funktionen entsprechen.
Ich benenne in der Regel die Variablen so, dass z.B. bei Strings "st" steht, bei Integer-Werte "in", bei boolschen Werten "bo", bei Arrays "ar" usw.
Die Fehlermeldung in Deinem Makro "NoSuchElement" ("NichtSoEinElement") - es gibt das Formular "Eingabe" in Deinem Formular nicht. Öffne das Formular zum Bearbeiten, öffne den Formularnavigator und wirf einen Blick auf die Bezeichnung des Formulars. Wenn Du irgendetwas mit dem Assistenten erstellt hast, dann steht als erstes Formular in der höchsten Ebene "MainForm". Die Bezeichnungen im Formular und im Makro müssen übereinstimmen ...
Gruß
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hallo Robert,
Ich weis nicht ob ich die Variable oFeld richt definiert habe. Ich dachte ich müßte dem Programm sagen welches die Felder sind und wo es sie finden kann. Was muss mit oFeld definiert werden und wie muß der Befehl eingebene werden. Momentan ist mir nicht klar was mit oFeld definiert werden soll. Hier die entsprechende Fehlermeldung:
Gruß
Stefan
Ich weis nicht ob ich die Variable oFeld richt definiert habe. Ich dachte ich müßte dem Programm sagen welches die Felder sind und wo es sie finden kann. Was muss mit oFeld definiert werden und wie muß der Befehl eingebene werden. Momentan ist mir nicht klar was mit oFeld definiert werden soll. Hier die entsprechende Fehlermeldung:
Gruß
Stefan
Re: Artikelnr. bei Eingabe automatisch anlegen u. Bestand zä
Hi,
ein Schuss ins Blaue:
oder gleichbedeutend:
Gruß R
ein Schuss ins Blaue:
Code: Alles auswählen
oForm = oDrawpage.forms.getByName("Eingabe")
oFeld = oform.getByName("Bemerkung")
Code: Alles auswählen
oFeld = oDrawpage.forms.getByName("Eingabe").getByName("Bemerkung")
Windows 11: AOO, LO Linux Mint: AOO, LO
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.