AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TFDBatchMove mit AutoInc

Ein Thema von TurboMagic · begonnen am 20. Dez 2022 · letzter Beitrag vom 23. Dez 2022
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#1

TFDBatchMove mit AutoInc

  Alt 20. Dez 2022, 15:46
Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC
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
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
662 Beiträge
 
#2

AW: TFDBatchMove mit AutoInc

  Alt 20. Dez 2022, 16:03
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?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#3

AW: TFDBatchMove mit AutoInc

  Alt 20. Dez 2022, 17:49
Pwer Trigger und Generator.
Trigger sieht so aus:

Delphi-Quellcode:
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^
Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
662 Beiträge
 
#4

AW: TFDBatchMove mit AutoInc

  Alt 20. Dez 2022, 18:13
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.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#5

AW: TFDBatchMove mit AutoInc

  Alt 20. Dez 2022, 18:58
Danke schon Mal dafür.
Nur: wie kann ich beim Batch Move Spalten ausblenden?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#6

AW: TFDBatchMove mit AutoInc

  Alt 20. Dez 2022, 20:14
Wenn das ID-Feld in der Zieltabelle als Identity markiert ist, sollte es reichen das poIdentityInsert aus den BatchMove-Options zu entfernen:
Zitat:
When this option is selected, then insert/update of the destination identity columns is enabled.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#7

AW: TFDBatchMove mit AutoInc

  Alt 21. Dez 2022, 17:23
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#8

AW: TFDBatchMove mit AutoInc

  Alt 21. Dez 2022, 21:39
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: Auto-Incremental Fields
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#9

AW: TFDBatchMove mit AutoInc

  Alt 21. Dez 2022, 21:54
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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#10

AW: TFDBatchMove mit AutoInc

  Alt 22. Dez 2022, 10:11
Ich muss auch ein paar der Spalten-Werte vor dem Schreiben negieren (* -1).
Daten per BatchMove übernehmen und dann ein update tabelle set spalte = spalte * -1 hinterherschicken?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 20:53 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