BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
hoppege
Beiträge: 5
Registriert: Fr 19. Jul 2019, 13:38

INSERT INTO über ODBC auf Tabelle in Oracle Datenbank

Beitrag von hoppege » Do 25. Jul 2019, 09:21

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

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank

Beitrag von gogo » Do 25. Jul 2019, 10:29

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...
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

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank

Beitrag von RobertG » Do 25. Jul 2019, 11:36

Hallo Georg,
hoppege hat geschrieben:
Do 25. Jul 2019, 09:21
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.
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.

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

hoppege
Beiträge: 5
Registriert: Fr 19. Jul 2019, 13:38

Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank

Beitrag von hoppege » Do 25. Jul 2019, 15:38

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

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank

Beitrag von RobertG » Do 25. Jul 2019, 17:12

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
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

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank

Beitrag von gogo » Do 25. Jul 2019, 17:58

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:

Code: Alles auswählen

commit
... 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 ...)
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

hoppege
Beiträge: 5
Registriert: Fr 19. Jul 2019, 13:38

Re: INSERT INTO über ODBC auf Tabelle in Oracle Datenbank

Beitrag von hoppege » Fr 26. Jul 2019, 13:28

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

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 ❤️

Antworten