AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism [SQL] Datensatz kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL] Datensatz kopieren

Ein Thema von Nersgatt · begonnen am 3. Dez 2008 · letzter Beitrag vom 4. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

[SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:12
Datenbank: Firebird • Version: 2.0 • Zugriff über: Firebird .NET Provider
Hallo,

ich stehe im Moment etwas auf dem Schlauch.
Ich möchte einen Datensatz mit leichten Änderungen kopieren. Dabei möchte gern alle Felder, bis auf 2 bestimmte Felder eins zu eins kopieren. Und das auch, wenn in Zukunft evtl. mal Felder dazukommen.

In SQL könnte ich ja schreiben:
INSERT INTO TABELLE (ID, NAME, VORNAME) SELECT 4 AS ID, NAME, VORNAME FROM TABELLE WHERE ID = 3; Das produziert eine Kopie von Datensatz 3 und weist die ID 4 zu.
Wenn nun aber in Zukunft noch das Feld BERUF hinzu kommt, möchte ich mein SQL-Statement nicht ändern müssen. Wie geht man sowas an?

Leider kann ich im SELECT den * nur benutzen, wenn ich sonst nichts mit reinschreibe. Sonst hätte ich so eine Idee gehabt:
INSERT INTO TABELLE SELECT 4 AS ID, * FROM TABELLE WHERE ID = 3; Geht aber nicht.

Tipps?

Danke!
Jens
Jens
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:29
Ich glaube das ist nicht möglich. Ich wunder mich aber gerade, dass das "4 as ID" funktioniert. Ich kannte es bisher nur dass man direkt den Wert also hier nur "4" hinschreiben würde.

Gruß
Reli
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:35
Zitat von Relicted:
Ich wunder mich aber gerade, dass das "4 as ID" funktioniert. Ich kannte es bisher nur dass man direkt den Wert also hier nur "4" hinschreiben würde.
Mit "AS ID" weise ich dem ja nur einen Namen zu. Vielleicht könnte ich es mir sparen, habe ich mir aber mal so angewöhnt.

Wenn ich schreibe
SELECT 4 FROM RDB$DATABASE dann nennt Firebird die Spalter "F_1".
Wenn ich schreibe SELECT 4 AS ID FROM RDB$DATABASE dann heißt die Spalte halt "ID".

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:38
Hallo,

kenne Firebird nicht.

Bei Oracle oder SQL-Server täte ich ins Dictionary schauen und mir dort aus den Einträgen zur Laufzeit das passende Statement bauen, mit Ausnahme der Spalten, bei denen ich selbst was ändern möchte.

Unter SQL-Server könnte das ungefähr so aussehen:

SQL-Code:
select 'insert into tabelle (ID '
union all
select ' ,' + column_name from information_schema.columns where table_name like 'tabelleand column_name <> 'ID'
union all
select ') select 4 as ID'
union all
select ',' + column_name from information_schema.columns where table_name like 'tabelleand column_name <> 'ID'
union all
select 'from tabelle where id = 3'
Wenn Du Dir nun das Ergebnis dieses SQL nimmst, solltest Du das Insert-Statement erhalten, das Du wünschst.
SQL-Code:
insert into tabelle (ID
 ,name
 ,vorname
 ,beruf
) select 4 as ID
,name
,vorname
,beruf
from tabelle where id = 3
Und wenn Du neue Spalten in die Tabelle einfügst, so ändert sich das Ergebnis der ersten Abfrage um die entsprechenden Spalten und passt sich somit an Dein geändertes Datenmodell an.

Unter Oracle haben wir mal ein System gebaut, dass permanenten Änderungen des Datenmodells unterworfen war und ist. Diese Routinen sind nun seit etwa 5 Jahren im Einsatz und mussten bisher nicht einmal angepasst werden.
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:39
Ja bei Abfragen ist das ja auch i.O. aber bei "Insert Selects" überflüssig, da es da auf die Reihenfolge ankommt wie du die Spalten angibst.

Gruß
reli
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:40
Wie wärs denn mit sowas :

Delphi-Quellcode:
Dataset2 := Dataset1; // alle Felder zunächst mal kopieren
// einzelne Felder bearbeiten
Dataset2.Post;
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:44
Zitat von nahpets:
Bei Oracle oder SQL-Server täte ich ins Dictionary schauen und mir dort aus den Einträgen zur Laufzeit das passende Statement bauen, mit Ausnahme der Spalten, bei denen ich selbst was ändern möchte.
Danke, so oder ähnlich kann ich es in Firebird auch umsetzen. Ich mag halt dieses SQL-Zusammen-Gebastel nicht sonderlich, aber ich glaube hier führt kein Weg daran vorbei. Immer noch besser, als bei jedem neuen Feld daran denken zu müssen, auch diese Routine anzupassen.
Bis vor einiger Zeit habe ich 4GL programmiert, dort konnte man sowas einfach mit dem Befehl BUFFER-COPY lösen. Naja, alles hat sein Vor- und Nachteile.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:46
Zitat von Hansa:
Wie wärs denn mit sowas :

Delphi-Quellcode:
Dataset2 := Dataset1; // alle Felder zunächst mal kopieren
// einzelne Felder bearbeiten
Dataset2.Post;
Siehe oben: Delphi.NET mit Firebird.NET Provider

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:53
Soll das heißen, bei .NET gibts in Delphi kein TDataset oder ähnliches mehr ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

Re: [SQL] Datensatz kopieren

  Alt 3. Dez 2008, 14:56
Zitat von Hansa:
Soll das heißen, bei .NET gibts in Delphi kein TDataset oder ähnliches mehr ?
Es gibt in .NET ein Dataset, das hat aber mit dem TDataSet nicht viel zu tun. Ist ein ganz anderes Konzept.

Gruß,
Jens
Jens
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz