![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
TFDBatchMove mit AutoInc
Hallo,
gegeben ein Delphi 11.2, eine Firebird Datenbank mit Tabellen die per Generator automatisch erzeugte eindeutige Primärschlüssel haben und jemanden der mit FDBatchMove noch nichts gemacht hat. Wunsch: Kopieren von solchen Datensätzen in eine andere Datenbank. Dort ist ja auf der gleichnamigen Tabelle aber auch ein Generator drauf. Geht sowas? Wie kann man mit sowas umgehen? Und was, wenn das Ziel nicht eine andere DB ist, sondern die selbe Tabelle? Ich also nur eine Kopie eines Datensatzes machen will? Kann ich beim BatchMove also Spalten aussparen? (wäre auch für nicht zu kopierende Spalten interessant) Also sowas wie * aber ohne "Spalte4" und "Spalte7", so dass ich nicht alle zu kopierenden Spalten angeben muss, was bei Strukturänderungen doof wäre. Grüße TurboMagic |
AW: TFDBatchMove mit AutoInc
Ist das Autoinc_feld so angelegt:
create table t1 (id integer generated by default as identity primary key) oder via Trigger + Generator? Wie sieht im zweiten Fall der Trigger aus? |
AW: TFDBatchMove mit AutoInc
Pwer Trigger und Generator.
Trigger sieht so aus:
Delphi-Quellcode:
Grüße
CREATE TRIGGER BI_KASSE_BONKOPF_BON_ID FOR KASSE_BONKOPF
ACTIVE BEFORE INSERT POSITION 0 AS BEGIN IF (NEW.BON_ID IS NULL) THEN NEW.BON_ID = GEN_ID(KASSE_BONKOPF_BON_ID_GEN, 1); END^ TurboMagic |
AW: TFDBatchMove mit AutoInc
Wenn du immer einen neuen Key haben willst musst du entweder das Feld nicht übergeben, Null übergeben oder den Trigger so ändern, dass er nicht auf Null prüft.
|
AW: TFDBatchMove mit AutoInc
Danke schon Mal dafür.
Nur: wie kann ich beim Batch Move Spalten ausblenden? |
AW: TFDBatchMove mit AutoInc
Wenn das ID-Feld in der Zieltabelle als Identity markiert ist, sollte es reichen das poIdentityInsert aus den BatchMove-Options zu entfernen:
Zitat:
|
AW: TFDBatchMove mit AutoInc
Hallo,
bin noch ganz neu bei der BatchMove Komponente. Was bedeutet Zielfeld? Muss ich da irgendwie angeben in welche Spalten die Quelldaten sollen? Wenn die den selben Namen wie die Quellspalten doch wohl eher nicht, oder? |
AW: TFDBatchMove mit AutoInc
Das ist korrekt. Wenn Name, Typ und Size übereinstimmen sollte das problemlos funktionieren.
Mit den ID-Feldern ist das aber etwas tricky. Im Idealfall erkennt FireDAC solche Felder automatisch und entfernt das pfUpdate in den ProviderFlags. Damit wird das Feld nicht in die DB geschrieben. Mit dem Entfernen des oben genannten poIdentityInsert wird genau das ausgenutzt. Näheres zu solchen ID-Feldern und deren Erkennung findest du hier: ![]() |
AW: TFDBatchMove mit AutoInc
Danke schon mal dafür, nur hab' ich ja noch ein Problem:
Ich muss auch ein paar der Spalten-Werte vor dem Schreiben negieren (* -1). Das scheint so nicht wirklich machbar, zumidnest nicht was ich bisher so in den Eigenschaften der Komponenten gesehen habe. => vermutlich muss ich's doch "klassisch" umsetzen. |
AW: TFDBatchMove mit AutoInc
Zitat:
SQL-Code:
hinterherschicken?
update tabelle set spalte = spalte * -1
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz