Seite 1 von 1

Instanzen dynamisch erzeugen [erledigt]

Verfasst: Sa, 30. Jan 2021 15:17
von Manfred
Ich möchte gerne Instanzen dynamisch erzeugen, damit es schön kompakt wird. Dazu habe ich mir folgendes ausgedacht:

Code: Alles auswählen

FOR nI := 1 TO Len(aDatenbanken)
                 objektname := aDatenbanken[nI,1]
                 objekt := &objektname():new() <--------
                 objekt:cDbank := aDatenbanken[nI,2]
                 objekt:db_oeffnen()
                 objekt:db_schliessen()
         NEXT
Das klappt aber nicht, weil xbase jedesmal zur Laufzeit versucht eine Funktion daraus zu machen. Die gibt es aber dann nicht.
Geht es überhaupt, wie ich es gerne möchte, oder mache ich hier nur einen Fehler?

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 15:31
von Manfred
zur Verdeutlichung. So würde es aussehen, wenn es alles von hand programmiert würde

Code: Alles auswählen

oKlasse1 := antrieb():new()
oKlasse1:cdbank := "Klasse1"
oKlasse1:db_oeffnen()
oKlasse1:db_schliessen()

oKlasse1 := antrieb2():new()
oKlasse1:cdbank := "Klasse2"
oKlasse1:db_oeffnen()
oKlasse1:db_schliessen()

oKlasse1 := antrieb3():new()
oKlasse1:cdbank := "Klasse3"
oKlasse1:db_oeffnen()
oKlasse1:db_schliessen()
und dann eben ca 100 Stück davon.

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 15:53
von Tom
Du musst klammern. Wenn das überhaupt so geht.

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 16:00
von georg
Hallo, Manfred -


vorausgesetzt, es gibt die Klassen, könnte es so gehen:

Code: Alles auswählen

	cVar := "antrieb()"
	oClass := &cVar:new()

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 16:07
von Manfred
ergibt auch eine unbekannte Funktion

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 16:17
von Tom
Ich würde so klammern:

Code: Alles auswählen

(&cVar):new()

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 16:22
von Manfred
gleiches Problem. Hatte ich aber auch schonmal probiert.

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 16:39
von Tom
&(cVar):New() ? Ich kann hier nicht ausprobieren.

Re: Instanzen dynamisch erzeugen

Verfasst: Sa, 30. Jan 2021 16:44
von Manfred
auh man,
wieder was dazugelernt. Dank an Georg.
Durch die dynamische Routine, wurde die Zusatz DLL gar nicht eingebunden, in der die Klassen stehen. Das ist mir überhaupt nicht in den Sinn gekommen. Das Zauberwort heißt dann REQUEST Funktionsname. Jetzt wird eingebunden und jetzt klapp es genau so:

Code: Alles auswählen

FOR nI := 1 TO Len(aDatenbanken)
                            objektname := aDatenbanken[nI,1] + "()"
                            IF ! Empty(aDatenbanken[nI,2])
                               cDbank := aDatenbanken[nI,2]
                            ELSE
                               cDbank := aDatenbanken[nI,1]
                            ENDIF
                            objekt     := &objektname:new()
                            objekt:db_oeffnen()
                            objekt:db_schliessen()
                            objekt := NIL
                        NEXT
Da wäre ich niemals drauf gekommen. Ich hatte das zwar schonmal gehört, das nicht benutzte DLL auch nicht eingebunden werden, habe es aber eher für ein gerücht gehalten, weil mir noch nie sowas unterkam.

Re: Instanzen dynamisch erzeugen [erledigt]

Verfasst: Sa, 30. Jan 2021 16:47
von Manfred
das war jedesmal eine Arbeit für Doofe. Ich hatte dann zum Testen den Klassennamen direkt genommen und dann klappte es. Klar, dann wurde die DLL ja auch eingebunden. Als ich es aber im Livebetrieb über die Kommandozeile getippt habe, war sie nicht vorhanden. Und dann fiel mir im Projektmanager auf, das unter Modulen die DLL gar nicht drin war.
Wieder 2 Stunden für nix verbraten.... :banghead: