Tabellenanfügeabfrage als Makro mit SQL

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

VolkerH
*
Beiträge: 15
Registriert: So, 22.05.2016 16:01

Tabellenanfügeabfrage als Makro mit SQL

Beitrag von VolkerH »

Hallo,

ich komme mit einer Tabellenanfügeabfrage nicht weiter und brauche Hilfe!

Habe folgendenden SQL text erstellt der auch unter SQL Ausführen funktioniert:

INSERT INTO "BestellungGesTbl" ("Hersteller","Artikelnummer","Bezeichnung","Menge","RepNr", "Ersatzteil_ID","Status" ) SELECT "Ersatzteil_Tbl"."Hersteller", "Ersatzteil_Tbl"."Artikelnummer", "Ersatzteil_Tbl"."Bezeichnung", "ReptaraturteileNeu_Tbl"."Menge", "ReptaraturteileNeu_Tbl"."RepNr", "Ersatzteil_Tbl"."Ersatzteil_ID", "ReptaraturteileNeu_Tbl"."Status" FROM "ReptaraturteileNeu_Tbl", "Ersatzteil_Tbl" WHERE "ReptaraturteileNeu_Tbl"."RTID" = "Ersatzteil_Tbl"."Ersatzteil_ID" AND "Ersatzteil_Tbl"."Hersteller" = 0 AND "ReptaraturteileNeu_Tbl"."Status" = 1

Daraus für ein Makro folgendes geschrieben:

"INSERT INTO ""BestellungGesTbl"" (""Hersteller"",""Artikelnummer"",""Bezeichnung"",""Menge"",""RepNr"", ""Ersatzteil_ID"",""Status"" ) (SELECT ""Ersatzteil_Tbl"",""Hersteller"", ""Ersatzteil_Tbl"",""Artikelnummer"", ""Ersatzteil_Tbl"",""Bezeichnung"", ""ReptaraturteileNeu_Tbl"",""Menge"", ""ReptaraturteileNeu_Tbl"",""RepNr"",""Ersatzteil_Tbl"",""Ersatzteil_ID"", ""ReptaraturteileNeu_Tbl"",""Status"" FROM ""ReptaraturteileNeu_Tbl"",""Ersatzteil_Tbl"" WHERE ""ReptaraturteileNeu_Tbl"",""RTID"" = ""Ersatzteil_Tbl"",""Ersatzteil_ID"" AND ""Ersatzteil_Tbl"",""Hersteller"" = 0 AND ""ReptaraturteileNeu_Tbl"",""Status"" = 1)"

Nun reichen meine SQL kenntnisse beiweitem nicht aus um das zukontrollieren bzw zu verbessern.

Dann habe ich hier im Forum folgendes gefunden und meinen SQL Text eingefügt:

Sub NeueBestellung

Dim oStatement As Object, oDatenbankKontext As Object, oDatenquelle As Object
Dim oVerbindung As Object
Dim sSQL As String
oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
oDatenquelle = oDatenbankKontext.getByName( "Lokdatenbank" )
oVerbindung = oDatenquelle.getConnection( "" , "" )
oStatement = oVerbindung.createStatement()
sSQL = "INSERT INTO ""BestellungGesTbl"" (""Hersteller"",""Artikelnummer"",""Bezeichnung"",""Menge"",""RepNr"", ""Ersatzteil_ID"",""Status"" ) (SELECT ""Ersatzteil_Tbl"",""Hersteller"", ""Ersatzteil_Tbl"",""Artikelnummer"", ""Ersatzteil_Tbl"",""Bezeichnung"", ""ReptaraturteileNeu_Tbl"",""Menge"", ""ReptaraturteileNeu_Tbl"",""RepNr"",""Ersatzteil_Tbl"",""Ersatzteil_ID"", ""ReptaraturteileNeu_Tbl"",""Status"" FROM ""ReptaraturteileNeu_Tbl"",""Ersatzteil_Tbl"" WHERE ""ReptaraturteileNeu_Tbl"",""RTID"" = ""Ersatzteil_Tbl"",""Ersatzteil_ID"" AND ""Ersatzteil_Tbl"",""Hersteller"" = 0 AND ""ReptaraturteileNeu_Tbl"",""Status"" = 1)"
oStatement.execute(sSQL)
oVerbindung.close()
oStatement.close()
End Sub

es ergibt die Fehlermeldung:

.......Missing ) in Statement.......

Ich möchte Euch um Hilfe Bitten

Viele Grüße Volker
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Tabellenanfügeabfrage als Makro mit SQL

Beitrag von RobertG »

Hallo Volker,

Dein Code ist nicht gleich. In der SELECT-Anweisung hast Du Tabellennamen und Feldnamen mit einem Komma voneinander getrennt aufgeführt. Dies ist bei Deinem direkten Code nicht der Fall.

Im Makro macht das so den Eindruck, als ob Du 7 Felder in der Tabelle "BestellungGesTbl" mit dem Inhalt von 14 Feldern füllen möchtest.

2. Haken könnte sein, dass Du Zeilenumbrücke in deinem Code hast. Ich umgehe das, indem ishc
sSql = "..."
sSql = sSql + "..."
schreibe. So etwas geht auch, indem direkt vor dem Umbruch ein Unterstrich eingefügt wird. Dann kannst Du einfach mit der Variablendefinition fortfahren.

Gruß

Robert
VolkerH
*
Beiträge: 15
Registriert: So, 22.05.2016 16:01

Re: Tabellenanfügeabfrage als Makro mit SQL

Beitrag von VolkerH »

Hallo Robert, vielen Dank für die Hilfe,

im direkten Code ist als Trenner zwischen Tabellebezeichnung und Spalte ein Punkt gesetz ,das funktioniert.

Im Makro nicht. daher habe ich ein Komma gesetzt, wahrscheinlich fasch?

ich möchte 7 Felder in der Tbl" BestellungGesTbl" füllen, eigentlich mit Werten aus einer Abfrage. das sah dann so aus:

INSERT INTO "BestellungGesTbl" ("Hersteller","Artikelnummer","Bezeichnung","Menge","RepNr", "Ersatzteil_ID","Status" ) SELECT "Hersteller", "Artikelnummer", "Bezeichnung","Menge","RepNr", "Ersatzteil_ID","Status" FROM "BestellLGB_Abfr"

funktionierte natürlich nicht, weil ich erst lernen mußte das SQL nicht auf eine Abrage zugreift.

Danach die Abfrage In SQL erstellt
SELECT "Ersatzteil_Tbl"."Hersteller", "Ersatzteil_Tbl"."Artikelnummer", "Ersatzteil_Tbl"."Bezeichnung", "ReptaraturteileNeu_Tbl"."Menge", "ReptaraturteileNeu_Tbl"."RepNr", "Ersatzteil_Tbl"."Ersatzteil_ID", "ReptaraturteileNeu_Tbl"."Status" FROM "ReptaraturteileNeu_Tbl", "Ersatzteil_Tbl" WHERE "ReptaraturteileNeu_Tbl"."RTID" = "Ersatzteil_Tbl"."Ersatzteil_ID" AND "Ersatzteil_Tbl"."Hersteller" = 0 AND "ReptaraturteileNeu_Tbl"."Status" = 1

Diese habe ich dann um den Bereich INSERT ergänzt:

INSERT INTO "BestellungGesTbl" ("Hersteller","Artikelnummer","Bezeichnung","Menge","RepNr", "Ersatzteil_ID","Status" ) SELECT "Ersatzteil_Tbl"."Hersteller", "Ersatzteil_Tbl"."Artikelnummer", "Ersatzteil_Tbl"."Bezeichnung", "ReptaraturteileNeu_Tbl"."Menge", "ReptaraturteileNeu_Tbl"."RepNr", "Ersatzteil_Tbl"."Ersatzteil_ID", "ReptaraturteileNeu_Tbl"."Status" FROM "ReptaraturteileNeu_Tbl", "Ersatzteil_Tbl" WHERE "ReptaraturteileNeu_Tbl"."RTID" = "Ersatzteil_Tbl"."Ersatzteil_ID" AND "Ersatzteil_Tbl"."Hersteller" = 0 AND "ReptaraturteileNeu_Tbl"."Status" = 1
dieser SQL Text funktioniert unter SQL ausführen.


Unter punkt 2 schreibst Du
.....Haken könnte sein, dass Du Zeilenumbrücke in deinem Code hast..... bewußt habe ich keine eingefügt, zumindes erkenne ich kein.

Ich stosse da an meine Grenzen was SQL betrifft, sorry

beste Grüße Volker
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Tabellenanfügeabfrage als Makro mit SQL

Beitrag von F3K Total »

Moin Volker,
versuche es mit mit dem folgenden Makro:

Code: Alles auswählen

Sub NeueBestellung
    Dim oStatement As Object, oDatenbankKontext As Object, oDatenquelle As Object
    Dim oVerbindung As Object
    Dim sSQL As String
    oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
    oDatenquelle = oDatenbankKontext.getByName( "Lokdatenbank" )
    oVerbindung = oDatenquelle.getConnection( "" , "" )
    oStatement = oVerbindung.createStatement()
    sSQL = "INSERT INTO ""BestellungGesTbl"" (""Hersteller"",""Artikelnummer"",""Bezeichnung"",""Menge"",""RepNr"", ""Ersatzteil_ID"",""Status"" ) SELECT ""Ersatzteil_Tbl"".""Hersteller"", ""Ersatzteil_Tbl"".""Artikelnummer"", ""Ersatzteil_Tbl"".""Bezeichnung"", ""ReptaraturteileNeu_Tbl"".""Menge"", ""ReptaraturteileNeu_Tbl"".""RepNr"", ""Ersatzteil_Tbl"".""Ersatzteil_ID"", ""ReptaraturteileNeu_Tbl"".""Status"" FROM ""ReptaraturteileNeu_Tbl"", ""Ersatzteil_Tbl"" WHERE ""ReptaraturteileNeu_Tbl"".""RTID"" = ""Ersatzteil_Tbl"".""Ersatzteil_ID"" AND ""Ersatzteil_Tbl"".""Hersteller"" = 0 AND ""ReptaraturteileNeu_Tbl"".""Status"" = 1"
    oStatement.execute(sSQL)
    msgbox "done"
End Sub
Hier habe ich mit einem Editor in deinem funktionierenden SQL Code alle einfachen Anführungszeichen durch doppelte ersetzt, und dann den gesamten String noch einmal in Anführungzeichen gesetzt.

Gruß R
VolkerH
*
Beiträge: 15
Registriert: So, 22.05.2016 16:01

Gelöst: Tabellenanfügeabfrage als Makro mit SQL

Beitrag von VolkerH »

moin R,
super, vielen Dank für Deine Mühe, es funktioniert! Du hast mir sehr geholfen!!
Ich hatte dasauch mit den doppelten Anführungszeichen gelsen und probiert, funktionierte nicht.
Jetzt mit deinem Makro läufte es perfekt. Also muß auch der komplett Sting in Anführungszeichen gesetzt werden!
Wieder etwas gelernt.

Beste Grüße
Volker
Antworten