Datensatz mit SQL kopieren

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

Datensatz mit SQL kopieren

Beitrag von keyboard-billy »

Hallo Leutz,

ich habe eine Tabelle, die folgende Felder hat:

"Auftragsnummer","Kundennummer","Auftragsschlüssel","Datum", "Beginn","Ende","Gage","Währung","Aufbau","Veranstaltungsort", "Straße","Postleitzahl","Ort","Telefon","Mobiltelefon","Fax", "Ansprechpartner","Bemerkungen"

Das Feld "Auftragsnummer" ist der PrimaryKey mit einem Autoincrement. Deshalb habe ich es im folgenden Selectstatement auch nicht mit berücksichtigt.

Ich möchte jetzt einen bestehenden Datensatz duplizieren. Dazu habe ich mir folgendes SQL-Statement überlegt:

Code: Alles auswählen

INSERT INTO "Aufträge" ("Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
                        "Ende", "Gage", "Währung", "Aufbau",
                        "Veranstaltungsort", "Straße", "Postleitzahl",
                        "Ort", "Telefon", "Mobiltelefon", "Fax",
                        "Ansprechpartner", "Bemerkungen")
VALUES ( SELECT "Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
        "Ende", "Gage", "Währung", "Aufbau", "Veranstaltungsort", "Straße",
        "Postleitzahl", "Ort", "Telefon", "Mobiltelefon", "Fax",
        "Ansprechpartner", "Bemerkungen"
 FROM  "Aufträge"
 WHERE ("Kundennummer" = 101 AND "Bemerkungen" LIKE '%fasching 2007'))
Wenn ich den Code im "SQL Statement ausführen" Dialog nun ausführen möchte, bekomm ich folgende Fehlermeldung:

1: Column count does not match in statement [INSERT INTO "Aufträge" ("Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
"Ende", "Gage", "Währung", "Aufbau",
"Veranstaltungsort", "Straße", "Postleitzahl",
"Ort", "Telefon", "Mobiltelefon", "Fax",
"Ansprechpartner", "Bemerkungen")
VALUES ( SELECT "Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
"Ende", "Gage", "Währung", "Aufbau", "Veranstaltungsort", "Straße",
"Postleitzahl", "Ort", "Telefon", "Mobiltelefon", "Fax",
"Ansprechpartner", "Bemerkungen"
FROM "Aufträge"
WHERE ("Kundennummer" = 101 AND "Bemerkungen" LIKE '%fasching 2007'))]


Das SELECT-Statement alleine funktioniert prima. Die INSERT-Anweisung funktioniert auch, wenn man statt des SELECT-Statements eine Werteliste für die erforderlichen Felder eingibt.

Ich habe keine Ahnung, warum das nicht funktioniert :?: . Vielleicht weiß jemand weiter?

Danke & Greets,
Billy
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!
riedlka1
*
Beiträge: 12
Registriert: Fr, 31.03.2006 09:57

Re: Datensatz mit SQL kopieren

Beitrag von riedlka1 »

Genau aus diesem Grund habe ich es schon lange aufgegeben, mich mit halbfertigen, unzulänglichen Lösungen abzugeben, da hilft keine Literatur a` la Datenbanken für Openoffice von selbsternannten Experten, die Dir Deine Zeit nur noch länger indirekt stehlen, die ich als Benutzer des Programms studieren und programmieren muß um einen Datensatz zu kopieren, eine so primitive Sache sollte schon Standard sein, mit Office 97 ist das ein K L A C K S auch wenn ich Windows hasse, aber es ist wirklich B E N U T Z E R F R E U N D L I C H, das mußte sein!
PeterJHaas
**
Beiträge: 32
Registriert: Di, 09.10.2007 13:05

Re: Datensatz mit SQL kopieren

Beitrag von PeterJHaas »

riedlka1 hat geschrieben:da hilft keine Literatur a` la Datenbanken für Openoffice von selbsternannten Experten, ...
Schon deswegen, weil das überhaupt nichts mit OOo zu tun hat und vielmehr mit der zugrundeliegenden Datenbank.

MfG Peter.
PeterJHaas
**
Beiträge: 32
Registriert: Di, 09.10.2007 13:05

Re: Datensatz mit SQL kopieren

Beitrag von PeterJHaas »

Hallo Billy,
keyboard-billy hat geschrieben:Ich möchte jetzt einen bestehenden Datensatz duplizieren. Dazu habe ich mir folgendes SQL-Statement überlegt:

Code: Alles auswählen

INSERT INTO "Aufträge" ("Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
                        "Ende", "Gage", "Währung", "Aufbau",
                        "Veranstaltungsort", "Straße", "Postleitzahl",
                        "Ort", "Telefon", "Mobiltelefon", "Fax",
                        "Ansprechpartner", "Bemerkungen")
VALUES ( SELECT "Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
        "Ende", "Gage", "Währung", "Aufbau", "Veranstaltungsort", "Straße",
        "Postleitzahl", "Ort", "Telefon", "Mobiltelefon", "Fax",
        "Ansprechpartner", "Bemerkungen"
 FROM  "Aufträge"
 WHERE ("Kundennummer" = 101 AND "Bemerkungen" LIKE '%fasching 2007'))
Versuche es mal mit:

Code: Alles auswählen

INSERT INTO "Aufträge" ("Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
                        "Ende", "Gage", "Währung", "Aufbau",
                        "Veranstaltungsort", "Straße", "Postleitzahl",
                        "Ort", "Telefon", "Mobiltelefon", "Fax",
                        "Ansprechpartner", "Bemerkungen")
 SELECT "Kundennummer", "Auftragsschlüssel", "Datum", "Beginn",
        "Ende", "Gage", "Währung", "Aufbau", "Veranstaltungsort", "Straße",
        "Postleitzahl", "Ort", "Telefon", "Mobiltelefon", "Fax",
        "Ansprechpartner", "Bemerkungen"
 FROM  "Aufträge"
 WHERE ("Kundennummer" = 101 AND "Bemerkungen" LIKE '%fasching 2007')
MfG Peter.
keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

Re: Datensatz mit SQL kopieren

Beitrag von keyboard-billy »

@PeterJHaas

Hallo Peter,

klasse Lösung - funzt einwandfrei 8) . Ganz herzliches Dankeschön für Deinen konstruktiven Beitrag :D .
B.t.w.: Wie bist Du auf diese Lösung gekommen (... im speziellen, dass man das VALUES weglässt und die Klammern anders setzen muss) :?:

@riedlka1
riedlka1 hat geschrieben:Genau aus diesem Grund habe ich es schon lange aufgegeben, mich mit halbfertigen, unzulänglichen Lösungen abzugeben
...OOo ist nicht minder "halbfertig" als die Lösung von M$ :!:
riedlka1 hat geschrieben:um einen Datensatz zu kopieren, eine so primitive Sache sollte schon Standard sein
In SQL gibt's keinen Standard! Es gibt nur eine allgemeine Anlehnung - die nennt sich SQL'92. Es ist aber kein Geheimnis, dass fast jede Datenbank ihren eigenen SQL-Dialekt hat :wink: .
keyboard-billy hat geschrieben:mit Office 97 ist das ein K L A C K S auch wenn ich Windows hasse, aber es ist wirklich B E N U T Z E R F R E U N D L I C H, das mußte sein!
2 Sachen:
  • 1. Ich habe einige Jahre mit M$ Office '97 beruflich zu tun gehabt; genauer gesagt ich habe darin programmiert. Die M$ JET-Database und das daran angebundene JET-SQL ist auch kein Standard und funktioniert keineswegs besser. Die HSQLDB von OOo ist auf alle Fälle wesentlich leistungsfähiger, als das was M$ Office '97 zu bieten hat.
  • 2. Redest Du jetzt von M$ Office oder WIndows, wenn Du von der Benutzerfreundlichkeit redest?
    OOo ist auf jeden Fall nicht weniger Benutzerfreundlich , als M$ Office :wink: . Nur wesentlich lestungsfähiger :lol: .
Natürlich muss man sich mit OOo eingehend beschäftigen und ordentlich üben. Aber das ist bei M$ Office nicht besser... :mrgreen:

Greets,
Billy
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!
PeterJHaas
**
Beiträge: 32
Registriert: Di, 09.10.2007 13:05

Re: Datensatz mit SQL kopieren

Beitrag von PeterJHaas »

Hallo Billy,
keyboard-billy hat geschrieben:B.t.w.: Wie bist Du auf diese Lösung gekommen (... im speziellen, dass man das VALUES weglässt und die Klammern anders setzen muss) :?:
Kurz mal in die Dokumentation meiner favorisierten Datenbank gesehen, da stehen jeweils ein paar Beispiele zu den einzelnen SQL-Befehlen. Ich bin mir aber sicher, daß man mittels Internetsuche auch schnell ein passendes Beispiel finden würde.
riedlka1 hat geschrieben:um einen Datensatz zu kopieren, eine so primitive Sache sollte schon Standard sein
In SQL gibt's keinen Standard! Es gibt nur eine allgemeine Anlehnung - die nennt sich SQL'92. Es ist aber kein Geheimnis, dass fast jede Datenbank ihren eigenen SQL-Dialekt hat :wink: .
Wobei die Unterschiede mehr im Detail und im Vorhandensein bestimmter Features liegen. Ich vermute mal, daß das Kopieren eines Datensatzes bei den meisten Datenbanken in der genannten Form funktioniert, wenn sie diese Funktion überhaupt unterstützen.

BTW: Auf jeden Fall auch bei den MS-Datenbanken.

MfG Peter.
Antworten