Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Komponente Table kopieren (https://www.delphipraxis.net/212100-komponente-table-kopieren.html)

MarcRB75 17. Dez 2022 17:44

Datenbank: ABS • Version: 7.93 • Zugriff über: Formular

Komponente Table kopieren
 
Hallo,
ich hoffe, mir kann jemand weiter helfen.

Ich habe auf einem Datenmodul eine Tabelle + Datasource.
Bei dieser Tabelle habe ich einige Felder, die auf per FieldKind (fkLookup), KeyFields, Lookupdataset, Lookupkeyfields, LookupResultField
auf andere Tabellen zugreifen.

Soweit so gut. Das funktioniert auch.

Aber kann man diese Tabelle, so wie diese festgelegt ist auch während der Laufzeit kopieren?
Also eine Komponenten-Kopie erstellen??

Ich habe 2 identische Datenbanken, in der 2 identischen Tabellen mit den Tabellenfelder vorliegen.

Ich möchte nun die vorhandene, während der Entwurfzeit festgelete Tabelle - mit festgelegten Felder-/Typen - kopieren.
(Also mit dem Lookup festlegungen ect).

Damit ich während der Laufzeit eine weitere Tabelle mit den in der 1. Tabelle festgelegten Typen/Felder auch habe.
Natürlich könnte ich während der Entwurfszeit die 1. Tabelle, die auf dem Datenmodul vorliegt kopieren ... das wäre das Einfachste.
Aber da ich mehrere Tabellen habe, müsste ich alle Tabellen kopieren, was ich nicht möchte, weil ich während der Laufzeit
nur die Tabelle mit allen Felderfestlegungen kopieren möchte, dessen "Original-Tabelle" vorliegt.

Ich hoffe, ich hab das jetzt irgendwie gut und verständlich ausgedrückt....

* -->> Table1.assign() klappt nicht. :(


Vielleicht würde mir schon ein Ansatz helfen... wenn man während der Entwurfszeit doppelt auf die Tabelle klickt, kann man
doch dort alle Felder Tabelle quasi hinzufügen.
Kann man z.B. während der Laufzeit diesen "Doppelklick" simulieren bzw. diese
Felder wie beim Doppeltclick hinzufügen. Geht das? Das würde mir auch schon weiterhelfen.


Könnte mir da bitte jemand weiterhelfen, ich mache da jetzt schon fast 2 Tage rum und das klappt - aus welchen Gründen auch immer -nicht.

mikhal 19. Dez 2022 08:05

AW: Komponente Table kopieren
 
So recht verstanden habe ich deine Frage nicht.
Wenn du eine Tabellen-Kopie mit den gleichen Inhalten benötigst, dann musst du dir eine zweite Tabelle Table2 mit den gleichen Feldern wie dem Original anlegen und anschließend entweder Satz für Satz via Table2.Append kopieren oder in einem Rutsch mit einer entsprechenden SQL-Anweisung (Insert-Statement).

Gruß
Mikhal

joachimd 19. Dez 2022 08:36

AW: Komponente Table kopieren
 
pack Dir die Table Komponente auf ein Datenmodul und erzeuge eine zweite Instanz des Datenmoduls....

Delphi.Narium 19. Dez 2022 11:47

AW: Komponente Table kopieren
 
Ein Datenmodul für eine Datenbank mit "allem Drum und Dran" in der IDE designen.

Zur Laufzeit je Datenbank eine Instanz dieses Datenmoduls erstellen und mit der jeweiligen Datenbank verbinden.

Letztlich ist ein Datenmodul auch nur ein Objekt und je Datenbank wird ein entsprechendes Objekt erstellt.

Wenn's mal nicht mehr zwei identische Datenbanken sind, sondern (warum auch immer) 3, 4, 42, ..., dann kannst Du weiterhin für jede Datenbank eine Instanz dieses Objektes (= Datenmoduls) erstellen, ohne Dir weitere Gedanken über die Kopie von irgendwelchen Tabellenkomponenten ... machen zu müssen.

himitsu 19. Dez 2022 13:04

AW: Komponente Table kopieren
 
Zitat:

Tabelle kopieren
Wilst du nun den Inhalt der Tabelle kopieren, also einer DB in die Andere,
oder doch eine Kopie der Komponente erstellen, um z.B. gleichzeitig auf beide Datenbanken zuzugreifen?



Oftmals kann man auch eine neue Instanz einer Komponente erstellen (Create)
und dann mit der Assign-Methode die Eigenschaften einer anderen Instanz kopieren.

MarcRB75 19. Dez 2022 23:24

AW: Komponente Table kopieren
 
Vielen lieben Dank für Eure Antworten.


Zitat:

Zitat von joachimd (Beitrag 1516391)
pack Dir die Table Komponente auf ein Datenmodul und erzeuge eine zweite Instanz des Datenmoduls....


Hört sich ja schon mal sehr interessant an.
mhh... aber was genau meinst Du mit "zweite Instanz des Datenmoduls" erstellen?


Zitat:

Zitat von mikhal (Beitrag 1516390)
So recht verstanden habe ich deine Frage nicht.
Wenn du eine Tabellen-Kopie mit den gleichen Inhalten benötigst, dann musst du dir eine zweite Tabelle Table2 mit den gleichen Feldern wie dem Original anlegen und anschließend entweder Satz für Satz via Table2.Append kopieren oder in einem Rutsch mit einer entsprechenden SQL-Anweisung (Insert-Statement).

Gruß
Mikhal

Ich meinte mit der Tabelle-Kopie die Festlegung der einzelnen Felder, also mit FieldKind (fkData, fkLookup... usw.)
Also nur die Festlegung der Tabelle selbst.

Denn ich habe Tabelle A --> TableName ist z.B. Kunden und
TabelleB hat den TableName z.B. Kunden2.
Die Feldernamen/Bezeichnungen der beiden Tabellen sind identisch.

Bei der Tabelle A habe ich also die Felderfestlegungen manuell definiert. (Doppelclick auf TabellA)
Und diese Definition soll TabelleB auch bekommen, ohne dass ich bei der TabelleB die Felderfestlegungen(Definitionen) manuell festlegen muss.
Es geht mir also nicht um den Inhalt der Tabelle selbst, sondern quasi nur um die Struktur, die ich bei TabellA festgelegt habe.
Diese Festlegung habe ich beim Doppelclick auf der TabelleA, Felder hinzufügen, bestimmt.

TigerLilly 20. Dez 2022 07:32

AW: Komponente Table kopieren
 
Vielleicht hilft das:
http://www.delphigroups.info/2/af/37581.html
https://docwiki.embarcadero.com/Libr...le.CreateTable

joachimd 20. Dez 2022 09:46

AW: Komponente Table kopieren
 
Zitat:

Zitat von MarcRB75 (Beitrag 1516426)
Zitat:

Zitat von joachimd (Beitrag 1516391)
pack Dir die Table Komponente auf ein Datenmodul und erzeuge eine zweite Instanz des Datenmoduls....

Hört sich ja schon mal sehr interessant an.
mhh... aber was genau meinst Du mit "zweite Instanz des Datenmoduls" erstellen?

Delphi-Quellcode:
var
  dm1, dm2: TMyDatamodule;
...
begin
...
  dm1:=TMyDatamodule.Create(self);
  dm2:=TMyDatamodule.Create(self);

  dm1.Table1.DoSomething; //Tabelleninstanz des ersten Datenmoduls
  dm2.Table1.DoSomething; //Tabelleninstanz des zweites Datenmoduls

TurboMagic 20. Dez 2022 15:42

AW: Komponente Table kopieren
 
Zitat:

Zitat von MarcRB75 (Beitrag 1516426)
Vielen lieben Dank für Eure Antworten.


Zitat:

Zitat von joachimd (Beitrag 1516391)
pack Dir die Table Komponente auf ein Datenmodul und erzeuge eine zweite Instanz des Datenmoduls....


Hört sich ja schon mal sehr interessant an.
mhh... aber was genau meinst Du mit "zweite Instanz des Datenmoduls" erstellen?

Dir ist bewußt, dass man Forms und genauso auch Datenmodule auch nicht automatisch erzeugen lassen kann sondern zur Laufzeit
eine Objektreferent haben kann die mittels Create der Form/des Datenmoduls dann instantiiert wird?

Somit brauchst du nur 2 Variablen vom Typ des Datenmoduls und kannst dennen jeweils mittels Create eine Instanz des Datenmoduls
erzeugen. Freigeben am Ende dann halt nicht vergessen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 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