Insert mit Select?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Insert mit Select?

Beitrag von uli38 »

Hallo.
Ich möchte in eine Tabelle Werte, die ich aus einer Abfrage erhalte, schreiben.
Dazu möchte ich folgende Anweisung verwenden:

Code: Alles auswählen

Insert into "Stromforderungsmanagement" ("Verbrauch","Zähler-ID", "Betrag", "Objekt-ID", "Mieter-ID") values (SELECT "Verbrauch", "Zähler-ID", "Betrag", "Objekt-ID", "Mieter-ID" FROM "Stromabrechnung" AS "Stromabrechnung")
[/
Leider gibt es dann immer einen Fehler: "Tabel not found in statement [Insert into "Stromfo....]
Was mache ich da falsch?
Kann Base überhaupt ein Insert mit Select, also ohne feste Werte ausführen?

Grüße
Uli
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Insert mit Select?

Beitrag von eBayer »

wenn du das in einem macro schreibst, mußt du die feldnamen in doppelte anführungsstriche setzen.
bei mir funktionert es jedenfalls. siehe folgendes beispiel:
----------------------------------------------------------------------------------------
sSQL = "Insert INTO ""EinnahmenDetail"" (""Ausweis_Nr"", ""Betrag"") SELECT ""Ausweis-Nr"", ""Zahlung"" FROM ""Kundendatei"" WHERE (""Zahlung"" > 0)"
oStatement.execute(sSQL)
----------------------------------------------------------------------------------------
vielleicht hilft es.
gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Insert mit Select?

Beitrag von uli38 »

Hallo ebayer.
Vielen Dank für Deine Antwort.
Leider klappt es noch nicht :(
Ich habe Deinen Code angepasst. Er schaut jetzt so aus:

Code: Alles auswählen

query = "Insert into ""Stromforderungs-Management"" (""Forderungs-ID"",""Verbrauch"",""Zähler-ID"", ""Betrag"", ""Objekt-ID"", ""Mieter-ID"")  Select ""Verbrauch"", ""Zähler-ID"", ""Betrag"", ""Objekt-ID"", ""Mieter-ID"" FROM ""Stromabrechnung""  AS ""Stromabrechnung"""
Die Fehlermeldung ist leider noch die gleiche. An der Forderungs-ID liegt es nicht, weil die beim Insert dann automatisch vergeben wird:-)
Liegt es vielleicht daran, dass das Objekt Stromabrechnung keine Tabelle, sondern auch schon eine Abfrage ist?
Normalerweise dürfte das doch keine Rolle spielen, oder?
Warum enthält Dein Coede keine Values-Anweisung?
Grüße
Uli
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Insert mit Select?

Beitrag von eBayer »

Hallo Uli,
die im select angegebenen felder müssen mit den into-feldern korrespondieren. das ist bei dir nicht der fall, weil du die forderungs-id mit angegeben hast. forderungs-id hat nichts darin zu suchen, weil sie automatisch vergeben wird.
bin auch kein grosser sql-spezialist, aber die values verbergen sich ja im select.
was soll in deiner anweisung der zusatz AS ""Stromabrechnung""". das ist nicht notwendig und stört möglicherweise sogar.
also versuchs nochmal... wir zwei zusammen werden es schon hinbiegen und lernen noch dabei.
gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
keksi1970
*****
Beiträge: 464
Registriert: So, 27.01.2008 11:47
Wohnort: DU

Re: Insert mit Select?

Beitrag von keksi1970 »

Hi,
soweit ich weiß. kann man in Abfragen keinen Datensatz hinzufügen oder ändern.

als Bsp: erstelle eine Abfrage direkt in Base (was simples) mit dem AbfrageAssi und versuche irgendein Datum zu ändern. Geht nicht.
Ist ja auch keine eigenständige Tabelle, sondern nur ein "SQL-BEFEHL" der jedesmal neu ausgeführt wird (oder so)

Lasse mich als Neuling natürlich gerne belehren, daß es doch geht :) brauchen könnt ich das nämlich auch :P

LG
Andreas

edit sagt : der Zusatz as ""Stromabrechnung"" ist ein Aliasname, den man setzen kann, aber nicht muß. In base wird er aber sowieso erzeugt
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Insert mit Select?

Beitrag von eBayer »

hallo keksi,
nach meinem verständnis soll hier ein insert in eine tabelle mit hilfe einer abfrage (aus einer abfrage) erfolgen.
Das sollte doch kein problem sein, oder irre ich mich da?
gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Insert mit Select?

Beitrag von uli38 »

Hallo.
Also, ich habe den Code noch einmal angepasst:

Code: Alles auswählen

query = "Insert into ""Stromforderungs-Management"" (""Zähler-ID"", ""Betrag"", ""Objekt-ID"", ""Mieter-ID"") Select ""Verbrauch"", ""Zähler-ID"", ""Betrag"", ""Objekt-ID"", ""Mieter-ID"" FROM ""Stromforderungen"" "
Aber ich erhalte immer noch eine Fehlermeldung, dass er eine Tabelle nicht findet.
Wenn ich eine Tabelle "Stromforderungen" anlege und diese mit Daten fülle, funktioniert die Anweisung sofort.
Hhmm - kann Base doch keine Abfrage aus einer Abfrage in eine Tabelle einfügen?

An ebayer: bezieht sich Dein Select auf eine Tabelle oder Abfrage?

Grüße
Uli
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Insert mit Select?

Beitrag von eBayer »

Hallo Uli,
....schlechte Nachricht für Dich.... aber eigentlich kein Problem.
Den INSERT aus einer mit Base erstellten Abfrage kannst Du vergessen.
Trotzdem ist die Abfrage für uns SQL_Anfänger eine Hilfe. Wenn Du Dir Deine Abfrage in der SQL-Ansicht anschaust, wirst Du erkennen, daß sich dahinter ein ganz normales SELECT-Statement verbirgt. Dieses kannst Du wunderbar verwenden, indem Du es kopierst und in Dein Macro einbaust. Genau das habe ich in dem beiliegenden Beispielprogramm gemacht.
Habe übrigens auch wieder was daraus gelernt, weil dem Ergebnis ja doch eine intensive Beschäftigung mit der Frage und dem Lösungsweg verbunden ist.
Abgesehen davon mußt Du natürlich darauf achten, genauso viele Felder beim Insert, wie beim Select zu verwenden:
wohin?? <-- ""Verbrauch""
""Zähler-ID"" <-- ""Zähler-ID""
""Betrag"" <-- ""Betrag""
""Objekt-ID"" <-- ""Objekt-ID""
""Mieter-ID"" <-- ""Mieter-ID""
Ich denke, daß Du mit dem kleinen Testprogramm weiterkommen müsstest. Ich habe in den Macros einiges kommentiert.
Gruß eBayer
Dateianhänge
Verkehrsmittel.odb
(12.78 KiB) 52-mal heruntergeladen
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Insert mit Select?

Beitrag von uli38 »

Hallo ebayer.
danke für Deine Hilfe. Schade, dass Base keine Abfragen beim Insert-befehl verarbeiten kann.
Das, was ih einfügen möchte, ist das Ergebnis mehrer aufeinander aufbauender Abfragen. Das würde sicherlich auch mit einer gehen, aber das ganze enthält auch noch Berechnungen und macht es noch komplizierter.
Danke für Dein Beispiel - kann ich bestimmt brauchen.

Grüße
Uli
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Insert mit Select?

Beitrag von eBayer »

Du könntest aber Deine Abfrage ausführen und dann aus dem ResultSet heraus in einer Schleife Deine Inserts durchführen. Ist halt etwas mehr zu codieren, aber im Ergebnis sollte es genauso funktionieren.
So geht es!!!
siehe Anhang

Gruß eBayer
Dateianhänge
Verkehrsmittel.odb
(13.29 KiB) 80-mal heruntergeladen
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Camelot
Beiträge: 7
Registriert: Mo, 23.03.2009 18:24

Re: Insert mit Select?

Beitrag von Camelot »

Hallo uli38,

es gibt eine weitere, meiner meinung nach, sehr komfortable lösung zu diesem problem.

du könntest, anstatt die daten in eine tabelle einzufügen, einen view erzeugen der bei jedem aufruf die abfrage ausführt und somit immer die aktuellen daten enthält.
im weiteren ist ein view, genauso zu behandeln wie eine tabelle, außer das keine daten in den view eingegeben werden können.

der befehl dazu wäre:
CREATE VIEW "Stromforderungsmanagement" AS
SELECT "Verbrauch","Zähler-ID", "Betrag", "Objekt-ID", "Mieter-ID"
FROM "Stromabrechnung"

MfG Camelot
Hehue
*
Beiträge: 10
Registriert: Mi, 03.12.2008 19:14

Re: Insert mit Select?

Beitrag von Hehue »

Hallo zusammen,

ich habe hier eine ganz kurze Code-Sequenz aus einer eigenen Datenbank aufgelistet. Wie ihr sehen könnt ist bei INSERT INTO sehr wohl ein SELECT
möglich. Zusätzlicher Tip: wenn man alle Tabellenfelder in HSQL mit großen Buchstaben definiert kann man sich die vielen Hochkomma schenken. Da
scheint mir nämlich das Problem zu liegen. Die doppelten Hochkomma sind nicht immer richtig, manchmal ist ein einfaches Hochkomma erforderlich.

' Daten aus tmpT2 nach T2 übertragen
SqlAnw = oDBVer.createStatement()
SqlTxt = "INSERT INTO T2(T2TAG, T2ZEITA, T2ZEITE, T2TEXT) SELECT " + iTag + ", T2ZEITA, T2ZEITE, T2TEXT FROM TMPT2;"
SqlAnw.executeQuery(SqlTxt)

Grüße hehue
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Insert mit Select?

Beitrag von Barlee »

Hallo uli38,

ich komme nochmal auf die Ausgangsfrage zurück:
Kann Base überhaupt ein Insert mit Select, also ohne feste Werte ausführen?
Ja! Daher stellt sich mir die Frage, wo Du den Befehl "INSERT INTO ... SELECT" ausgeführt hast. Verwaltungsbefehle dieser Art sind nur unter Extras/SQL möglich.

Gruß Barlee
Antworten