![]() |
Collections mit COM
Hallo Zusammen,
Ich habe eine Datenbank, einen COM+ Server (Serverschicht), einen COM+ Business Layer(Objektschicht) und eine Client Anwendung. Der Server übernimmt die Aufgabe, Daten von/in die Datebank zu schreiben bzw. zu lesen. Die Objektschicht hat die Aufgabe die gelesenen Daten zu verifizieren bzw, plausibilisieren und in Form einer Collection dem Client zur Verfügung zu stellen bzw. die vom Client erstellten Collections zur Speicherung an die Serverschicht zu übergeben. Meine Frage ist: Wie stelle ich es in Delphi am Besten an, die von der Serverschicht übermittelten ADO Recordsets in Collections zu konvertieren ? Beispiel.: Der Client fordert eine Übersicht aller Kunden an. Nun möchte ich eine Collection haben, die z.B. TCustomers heißt und aus einzelnen TCustomerItem(s) besteht. Jedes TCustomerItem enthält die gleichen Properties wie z.B. Plz, Strasse, Name, Nachname, usw. Frage: Wie würdet Ihr das entsprechende Interface dazu gestalten !? Gruß, Tom |
Re: Collections mit COM
Hoho, jetzt wirds lustig ;-) Gib mir mal ein wenig Zeit, ich muss mal schauen, ob ich schnell ein Beispiel zusammen bekomme ;-)
...:cat:... |
Re: Collections mit COM
Liste der Anhänge anzeigen (Anzahl: 1)
Also, ich mache es jetzt mal kurz. Dein Collection-Interface muss das Windows-Interface IEnumVariant unterstützen. Im Type-Library Editor musst Du für das Collection-Interface folgende Read-Only-Properties hinzfügen:
Die Interface-Klasse der Collection-List muss erweitert werden. Im gelieferten Beispiel wird aus
Delphi-Quellcode:
einfach
TCollectionList = class(TASPMTSObject, ICollectionList)
Delphi-Quellcode:
TBaseCollectionList kommt aus der mitgelieferten Unit uBaseCollection.
TCollectionList = class(TBaseCollectionList, ICollectionList, IEnumVariant)
Das Interface des Collection-Item wird in der Type-Library um die Eigenschaft Key erweitert, Type BSTR (WideString), ID auf 0 (Standardeigenschaft; ist optional, aber sinnvoll). Die Interface-Klasse des Collection-Item muss auch erweitert werden. Im gelieferten Beispiel wird aus
Delphi-Quellcode:
einfach
TCollectionItem = class(TASPMTSObject, ICollectionItem)
Delphi-Quellcode:
Das Interface IBaseCollectionItem kommt auch aus der mitgelieferten Unit uBaseCollection.
TCollectionItem = class(TASPMTSObject, ICollectionItem, IBaseCollectionItem)
Die Klasse TBaseCollectionList In dieser Klasse geschieht das eigentliche der Collection-Arbeit. Die eigentlichen Funktionen des Interfaces IEnumVariant werden hier gefüllt. Collections müssen, wenn diese durchlaufen werden sich selbst klonen, aber mit dem gleichen Daten wie das Original arbeiten. Dadurch werden diese thread-safe. Die mitgelieferte Basisklasse TBaseCollectionList tut genau das. Ich setze die Unit (unter steten Erweiterungen) seit Feb. 2000 ein. Inzwischen ist die Unit mehrere hundert Male erfolgreich implementiert. Ich hoffe es funktioniert auch bei Dir ohne Probleme. Einfach anschauen und testen. Eine kleine Bitte Wenn jemand Verbesserungen oder Vorschläge hat, sendet diese bitte an mich. Jetzt das Beispiel und viel Erfolg ;-) Bedenke, daß das Beispiel mit Delphi 7 erstellt ist und daher die Unit Variants benötigt. Wenn Dein Compiler älter ist (ich glaube bis v5) einfach die Unit aus der Uses-Klausel entfernen, die wurde erst später durch Borland eingeführt. ...:cat:... |
Re: Collections mit COM
P.S. Ich hoffe es ist kein Fehler im Server-Beispiel. Ich habe gerade keine Möglichkeit die Collection zu testen :wall: :mrgreen:
...:cat:... |
Re: Collections mit COM
Hallo Sakura,
Zunächst einmal recht herzlichen Dank für Deine prompte Unterstützung. Ich denke, Du hast verstanden worum es mir geht und mir gleich das entsprechende Beispiel dazu geliefert. Find ich echt lobenswert !!! Ich werde mir das Beispiel mal genauer anschauen und ein paar Tests damit durchführen. Gruß, Tom |
Re: Collections mit COM
Ich musste es gerade noch einmal hochladen, da mir ein Fehler unterlaufen war :oops:
...:cat:... |
Re: Collections mit COM
Hallo Sakura,
Danke nochmals, das ist genau das was ich brauche. Es scheint alles wunderbar zu funktionieren. Wie bereits erwähnt werde ich die DLL mal etwas genauer testen. Hast Du schon ähnliche Erfahrungen im Real-Life-Modus sammeln können !? Mich interessieren vor allem Daten über Geschwindigkeit und Zuverlässigkeit, die mann mit diesem Konzept erzielt. Meine Erfahrungen mit diesem Konzept beruhen sich lediglich auf VC++. Man munkelt ja darüber, das VC++ in jedem Falle immer etwas schneller ist als Delphi. PS: Nein ..., ich will keine Diskusion darüber führen, welche Sprache besser ist. Die Beste ist und bleibt Delphi !!! Gruß, Tom |
Re: Collections mit COM
Zitat:
Zitat:
Zitat:
Zitat:
Wenn Dir jemand mit einem Vergleich C++ vs. Delphi kommt, Kopf hoch. Wirkliche Vorteile kann C++ nur im tief mathematischen Bereich erzielen und natürlich in der Treiberprogrammierung ;-) ...:cat:... |
Re: Collections mit COM
Hallo Sakura,
Ich versuche schon seit einiger Zeit meine Kollegen davon zu überzeugen, das Delphi oder gar der C++ Builder um einiges wirtschaftlicher arbeitet als die Lösung von Microsoft. Mich korzt es regelrecht an, mit welchen Einschränkungen ich tagtäglich konfrontiert werde. In dem Glauben, Microsoft hätte einiges an seiner Programmiersprache C++ verbessert, habe ich mir das Visual Studio.Net zugelegt. Jedoch weit gefehlt. Außer ein paar Updates in der MFC ist dort nichts passiert. Will man nun einigermaßen komfortabel mit C++ von Microsoft arbeiten, beruht die Geschichte auf dem .NET Framework also Manageged C++. Also warum lassen sich meine Kollegen davon nur nicht überzeugen !? Aber, - Was der Bauer nicht kennt, daß ißt er nicht ! PS.: Du hast ein CopyRight auf die Unit UBaseCollection. Gibt es da einige Regeln von denen ich wissen müsste !? Gruß Tom |
Re: Collections mit COM
Hallo Sakura,
Könntest Du mir noch die Frage mit dem Copyright beantworten !?, dann kann ich hier abschließen. Natürlich kannst Du mir auch per Mail antworten unter vanveen@specialwork.de Gruß, Tom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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