BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
Hallo,
die SELECT Abfragen funktionieren.
Jetzt habe ich versucht einen Datensatz in eine einfach Tabelle einzufügen.
INSERT INTO "HOPPEGE"."BAR_INP_5"
("ASPB_ID", "BARCODE", "INPRINTERNUMMER")
VALUES (999999, 800999999999,'99999-12:00:00-2099/12/31SC1')
und erhalte schon beim Abspeichern folgende Fehlermeldung:
Der Gesetzte Befehl ist kein SELECT-Befehl.
Es sind nur Abfragen erlaubt.
Liegt das an der Verbindung via ODBC auf eine Oracle Datenbank?
Oder gibt es einen anderen Weg Daten in eine Tabelle einzufügen?
Gruß
Georg
die SELECT Abfragen funktionieren.
Jetzt habe ich versucht einen Datensatz in eine einfach Tabelle einzufügen.
INSERT INTO "HOPPEGE"."BAR_INP_5"
("ASPB_ID", "BARCODE", "INPRINTERNUMMER")
VALUES (999999, 800999999999,'99999-12:00:00-2099/12/31SC1')
und erhalte schon beim Abspeichern folgende Fehlermeldung:
Der Gesetzte Befehl ist kein SELECT-Befehl.
Es sind nur Abfragen erlaubt.
Liegt das an der Verbindung via ODBC auf eine Oracle Datenbank?
Oder gibt es einen anderen Weg Daten in eine Tabelle einzufügen?
Gruß
Georg
Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
Wenn die Meldung vom Server kommt, ist es ein Rechte-Problem, wenn sie vom Treiber kommt ein Treiber-Problem.
Ein Rechte Problem musst Du am Server erledigen, d.h. ein Admin muss Dir die entsprechenden Rechte verschaffen.
Ein Treiberproblem kannst Du vermutlich durch veränderte Treibereinstellungen hinbekommen (Eintrag in einer ini-Datei...) wenn nicht, kann es auch sein, dass der Treiber gar nicht für Schreibzugriffe gedacht ist.
Solltest Du den SQL-Befehl per create-Statement... in einem BASIC-Macro aufrufen musst Du den Code dafür hier posten, dann kann man sagen welches Flag gesetzt werden muss damit das Statement auch Änderungen an den Daten zulässt...
Ein Rechte Problem musst Du am Server erledigen, d.h. ein Admin muss Dir die entsprechenden Rechte verschaffen.
Ein Treiberproblem kannst Du vermutlich durch veränderte Treibereinstellungen hinbekommen (Eintrag in einer ini-Datei...) wenn nicht, kann es auch sein, dass der Treiber gar nicht für Schreibzugriffe gedacht ist.
Solltest Du den SQL-Befehl per create-Statement... in einem BASIC-Macro aufrufen musst Du den Code dafür hier posten, dann kann man sagen welches Flag gesetzt werden muss damit das Statement auch Änderungen an den Daten zulässt...
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
Hallo Georg,
Eingaben, die Daten ändern, können über Extras → SQL geändert werden. Brauchst Du bestimmte Anweisungen häufiger, so lassen sich diese besser als Makro speichern. Siehe dazu die Beispiele im Handbuch.
Bei dem obigen Beispiel von Dir ist das vermutlich nur ein Test, den Du machen willst. Die Eingabe erfolgt ja sonst für einzelne Datensätze viel einfacher über die GUI (Tabellenansicht oder in einem Formular).
Gruß
Robert
Du versuchst über den Abfrageeditor Datensätze zu bearbeiten. Das geht (leider noch) nicht. Siehe https://bugs.documentfoundation.org/sho ... i?id=31398. So ein Update in einer aufzurufenden Abfrage zu speichern birgt auch das Problem, dass nur ein zufälliger Klick aus versehen neue Datensätze erstellen würde oder eben je nach INSERT-, UPDATE- oder DELETE-Anweisung zu umfangreichen Änderungen führen würde.hoppege hat geschrieben: ↑Do 25. Jul 2019, 09:21INSERT INTO "HOPPEGE"."BAR_INP_5"
("ASPB_ID", "BARCODE", "INPRINTERNUMMER")
VALUES (999999, 800999999999,'99999-12:00:00-2099/12/31SC1')
und erhalte schon beim Abspeichern folgende Fehlermeldung:
Der Gesetzte Befehl ist kein SELECT-Befehl.
Es sind nur Abfragen erlaubt.
Eingaben, die Daten ändern, können über Extras → SQL geändert werden. Brauchst Du bestimmte Anweisungen häufiger, so lassen sich diese besser als Makro speichern. Siehe dazu die Beispiele im Handbuch.
Bei dem obigen Beispiel von Dir ist das vermutlich nur ein Test, den Du machen willst. Die Eingabe erfolgt ja sonst für einzelne Datensätze viel einfacher über die GUI (Tabellenansicht oder in einem Formular).
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: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
Hallo Robert,
die Bedenken beim Abfrageeditor versteh ich.
Ich habe es jetzt mal mit folgendem Markro versucht.
Teile sind aus dem Handbuch von Base.
(Wenn man das so liest, sollte es "ganz" einfach sein.)
SUB SQL_Select
DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
DIM stSql AS STRING ' Text des eigentlichen SQL-Befehls
DIM oResult AS OBJECT ' Ergebnis für executeQuery
oSQL_Statement = oConnection.createStatement() <<-- Hier gibt's den Fehler:
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.
stSql ="SELECT * FROM ""PYTHIA_OWNER"".""DMP"""
oResult = oSQL_Statement.executeQuery(stSql)
END SUB
Müssen da noch Bibliotheken eingebunden werden?
Fehlt noch eine Zuweisung?
Gruß
Georg
die Bedenken beim Abfrageeditor versteh ich.
Ich habe es jetzt mal mit folgendem Markro versucht.
Teile sind aus dem Handbuch von Base.
(Wenn man das so liest, sollte es "ganz" einfach sein.)
SUB SQL_Select
DIM oSQL_Statement AS OBJECT ' das Objekt, das den SQL-Befehl ausführt
DIM stSql AS STRING ' Text des eigentlichen SQL-Befehls
DIM oResult AS OBJECT ' Ergebnis für executeQuery
oSQL_Statement = oConnection.createStatement() <<-- Hier gibt's den Fehler:
BASIC-Laufzeitfehler.
Objektvariable nicht belegt.
stSql ="SELECT * FROM ""PYTHIA_OWNER"".""DMP"""
oResult = oSQL_Statement.executeQuery(stSql)
END SUB
Müssen da noch Bibliotheken eingebunden werden?
Fehlt noch eine Zuweisung?
Gruß
Georg
Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
Hallo Georg,
Du testest im Moment etwas hin und her. Dein Code in dem vorhergehenden Post ist ein SELECT. Da wird eine Ausgabe erwartet. Dein Code in dem Anfangspost war ein INSERT. Da wird eine Datenänderung vollzogen.
Ich habe gerade einmal ein Beispiel zusammengestrickt, bei dem (mit der internen HSQLDB) zuerst eine Zufallszahl in die Tabelle geschrieben wird und danach die Tabelle sortiert wird. Anschließend wird diese Sortierung für die Nummerierung übernommen. Das Beispiel enthält zwei Buttons, in denen in den Zusatzinformationen die SQL-Befehle dazu sitzen. Das Makro liest diese Zusatzinformationen aus, macht ein Update bei der Datenbank und lässt das Formular anschließend neu einlesen.
Den Fehler bei Dir gibt es übrigens, weil oConnection gar nicht definiert ist und dementsprechend die Methode createStatement() unbekannt ist. Schau einmal zu Beginn des Makrokapitels unter "Die Verbindung zur Datenbank".
Gruß
Robert
Du testest im Moment etwas hin und her. Dein Code in dem vorhergehenden Post ist ein SELECT. Da wird eine Ausgabe erwartet. Dein Code in dem Anfangspost war ein INSERT. Da wird eine Datenänderung vollzogen.
Ich habe gerade einmal ein Beispiel zusammengestrickt, bei dem (mit der internen HSQLDB) zuerst eine Zufallszahl in die Tabelle geschrieben wird und danach die Tabelle sortiert wird. Anschließend wird diese Sortierung für die Nummerierung übernommen. Das Beispiel enthält zwei Buttons, in denen in den Zusatzinformationen die SQL-Befehle dazu sitzen. Das Makro liest diese Zusatzinformationen aus, macht ein Update bei der Datenbank und lässt das Formular anschließend neu einlesen.
Den Fehler bei Dir gibt es übrigens, weil oConnection gar nicht definiert ist und dementsprechend die Methode createStatement() unbekannt ist. Schau einmal zu Beginn des Makrokapitels unter "Die Verbindung zur Datenbank".
Gruß
Robert
- Dateianhänge
-
- Beispiel_SQL_Button.zip
- SQL-Befehl über Button im Formular ausführen
- (11.15 KiB) 130-mal heruntergeladen
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: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
um schnell mal zu testen ob das Statement ausgeführt werden kann:
im Base-Haupt-Menü (also wenn man die Listen der Tabellen, Abfragen, Formulare ... sehen kann) unter "Extras/SQL..." die auszuführende Anweisung eintippen und auf "Ausführen" klicken.
Die Syntax ist hierbei streng die des Datenbankservers, eine Maskierung von Strings mit 3 """Text""" führt hier zu Fehlern. Mach' auch den ersten Test etwas einfacher um Syntaxfehler zu vermeiden. z.B.:
INSERT INTO "HOPPEGE"."BAR_INP_5" ("ASPB_ID") VALUES (999999);
oder
INSERT INTO HOPPEGE.BAR_INP_5 (ASPB_ID) VALUES (999999);
oder
INSERT INTO `HOPPEGE`.`BAR_INP_5` (`ASPB_ID`) VALUES (999999);
Evtl kannst Du auch den Schema-Namen weglassen:
INSERT INTO `BAR_INP_5` (`ASPB_ID`) VALUES (999999);
... der einfachste Test wäre:
... das solltest Du nur tun dürfen wenn Du Schreibrechte hast. (commit weist den Server an alle Transaktionen endgültig auf die Platte zu schreiben und gibt nur dann einen Fehler wenn man es nicht darf, oder die DB einen Defekt hat ...)
im Base-Haupt-Menü (also wenn man die Listen der Tabellen, Abfragen, Formulare ... sehen kann) unter "Extras/SQL..." die auszuführende Anweisung eintippen und auf "Ausführen" klicken.
Die Syntax ist hierbei streng die des Datenbankservers, eine Maskierung von Strings mit 3 """Text""" führt hier zu Fehlern. Mach' auch den ersten Test etwas einfacher um Syntaxfehler zu vermeiden. z.B.:
INSERT INTO "HOPPEGE"."BAR_INP_5" ("ASPB_ID") VALUES (999999);
oder
INSERT INTO HOPPEGE.BAR_INP_5 (ASPB_ID) VALUES (999999);
oder
INSERT INTO `HOPPEGE`.`BAR_INP_5` (`ASPB_ID`) VALUES (999999);
Evtl kannst Du auch den Schema-Namen weglassen:
INSERT INTO `BAR_INP_5` (`ASPB_ID`) VALUES (999999);
... der einfachste Test wäre:
Code: Alles auswählen
commit
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu
Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank
Hallo Robert,
hallo gogo,
vielen Dank für Testbeispiele und Beispieldatenbank.
Ich probiere beides aus.
Entschuldigt bitte das ich mit der SQL Anweisung gewechselt habe.
Mein Gedanke war beim Zweiten, es einfach zu halten. Eben ein simpler Select.
Ich werde mir jetzt erstmal den Teil über Makros im Handbuch durchlesen.
Speziell den Teil "Die Verbindung zur Datenbank".
Gruß
Georg
hallo gogo,
vielen Dank für Testbeispiele und Beispieldatenbank.
Ich probiere beides aus.
Entschuldigt bitte das ich mit der SQL Anweisung gewechselt habe.
Mein Gedanke war beim Zweiten, es einfach zu halten. Eben ein simpler Select.
Ich werde mir jetzt erstmal den Teil über Makros im Handbuch durchlesen.
Speziell den Teil "Die Verbindung zur Datenbank".
Gruß
Georg
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️