AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TDatabase mit Assign kopieren?
Thema durchsuchen
Ansicht
Themen-Optionen

TDatabase mit Assign kopieren?

Ein Thema von sepp001 · begonnen am 22. Jul 2004 · letzter Beitrag vom 22. Jul 2004
Antwort Antwort
Benutzerbild von sepp001
sepp001

Registriert seit: 12. Mär 2004
Ort: Schwerin
34 Beiträge
 
Delphi 7 Professional
 
#1

TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 08:20
Hallo,

die Methode Assign der TDatabase scheint nicht zu funktionieren (D7). Ich kann nicht Datbase1.Assign(Database2) durchführen. Weiss jemand Rat?

Ciao,
sepp001
Deutschland ist das einzige Land der Welt, in dem Männer achtlos über ein halbes Dutzend nackter Frauen klettern, um an eine Flasche Bier zu kommen.
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#2

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 09:15
Hallo sepp001,

Zitat:
Datbase1.Assign(Database2) durchführen. Weiss jemand Rat?
Code:
Datbase1 := Database2;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 09:32
Zitat von trifid:
Code:
Datbase1 := Database2;
Ich glaube nicht deine Lösung das gewünschte ist. Damit wird ja nur der Referenzzeiger kopiert.

Ich denke eher das eine Assign von einer TDatabase auf eine andere auch nicht sinnvoll ist, da ja z.B. das Property DatabaseName eindeutig sein muss.
Schau einfach mal in den Delphi-Source-Code ob für TDatabase überhaupt ein überladene Version der Assign-Methode definiert ist?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 09:38
Zitat von sepp001:
die Methode Assign der TDatabase scheint nicht zu funktionieren (D7). Ich kann nicht Datbase1.Assign(Database2) durchführen.
Anscheinend hat Borland (so wie ich auch) keinen Sinn darin gesehen ein TDatabase-Objekt
einem anderen TDatabase-Objekt zuzuweisen.
Du kannst die Eigenschaften ja von Aussen zuweisen:
Delphi-Quellcode:
Database2.Databasename := Database1.Databasename;
Database2.LoginPrompt := Database1.LoginPrompt;
...
Wenn die beiden Objekte exakt die gleichen Eigenschaften haben, würde dies sicher die
Performance der BDE stören.
Wenn die beiden Objekte nicht genau die gleichen Eigenschaften haben, brauchst du auch kein
Assign.
Vielleicht bist du auch nur schreibfaul und wolltest folgendes:
Delphi-Quellcode:
Database2.Assign(Database1);
Database2.Databasename := 'irgendneandereDB';
aber das kann man auch vergessen, da bei Assign auch die Eigenschaft Connected kopiert worden wäre.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#5

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 09:52
@Bernhard,

Zitat:
Damit wird ja nur der Referenzzeiger kopiert.
schnell, einfach und es funktioniert

Die Frage müsste von sepp001 anders gestellt werden.
@sepp001
Wieso willst du oder für was brauchst du einen Database.Assign, was willst du damit bezwecken?
Welches Problem hast du überhaupt, damit du auf einen Database.Assign gekommen bist?

Zitat:
Ich denke eher das eine Assign von einer TDatabase auf eine andere auch nicht sinnvoll ist, da ja z.B. das Property DatabaseName eindeutig sein muss.
genau und deswegen gibt es nur 2 Möglichkeiten
- direkte Objektzuweisung per Referenz
- neue Instanz erzeugen und jedes einzelne Property mit den Werten der Source-Instanz füllen
dabei darf aber der Database.Name nicht identisch sein oder mit einen Zähler versehen
DatabaseNeu.Name := Database1.Name + IntToStr (n);
  Mit Zitat antworten Zitat
Benutzerbild von sepp001
sepp001

Registriert seit: 12. Mär 2004
Ort: Schwerin
34 Beiträge
 
Delphi 7 Professional
 
#6

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 10:09
Hallo:

Sinn und Zweck der ganzen Angelegenheit:

ich will eine Database-Komponente an eine DLL übergeben. Da mir die DLL aber ohne meinen Einfluss an der original übergebenen herumpfuscht (da sie, wie richtig bemerkt, als Referenz übergeben wird), möchte ich eine exakte Kopie rüberschieben.

Bleibt wohl doch nur der Weg über die Propertybelegung...

Ciao,
sepp001
Deutschland ist das einzige Land der Welt, in dem Männer achtlos über ein halbes Dutzend nackter Frauen klettern, um an eine Flasche Bier zu kommen.
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#7

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 12:27
@sepp001,

Zitat:
Da mir die DLL aber ohne meinen Einfluss an der original übergebenen herumpfuscht (da sie, wie richtig bemerkt, als Referenz übergeben wird), möchte ich eine exakte Kopie rüberschieben.
Aber das "herumpfuschen" programmierst ja du in deiner DLL, damit die Database-Komponente verändert wird.
Wenn eine Verbindung über ein Database-Objekt mal steht, was soll man dann noch viel verändern wollen?
Ich will nur damit ausdrücken, dass du nochmals deinen Source analysieren solltest wo Veränderungen im Database-Objekt der DLL entstehen (könnten).
Häufig ist in der DLL oder im Form das Database.Active := True gesetzt, und dann fetzt es natürlich.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 12:37
Zitat von trifid:
@Bernhard,

Zitat:
Damit wird ja nur der Referenzzeiger kopiert.
schnell, einfach und es funktioniert
Ist aber nicht das, was mit Assign realisiert wird. Assign kopiert den Zustand eines Objekt in ein anderes Objekt. Die Zuweisung mittels := biegt nur den Zeiger um, so daß beide auf das gleiche Objekt zeigen.

Wenn nun beide Objekt nicht per Formular-Verwaltung gesichert sind, sondern dynamisch erzeugt werden, hast Du danach ein schönes Speicherleck bzw. kracht es wenn du beim zweiten Objekt die Free-Methode aufrufst.
  Mit Zitat antworten Zitat
Benutzerbild von trifid
trifid

Registriert seit: 12. Sep 2003
297 Beiträge
 
#9

Re: TDatabase mit Assign kopieren?

  Alt 22. Jul 2004, 13:31
@Bernhard,
Zitat:
Ist aber nicht das, was mit Assign realisiert wird. Assign kopiert den Zustand eines Objekt in ein anderes Objekt. Die Zuweisung mittels := biegt nur den Zeiger um, so daß beide auf das gleiche Objekt zeigen.
Korrekt.

Zitat:
Wenn nun beide Objekt nicht per Formular-Verwaltung gesichert sind, sondern dynamisch erzeugt werden, hast Du danach ein schönes Speicherleck bzw. kracht es wenn du beim zweiten Objekt die Free-Methode aufrufst.
a1) ich gehe davon aus, wenn einer eine Referenz übergibt,
a2) dann weiss er auch was er damit macht
b) wenn eine Referenz einer DLL übergeben wird, dann gehört auch kein .Free in die DLL die dieses Referenz-Objekt zerstören könnte
c1) wenn dynamisch Objekte erstellt werden, dann a2)
c2) ist sowie immer vorsicht geboten
c3) wird auch der Aufwand größer um die dynamischen Objekte wieder zu zerstören (ObjektListen, Interface, RTTI, etc.)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:07 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