RAD Studio für .NET

Werbung
RAD Studio für .NET
Copyright© 2008 CodeGear™. Alle Rechte vorbehalten.
RAD Studio für .NET
Inhalt
Konzepte
Datenbankanwendungen mit ADO.NET entwickeln
1
3
Überblick über AdoDbx Client
6
VCL für .NET-Datenbanktechnologien
7
Überblick zum BDP-Verbindungs-Pooling
9
Überblick zu dbExpress-Komponenten
10
Überblick zu dbGo-Komponenten
11
AdoDbx.NET-Datentypen
12
Überblick zu ADO.NET
15
BDP-Migration: Überblick
18
Blackfish SQL - Überblick
21
ADO.NET-Komponentendesigner
23
Deployment von Datenbankanwendungen für das .NET Framework
27
Datenprovider für Microsoft .NET
28
Überblick zu Stored Procedures
31
dbExpress-Framework
32
dbExpress Framework-Kompatibilität
34
Einführung in InterBase Express
35
Anwendungen mit nicht verwaltetem Code entwickeln
41
COM Interop in verwalteten Anwendungen
41
DrInterop verwenden
46
Deployment von COM Interop-Anwendungen
47
Platform Invoke mit Delphi für .NET verwenden
48
Interfaces für virtuelle Bibliotheken
56
Modellierung
Code-Visualisierung - Überblick
58
58
Berichte für .NET-Anwendungen entwickeln
60
Rave Reports in RAD Studio verwenden
60
Anwendungen mit VCL.NET-Komponenten entwickeln
62
Änderungen aufgrund der Unterstützung von 64-Bit .NET 2.0
63
Portieren von VCL-Anwendungen nach RAD Studio
64
VCL-Anwendungen portieren
75
Überblick zu VCL für .NET
77
Web-Service-Clients portieren
80
iii
RAD Studio für .NET
Webanwendungen mit ASP.NET entwickeln
Überblick zu ASP.NET
85
Überblick zu CodeGear DB Web Controls
88
DB Web Controls in Haupt-/Detail-Anwendungen verwenden
90
Überblick zur Navigations-API der DB Web Controls
92
Überblick zum DB Web Control-Experten
93
XML-Dateien und DB Web Controls verwenden
99
Mit DataView-Objekten arbeiten
101
Deployment von ASP.NET-Anwendungen
102
WebDataLink-Interfaces verwenden
103
Web-Services mit ASP.NET entwickeln
105
Überblick zu den ASP.NET-Web-Services
106
Protokoll-Stack von Web-Services
108
ASP.NET-Web-Services-Support
110
Anleitungen
Datenbankanleitungen
iv
83
113
114
Neue Verbindung in Daten-Explorer einfügen
116
Anleitung zum Hinzufügen eines Dialogfelds zur Fehlerbehebung zu einer BDP-Anwendung.
116
Datenbank im Daten-Explorer durchsuchen
118
Verbinden mit AdoDbx Client
119
Datenbank-Projekte mit dem Daten-Explorer erstellen
120
Tabellenzuordnungen erstellen
120
SQL im Daten-Explorer ausführen
122
Fehler in Tabellenzuordnungen behandeln
123
Daten zwischen Datenbanken migrieren
124
Verbindungen im Daten-Explorer bearbeiten
125
Datenbankverbindungen bearbeiten
126
Eine Datenbankanwendung für die Auflösung in mehrere Tabellen erstellen
132
Parameterübergabe in einer Datenbankanwendung
134
Datenadapter-Vorschau verwenden
136
Anweisungstext-Editor verwenden
137
Designer für Datenadapter verwenden
138
Verbindungseditor verwenden
139
Standarddatenmengen verwenden
140
Typisierte Datenmengen verwenden
143
Herstellen einer Verbindung zu einer Datenbank mit dem dbExpress Treiber-Framework
145
Eine verteilte Datenbankanwendung erstellen
147
RAD Studio für .NET
Interoperative Anwendungen – Anleitungen
150
Hinzufügen einer J2EE-Referenz
150
Referenzen zu einem COM-Server hinzufügen
150
Anleitungen für die Modellierung
152
Code-Visualisierungsdiagramme als Grafik exportieren
152
Importieren und Exportieren eines Modells mit XMI Metadata Interchange (XMI)
153
Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms
154
Verwenden des Übersichtsfensters
155
VCL für .NET – Anleitungen
157
VCL-Formularanwendungen mit Grafiken erstellen
161
ADO.NET-Datenbankanwendungen mit VCL.NET-Formularen erstellen
161
VCL-Formularanwendung erstellen
163
Aktionen in einer VCL-Formularanwendung erstellen
163
VCL-Formularanwendung "Hello World" erstellen
165
Mit dem Aktionsmanager Aktionen in einer VCL-Formularanwendung erstellen
166
dbExpress.NET-Datenbankanwendungen mit VCL-Formularen erstellen
167
Anwendungen mit XML-Komponenten erstellen
169
Ausführen von Änderungen, die wegen der Unterstützung von 64-Bit .NET 2.0 erforderlich sind
171
Eine neue VCL.NET-Komponente erstellen
174
Bitmap-Grafik in einer VCL-Formularanwendung anzeigen
175
Rechtecke und Ellipsen in einer VCL-Formularanwendung zeichnen
176
Abgerundete Rechtecke in einer VCL-Formularanwendung zeichnen
177
Gerade Linien in einer VCL-Formularanwendung zeichnen
177
Bitmap-Grafik in ein Steuerelement einer VCL-Formularanwendung einfügen
178
.NET-Steuerelemente in VCL.NET importieren
180
ASP.NET – Anleitungen
182
ASP.NET-Anwendungen erstellen
186
ASP.NET-Datenbankanwendung erstellen
187
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 1
189
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 2
191
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 3
192
ASP.NET-Anwendung "Hello World" erstellen
193
Erstellen einer ASP.NET Sitemap
194
Aktenkoffermodell-Anwendung mit DB Web Controls erstellen
198
Anwendung mit DB Web Controls erstellen
199
HTML-Elemente in Server Controls konvertieren
200
XML-Datei für DB Web Controls erstellen
201
v
RAD Studio für .NET
Metadaten für eine Datenmenge erstellen
203
Virtuelle Verzeichnisse erstellen
204
Aggregatwerte mit der DBWebAggregateControl-Komponente hinzufügen
204
ASP.NET-Anwendungen debuggen und aktualisieren
205
Deployment einer ASP.NET-Anwendung mit Blackfish SQL an ein System ohne RAD Studio
206
HTTP-Meldungen in ASP.NET erzeugen
207
Spalten in DBWebGrid-Objekten binden
207
Berechtigungen für die Nutzung von XML-Dateien festlegen
208
Fehlerbehebung in ASP.NET-Anwendungen
209
Den DB Web Control-Experten verwenden
211
Den ASP.NET-Deploymentmanager verwenden
212
Mit dem HTML-Tag-Editor arbeiten
215
ASP.NET User Controls verwenden
216
Web-Services-Anleitungen
Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen
218
Webreferenzen in ASP.NET-Projekte einfügen
220
ASP.NET-Web-Services-Anwendung "Hello World" erstellen
222
Web-Services-Client-Anwendung von Delphi für Win32 nach Delphi für .NET portieren
223
Index
vi
218
a
1
RAD Studio für .NET
1
1 Konzepte
Themen
Name
Beschreibung
Datenbankanwendungen mit ADO.NET entwickeln (
see page 3)
Anwendungen mit nicht verwaltetem Code entwickeln (
Modellierung (
see page 41)
ADO.NET ist ein kohärentes Programmiermodell, das den Datenzugriff innerhalb
des .NET Framework bereitstellt. Neben der Unterstützung für MS SQL, Oracle
und OLE DB-Verbindungskomponenten, die bereits im .NET Framework
verankert ist, enthält RAD Studio Datenprovider für .NET
(AdoDbxClient-Provider). AdoDbx ermöglicht einen Zugriff auf MS SQL, Oracle,
DB2 und Interbase. Mit den AdoDbx-Komponentendesignern wird die
Generierung und Konfiguration von AdoDbx-Komponenten vereinfacht.
Sie können problemlos neue VCL-Formularanwendungen für das .NET
Framework erstellen oder vorhandene Win32-VCL-Formularanwendungen zum
.NET Framework migrieren, da die konventionellen
Delphi-Datenbanktechnologien wie dbExpress und dbGo in RAD Studio weiterhin
unterstützt werden.
Dieser Abschnitt gibt einen Überblick über die Verwendung von RAD... more (
see page 3)
RAD Studio stellt Funktionen zur Unterstützung von nicht verwaltetem Quelltext
in .NET bereit.
Sollen vorhandene COM- oder ActiveX-Komponenten im .NET Framework
verwendet werden, können Sie bei der Erstellung Ihrer Anwendungen auf die
.NET COM Interop-Funktionen in RAD Studio zurückgreifen.
see page 58)
Berichte für .NET-Anwendungen entwickeln (
see page 60)
Anwendungen mit VCL.NET-Komponenten entwickeln (
Webanwendungen mit ASP.NET entwickeln (
see page 62)
see page 83)
RAD Studio wird mit Rave Reports von Nevrona geliefert. Mit Hilfe dieser Tools
können Sie Berichte für Ihre Anwendungen erstellen und Lösungen für die
Berichterstellung entwickeln, die von den Benutzern Ihrer Anwendung genutzt
und angepasst werden können.
VCL.NET ist eine erweiterte Sammlung der VCL-Komponenten, die dazu dienen,
komplexe Anwendungen in Delphi schnell und einfach zu erstellen. VCL.NET
bietet Ihnen die Möglichkeit, Ihre Delphi VCL-Anwendungen und -Komponenten
Benutzern des Microsoft .NET Framework zur Verfügung zu stellen. Mit RAD
Studio können Sie auf alle Vorteile des .NET Framework zugreifen und sich
gleichzeitig der benutzerfreundlichen und leistungsstarken
komponentengesteuerten Entwicklungsumgebung von Delphi bedienen.
Mit RAD Studio lassen sich folgende Anwendungstypen erstellen: Sie können
VCL.NET-Formularanwendungen erstellen, die sich auf dem .NET Framework
ausführen lassen, aber dennoch die VCL.NET-Komponenten und
-Steuerelemente verwenden. Sie können .NET-Anwendungen erstellen, die das
zugrunde liegende .NET Framework und... more ( see page 62)
ASP.NET ist das Programmiermodell für das Erstellen von Webanwendungen
auf der Basis des .NET Framework. Dieser Abschnitt erläutert den
konzeptionellen Hintergrund für das Erstellen von ASP.NET-Anwendungen in
RAD Studio. Neben der Unterstützung der Datenzugriffskomponenten im .NET
Framework enthält RAD Studio DB Web Controls. Die DB Web Controls
verwenden die .NET Framework-Provider und die Borland-Datenprovider für
.NET (BDP.NET) um die Entwicklung von Webanwendungen zu beschleunigen.
1
RAD Studio für .NET
Web-Services mit ASP.NET entwickeln (
1
2
see page 105)
1
Web-Services sind eine programmierbare Entität, die eine bestimmte
Funktionalität bereitstellt, zum Beispiel eine Anwendungslogik. Auf Web-Services
kann von jedem beliebigen System mit Hilfe der Internetstandards (z.B. XML und
HTTP) zugegriffen werden. Bei Anwendungen, die mit ASP.NET-Web-Services
erstellt wurden, kann es sich entweder um eigenständige Anwendungen handeln
oder um Teilkomponenten einer größeren Webanwendung. Mit Hilfe des
XML-basierten Messaging können diese Anwendungen für eine beliebige Anzahl
verteilter Systeme Anwendungskomponenten bereitstellen. RAD Studio enthält
verschiedene Methoden, die Sie beim Erstellen, Deployment und Verwenden von
ASP.NET-Web-Services-Anwendungen unterstützen. Weitere grundlegende
Informationen über Web-Services finden Sie in der Dokumentation zum Microsoft
.NET SDK.
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
entwickeln
ADO.NET ist ein kohärentes Programmiermodell, das den Datenzugriff innerhalb des .NET Framework bereitstellt. Neben der
Unterstützung für MS SQL, Oracle und OLE DB-Verbindungskomponenten, die bereits im .NET Framework verankert ist, enthält
RAD Studio Datenprovider für .NET (AdoDbxClient-Provider). AdoDbx ermöglicht einen Zugriff auf MS SQL, Oracle, DB2 und
Interbase. Mit den AdoDbx-Komponentendesignern wird die Generierung und Konfiguration von AdoDbx-Komponenten
vereinfacht.
Sie können problemlos neue VCL-Formularanwendungen für das .NET Framework erstellen oder vorhandene
Win32-VCL-Formularanwendungen zum .NET Framework migrieren, da die konventionellen Delphi-Datenbanktechnologien wie
dbExpress und dbGo in RAD Studio weiterhin unterstützt werden.
Dieser Abschnitt gibt einen Überblick über die Verwendung von RAD Studio mit der ADO.NET-Architektur und die VCL für
.NET-Datenbanktechnologien.
Themen
Name
Überblick über AdoDbx Client (
Beschreibung
see page 6)
AdoDbx Client implementiert einen ADO.NET 2.0-Provider für alle Treiber von
dbExpress Version 4. Dieser Provider unterstützt die neueren erweiterten
Metadaten von dbExpress 4. Alle mit Delphi ausgelieferten dbExpress-Treiber
implementieren die neueren erweiterten Meatdaten.
AdoDbx Client ist eine Implementierung der ADO.NET 2.0-Provider-Klassen.
ADO.NET Provider ist eine Gruppe von Klassen, die Datenbankdienste für .NET
bereitstellen. Sie ermöglichen den Zugriff auf relationale Datenbanken, XML und
Anwendungsdaten. Sie können mit ADO.NET Frontend-Datenbankanwendungen
genauso wie mehrschichtige Geschäftsanwendungen erstellen.
Weitere Informationen finden Sie unter .NET Framework Developer's Guide
ADO.NET in der Microsoft-Dokumentation.
Im Folgenden finden Sie die Hauptklassen der AdoDbx
Client-ADO.NET-Implementierung.
• TAdoDbxCommand. Repräsentiert eine SQL-Anweisung
oder... more ( see page 6)
VCL für .NET-Datenbanktechnologien (
see page 7)
In den meisten Fällen stellt der AdoDbxClient-Provider die ideale Lösung dar, um
in einer .NET-Anwendung die Verbindung zur Datenbank zu implementieren. Zur
Erstellung neuer VCL-Formulare-Anwendungen für das .NET Framework oder
zum Migrieren vorhandener Win32-VCL-Formulare-Anwendungen in das .NET
Framework unterstützt RAD Studio aber weiterhin die Datenbanktechnologien
von Delphi.
RAD Studio ermöglicht die Migration von Delphi-Datenbanktechnologien für
Win32-Clients auf das .NET Framework. Sie können also nicht nur neue
Datenbankanwendungen mit ADO.NET erstellen, sondern auch vorhandene
migrieren. RAD Studio unterstützt die folgenden Datenbanktechnologien von
Delphi:
• dbExpress.NET
• DataSnap .NET Client (DCOM)
• IBX.NET (InterBase für .NET)
• ADO.NET
• dbGo
3
1
RAD Studio für .NET
AdoDbx.NET-Datentypen (
see page 12)
1.1 Datenbankanwendungen mit ADO.NET
AdoDbx Client-Datentypen entsprechen logischen .NET-Typen. Je nach
Datenbanktyp bilden die AdoDbx Client-Datentypen die nativen Datentypen ab.
Sofern verfügbar, sorgt AdoDbx Client für:
• Eine konsistente Datentypzuordnung zwischen den
Datenbanken.
• Eine Zuordnung logischer Datentypen zu nativen
.NET-Typen.
Überblick zu ADO.NET (
see page 15)
1
BDP-Migration: Überblick (
see page 18)
ADO.NET ist die .NET-Programmierumgebung für das Erstellen von
Datenbankanwendungen, die auf nativen Datenbankformaten oder auf XML
basieren. ADO.NET dient als Backend-Datenspeicher für alle Microsoft
.NET-Programmiermodelle, einschließlich Web Forms und Web Services. Sie
verwenden ADO.NET, um die Daten im .NET Framework zu verwalten.
Anmerkung: BDP.NET basiert auf ADO.NET 1.1. AdoDbx Client basiert auf
.NET 2.0.
Mit den Borland-Datenprovidern für .NET (BDP.NET) und AdoDbx Client lässt
sich die ADO.NET-Entwicklung beschleunigen. Wenn Ihnen die Konzepte des
Rapid Application Development (RAD) und der objektorientierten
Programmierung (OOP) mit Eigenschaften, Methoden und Ereignissen bereits
bekannt sind, werden Sie keine größeren Probleme mit dem ADO.NET-Modell
zum Erstellen... more ( see page 15)
BDP (Borland Daten-Provider) ist veraltet und Sie sollten BDP nicht für neue
Entwicklungen verwenden. Verwenden Sie stattdessen AdoDbx Client. Dieses
Thema beschreibt die Unterschiede und Äquivalenzen zwischen BDP und
AdoDbx Client.
Auswirkungen der Abschaffung von BDP:
• BDP wird in einem künftigen Release aus dem Produkt
entfernt.
• Es wird keine Weiterentwicklung von BDP und nur ein
minimaler QS-Aufwand vorgenommen werden. Es werden
nur kritische Fehler behoben werden.
• Es wird keine weitere Dokumentation bereitgestellt,
obwohl die Dokumentation noch nicht entfernt wird.
BDP basierte auf ADO.NET 1.1. Viele der abweichenden
Features von BDP, wie z.B. die Provider-Unabhängigkeit
und erweiterte Metadaten, wurden zu ADO.NET... more
( see page 18)
4
1.1 Datenbankanwendungen mit ADO.NET
Blackfish SQL - Überblick (
RAD Studio für .NET
see page 21)
Design und Implementierung von Blackfish SQL sind auf Leistung, Skalierbarkeit,
einfache Verwendung und strenge Kompatibilität mit Industriestandards
ausgerichtet. Blackfish SQL hat folgende Eigenschaften:
• Kompatibilität mit Industriestandards
• Unterstützung von SQL-92
• Unicode-Speicherung von Zeichendaten
• Unicode-basierende Sortierfolge für Sortierung und
Indizierung
• dbExpress 4-Treiber für Win32-Delphi und -C++
• ADO.NET 2.0-Provider für .NET
• JDBC für Java
1
• JavaBean-Datenzugriffskomponenten für Java
• Verteilte XA/JTATransaktionen für Java
• Hohe Leistung und Skalierbarkeit für Anwendungen mit
anspruchsvoller Transaktionsverarbeitung (OLTP) und
Entscheidungsunterstützung (DSS)
• Stored Procedures und Trigger für Delphi, C# und
VB.NET unter Windows
• Stored Procedures und Trigger für Java
• Keine Administration erforderlich; Deployment in Form
einer einzigen Assembly oder Jar-Datei
• Inkrementelles... more (
ADO.NET-Komponentendesigner (
see page 23)
Deployment von Datenbankanwendungen für das .NET Framework (
27)
Datenprovider für Microsoft .NET (
see page 28)
see page 21)
Fast alle verteilten Anwendungen müssen in der Lage sein, Informationen in
Datenbanken zu lesen und zu aktualisieren. Je nachdem, welche Anwendung
Sie mit ADO.NET entwickeln, werden verschiedene Anforderungen an die Arbeit
mit den Daten gestellt. Es kann zum Beispiel sein, dass Sie eine einfache
Anwendung entwickeln möchten, die lediglich Daten in einem Formular anzeigt.
Oder Sie möchten eine Anwendung entwickeln, die es ermöglicht, Daten mit
einem anderen Unternehmen auszutauschen. In jedem Fall ist es unumgänglich,
die grundlegenden Konzepte zur Arbeit mit Daten in ADO.NET zu kennen.
Mit diesen Designern können Sie unter Verwendung serverspezifischer
Schemaobjekte von Datenbanken, wie Tabellen, Ansichten... more ( see page
23)
see page
Wenn Sie Datenbankanwendungen mit RAD Studio weitergeben, kopieren Sie
die Assemblierungen und Treiber-DLLs, die zur Laufzeit erforderlich sind, in ein
Verzeichnis für das Deployment. Im Folgenden werden die Namen dieser
Assemblierungen und DLLs aufgeführt und der jeweilige Speicherort angegeben.
Zusätzlich zur Unterstützung der .NET Framework-Provider sind in RAD Studio
AdoDbxClient-Provider für Microsoft .NET enthalten. AdoDbx Client ist eine
Implementierung des .NET-Providers und stellt Verbindungen zu verschiedenen
bekannten Datenbanken her.
In diesem Thema wird Folgendes behandelt:
• Datenprovider-Architektur
• Vorteile von AdoDbx Client
• AdoDbx Client und ADO.NET-Komponenten
• Unterstützte AdoDbx Client-Provider
• AdoDbx Client-Datentypen
• AdoDbx Client-Interfaces
5
Überblick über AdoDbx Client
Überblick zu Stored Procedures (
dbExpress-Framework (
RAD Studio für .NET
see page 31)
see page 32)
Einführung in InterBase Express (
Alle relationalen Datenbanken verfügen über bestimmte gemeinsame
Funktionsmerkmale, die es den Anwendungen ermöglichen, Daten zu speichern
und zu bearbeiten. Stored Procedures sind eigenständige Programme, die
jeweils in einer datenbanksystemspezifischen Sprache geschrieben wurden. In
der Regel dienen sie zur Bearbeitung häufig auftretender datenbankbezogener
Aufgaben und sind besonders bei der Verarbeitung von großen
Datensatzmengen oder bei Verwendung von Zusammenfassungs- oder
mathematischen Funktionen hilfreich. Stored Procedures werden normalerweise
auf dem Datenbankserver gespeichert.
Stored Procedures werden ähnlich aufgerufen wie SQL-Anweisungen. Das
Bearbeiten und Erstellen von Stored Procedures in RAD Studio erfolgt daher mit
den Verfahren, die auch für SQL-Anweisungstext verwendet werden.
Mit Hilfe von... more ( see page 31)
Das dbExpress-Framework (DBX-Framework) ist eine Menge abstrakter
Klassen, die in der Unit DBXCommon bereitgestellt sind.. Anwendungen können
mit dem Framework über verschiedene Wege in Verbindung treten: Sie können
das Framework direkt oder die dbExpress VCL-Komponenten, die sich in der
oberen Schicht des Framework befinden, für native und verwaltete
Anwendungen einsetzen.
Obwohl viele Anwendungen mit dbExpress-Treibern über die dbExpress
VCL-Komponenten in Verbindung treten, bietet das DBX-Framework eine
bequeme, einfachere Option für die Kommunikation mit einem Datenbanktreiber.
Sie können auch für dbExpress einen Datenbanktreiber erstellen, indem Sie die
abstrakten DBXCommon-Basisklassen des Framework erweitern. Das
DBX-Framework stellt die gebräuchlichste Datenbanktreiberfunktionalität für eine
"mengenorientierte"... more ( see page 32)
1
dbExpress Framework-Kompatibilität (
1.1 Datenbankanwendungen mit ADO.NET
see page 34)
see page 35)
Teile der dbExpress-Software, die vor dem Erscheinen des
dbExpress-Treiber-Framework (DBX-Treiber-Framework) entwickelt wurden,
mussten für die Zusammenarbeit mit dem DBX-Treiber-Framework verändert
werden. Dies hat zu einigen Kompatibilitätsproblemen geführt.
InterBase Express (IBX) besteht aus Komponenten, mit denen auf die Daten von
InterBase-Datenbanken zugegriffen werden kann. Die
InterBase-Verwaltungskomponenten, für die InterBase 6 erforderlich ist, werden
nach den InterBase-Datenzugriffskomponenten beschrieben.
1.1.1 Überblick über AdoDbx Client
AdoDbx Client implementiert einen ADO.NET 2.0-Provider für alle Treiber von dbExpress Version 4. Dieser Provider unterstützt
die neueren erweiterten Metadaten von dbExpress 4. Alle mit Delphi ausgelieferten dbExpress-Treiber implementieren die
neueren erweiterten Meatdaten.
AdoDbx Client ist eine Implementierung der ADO.NET 2.0-Provider-Klassen. ADO.NET Provider ist eine Gruppe von Klassen,
die Datenbankdienste für .NET bereitstellen. Sie ermöglichen den Zugriff auf relationale Datenbanken, XML und
Anwendungsdaten. Sie können mit ADO.NET Frontend-Datenbankanwendungen genauso wie mehrschichtige
Geschäftsanwendungen erstellen.
Weitere Informationen finden Sie unter .NET Framework Developer's Guide ADO.NET in der Microsoft-Dokumentation.
Im Folgenden finden Sie die Hauptklassen der AdoDbx Client-ADO.NET-Implementierung.
• TAdoDbxCommand. Repräsentiert eine SQL-Anweisung oder Stored Procedure, die mit einer Datenquelle ausgeführt wird.
• TAdoDbxCommandBuilder. Erzeugt Einzeltabellenbefehle als Teil der Funktionsweise des TAdoDbxDataAdapter.
• TAdoDbxConnection. Repräsentiert ein Verbindung mit einer Datenbank.
• TAdoDbxDataAdapter. Fungiert als eine Brücke zwischen einer Datenmenge und der zugrunde liegenden Datenbank.
• TAdoDbxDataReader. Klasse nur zum Vorwärts-Lesen von Zeilen in einer Datenquelle.
• TAdoDbxParameter. Repräsentiert einen Parameter, der von einem Befehl übernommen oder an einen Befehl übergeben
wird.
• TAdoDbxParameterCollection. Stellt TAdoDbxParameter in einem .NET-Kollektionsobjekt zusammen, das gelesen und
bearbeitet werden kann.
6
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
VCL für .NET-Datenbanktechnologien
• TAdoDbxProviderFactory. Basisklasse für eine Implementierung von Datenquellenklassen eines Providers.
• TAdoDbxTransaction. Ein Gruppe von Befehlen für eine Verbindung, die übergeben oder zurückgesetzt werden kann.
Siehe auch
Überblick zu ADO.NET (
see page 15)
.NET Framework Developer's Guide ADO.NET (MSDN)
Verbinden mit AdoDbx Client (
see page 119)
Deployment von AdoDbx Client
TAdoDbxCommand
TAdoDbxCommandBuilder
1
TAdoDbxConnection
TAdoDbxDataAdapter
TAdoDbxDataReader
TAdoDbxParameter
TAdoDbxParameterCollection
TAdoDbxProviderFactory
TAdoDbxTransaction
1.1.2 VCL für .NET-Datenbanktechnologien
In den meisten Fällen stellt der AdoDbxClient-Provider die ideale Lösung dar, um in einer .NET-Anwendung die Verbindung zur
Datenbank zu implementieren. Zur Erstellung neuer VCL-Formulare-Anwendungen für das .NET Framework oder zum Migrieren
vorhandener Win32-VCL-Formulare-Anwendungen in das .NET Framework unterstützt RAD Studio aber weiterhin die
Datenbanktechnologien von Delphi.
RAD Studio ermöglicht die Migration von Delphi-Datenbanktechnologien für Win32-Clients auf das .NET Framework. Sie können
also nicht nur neue Datenbankanwendungen mit ADO.NET erstellen, sondern auch vorhandene migrieren. RAD Studio
unterstützt die folgenden Datenbanktechnologien von Delphi:
• dbExpress.NET
• DataSnap .NET Client (DCOM)
• IBX.NET (InterBase für .NET)
• ADO.NET
• dbGo
.NET-Anwendungen mit dbExpress.NET erstellen
RAD Studio unterstützt eine .NET-Version von dbExpress. Diese Gruppe von Komponenten bietet in etwa die Funktionalität von
dbExpress für Win32, wurde aber für die Ausführung in VCL-Formulare im .NET Framework aktualisiert. Wie die früheren
Versionen des Produkts unterstützt auch dbExpress für .NET unidirektionale Datenmengen und die Erstellung kompakter
Client-Anwendungen.
.NET-Anwendungen mit dem DataSnap .NET-Client (DCOM) erstellen
In dreischichtigen Anwendungen unterstützt RAD Studio den Datenbankzugriff über den DataSnap-Client (DCOM).
7
VCL für .NET-Datenbanktechnologien
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
.NET-Anwendungen mit IBX.NET erstellen
RAD Studio ermöglicht den Zugriff auf InterBase-Datenbanken über InterBase Express-Steuerelemente. Außerdem kann über
den BDP.NET-Standarddatenadapter und die ADO.NET-Provider des .NET Framework auf diesen Datenbanktyp zugegriffen
werden. Mit Hilfe von IBX.NET-Steuerelementen können Sie eine Verbindung zu einer InterBase-Datenbank aufbauen und auf
Tabellen zugreifen usw.
NET-Anwendungen mit dem AdoDbxClient-Provider erstellen
AdoDbx ist Datenzugriffsmechanismus, der von mehreren Anwendungen gemeinsam genutzt werden kann. AdoDbx definiert
eine leistungsfähige Bibliothek von API-Aufrufen, mit denen Daten erstellt, neu strukturiert, von lokalen und externen
Datenbankservern abgerufen, aktualisiert und auf andere Weise bearbeitet werden können. Ado stellt eine einheitliche
Schnittstelle für den Zugriff auf eine Vielzahl von Datenbankservern zur Verfügung.
1
In RAD Studio-Datenbankanwendungen kann auf BDE-basierte Datenbanken wie Paradox und dBase zugegriffen werden.
.NET-Anwendungen mit dbGo erstellen
RAD Studio unterstützt eine .NET-Version von dbGo. Diese Gruppe von Komponenten bietet in etwa die Funktionalität von dbGo
für Win32, wurde aber für die Ausführung in VCL-Formulare im .NET Framework aktualisiert. dbGo für .NET unterstützt dasselbe
leistungsstarke und logische Objektmodell wie die früheren Versionen des Produkts.
Themen
Name
Überblick zum BDP-Verbindungs-Pooling (
Beschreibung
see page 9)
Verbindungen können aus einem Verbindungs-Pool ausgewählt werden. Dies
führt zu kürzeren Verbindungszeiten. Bei Verwendung von BDP werden alle
Verbindungen vom BDP-Pool-Manager verwaltet. Dies ist auch dann der Fall,
wenn Sie das Pooling für Ihre Verbindung nicht aktiviert haben. Sie können für
jede Verbindung das Pooling aktivieren oder deaktivieren, die minimale und
maximale Pool-Größe festlegen, die Vergrößerung des Pools bei
Verbindungsanforderungen aktivieren und deaktivieren und einen
Zeitüberschreitungswert bzw. eine Lebensdauer in Sekunden vorgeben.
Wie die obige Abbildung zeigt, erstellt der BDP-Pool-Manager für jeden
eindeutigen Verbindungsstring einen eigenen Pool. Die folgenden
Verbindungsoptionen stehen zur Verfügung:
8
1.1 Datenbankanwendungen mit ADO.NET
Überblick zu dbExpress-Komponenten (
Überblick zu dbGo-Komponenten (
see page 10)
see page 11)
RAD Studio für .NET
VCL für .NET-Datenbanktechnologien
dbExpress setzt sich aus mehreren "schlanken" Datenbanktreibern zusammen,
die schnellen Zugriff auf SQL-Datenbankserver bieten. dbExpress stellt für jede
unterstützte Datenbank einen Treiber zur Verfügung, der die serverspezifische
Software an eine Menge einheitlicher dbExpress-Interfaces anpasst. Wenn Sie
eine Datenbankanwendung weitergeben, die dbExpress verwendet, müssen Sie
evtl. eine DLL (den serverspezifischen Treiber) in die von Ihnen erstellten
Anwendungsdateien aufnehmen. Zum Beispiel ist DbxClient ein 100%iger
Delphi-Treiber und benötigt keine DLL.
dbExpress ermöglicht Ihnen den schnellen Zugriff auf Datenbanken unter
Verwendung unidirektionaler Datenmengen. Unidirektionale Datenmengen sind
auf schnellen, unaufwendigen Zugriff auf Datenbankinformation ausgelegt, wobei
nur ein minimaler Zusatzaufwand entsteht. Wie andere Datenmengen... more (
see page 10)
dbGo ist ein leistungsstarkes und logisches Objektmodell, mit dem Daten aus
einer Vielzahl von Datenquellen über Microsoft ADO-Schnittstellen abgerufen,
bearbeitet und aktualisiert werden können. Meist wird dbGo eingesetzt, um
Abfragen für Tabellen einer relationalen Datenbank zu stellen, die Ergebnisse
abzurufen und in einer Anwendung anzuzeigen und Benutzern die Möglichkeit zu
geben, Änderungen an den Daten vorzunehmen und zu speichern.
Die ADO-Schicht einer ADO-Anwendung basiert auf der neuesten Version von
Microsoft ADO, einem OLE DB-Provider bzw. ODBC-Treiber für den Zugriff auf
einen Datenspeicher, spezifischer Client-Software für das verwendete
Datenbanksystem (bei SQL-Datenbanken), einem Back-End-System für
Datenbanken, auf das die Anwendung zugreifen kann... more ( see page 11)
1.1.2.1 Überblick zum BDP-Verbindungs-Pooling
Verbindungen können aus einem Verbindungs-Pool ausgewählt werden. Dies führt zu kürzeren Verbindungszeiten. Bei
Verwendung von BDP werden alle Verbindungen vom BDP-Pool-Manager verwaltet. Dies ist auch dann der Fall, wenn Sie das
Pooling für Ihre Verbindung nicht aktiviert haben. Sie können für jede Verbindung das Pooling aktivieren oder deaktivieren, die
minimale und maximale Pool-Größe festlegen, die Vergrößerung des Pools bei Verbindungsanforderungen aktivieren und
deaktivieren und einen Zeitüberschreitungswert bzw. eine Lebensdauer in Sekunden vorgeben.
Wie die obige Abbildung zeigt, erstellt der BDP-Pool-Manager für jeden eindeutigen Verbindungsstring einen eigenen Pool. Die
folgenden Verbindungsoptionen stehen zur Verfügung:
Option
Beschreibung
MinPoolSize
Die Mindestanzahl der Verbindungen, die im Verbindungs-Pool verwaltet werden.
MaxPoolSize
Die maximale Anzahl der Verbindungen, die im Verbindungs-Pool verwaltet werden können. Die
Vorgabewert ist 100. Wenn GrowOnDemand auf False gesetzt und MaxPoolSize erreicht ist, führt jede
weitere Verbindungsanforderung zu einer Exception.
9
1
VCL für .NET-Datenbanktechnologien
GrowOnDemand
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
Legt fest, ob der Pool vergrößert wird, wenn MaxPoolSize erreicht ist und eine weitere
Verbindungsanforderung eingeht.
Verbindungen, für die GrowOnDemand auf True gesetzt ist, werden dem Pool nicht wieder zugeführt,
sondern von BdpConnection.Close() freigegeben.
ConnectionLifetime Die Lebensdauer einer Verbindung, für die das Pooling aktiviert ist. Wenn eine Verbindung wieder dem
Pool zugeführt wird, erfolgt eine Überprüfung der Lebensdauer. Ist diese abgelaufen, wird die
(Timeout)
Verbindung nicht wieder in den Pool aufgenommen, sondern freigegeben. ConnectionLifetime wird in
Sekunden angegeben. Voreingestellt ist der Wert 0.
1
1.1.2.2 Überblick zu dbExpress-Komponenten
dbExpress setzt sich aus mehreren "schlanken" Datenbanktreibern zusammen, die schnellen Zugriff auf SQL-Datenbankserver
bieten. dbExpress stellt für jede unterstützte Datenbank einen Treiber zur Verfügung, der die serverspezifische Software an eine
Menge einheitlicher dbExpress-Interfaces anpasst. Wenn Sie eine Datenbankanwendung weitergeben, die dbExpress
verwendet, müssen Sie evtl. eine DLL (den serverspezifischen Treiber) in die von Ihnen erstellten Anwendungsdateien
aufnehmen. Zum Beispiel ist DbxClient ein 100%iger Delphi-Treiber und benötigt keine DLL.
dbExpress ermöglicht Ihnen den schnellen Zugriff auf Datenbanken unter Verwendung unidirektionaler Datenmengen.
Unidirektionale Datenmengen sind auf schnellen, unaufwendigen Zugriff auf Datenbankinformation ausgelegt, wobei nur ein
minimaler Zusatzaufwand entsteht. Wie andere Datenmengen können sie einen SQL-Befehl an den Datenbankserver senden
und, falls der Befehl mehrere Datensätze zurückgibt, einen Reader für den Zugriff auf diese Datensätze entgegennehmen.
Unidirektionale Datenmengen können nur einen unidirektionalen Reader entgegennehmen. Sie nehmen keine
Zwischenspeicherung der Daten vor, wodurch sie schneller und weniger ressourcenaufwendig als andere Datenmengentypen
werden. Weil sie jedoch die Datensätze nicht zwischenspeichern, sind unidirektionale Datenmengen weniger flexibel als andere
Datenmengen.
dbExpress-Verbindungen, -Tabellen, -Ansichten und -Stored Procedures, die in einer Datenstrukturansicht angezeigt werden,
lassen sich per Drag&Drop in native und verwaltete VCL-Formulare platzieren.
Verbindungsstrings
In dbExpress 4 werden alle Verbindungseigenschaften, auch ConnectionString, beim Verbinden an den Treiber übergeben.
Mit Hilfe der Eigenschaft ConnectionString können in dbExpress alle Datenbankoptionen und Verbindungsinformationen
(Datenbankname, Benutzername, Passwort) in einem einzelnen Verbindungsstring übergeben werden. Verbindungsstrings
ermöglichen es außerdem, neue Eigenschaften für Treiber durch die Änderung eines Interface zu implementieren.
Sie können die Eigenschaften für die aktuelle Verbindung in der Datei dbxconnections.ini laden, indem Sie mit der rechten
Maustaste auf die Verbindung klicken und den entsprechenden Menübefehl wählen. Dadurch wird ein Parametereintrag
generiert (Parameters['ConnectionString']), der alle Verbindungseigenschaften in der INI-Datei enthält. Sie können auf diese
Weise der Datei dbxconnections.ini neue Eigenschaften hinzufügen, ohne den gesamten String manuell einzugeben.
Das Kontextmenü für SqlConnection enthält einen Befehl zum Löschen des Verbindungsstrings. Der Befehl steht zur Verfügung,
wenn die Eigenschaft ConnectionString zugewiesen ist.
dbExpress-Komponenten
Der dbExpress-Abschnitt der Tool-Palette
Datenbankinformationen zugreifen:
Komponente
enthält
die
folgenden
Komponenten,
die
mittels
Funktion
TSQLConnection Diese Komponente kapselt eine dbExpress-Verbindung zu einem Datenbankserver.
10
dbExpress
auf
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
VCL für .NET-Datenbanktechnologien
TSQLDataSet
Diese Komponente wird verwendet, um alle über dbExpress verfügbaren Daten darzustellen oder um
Befehle an eine Datenbank zu senden, auf die über dbExpress zugegriffen wird.
TSQLQuery
Hierbei handelt es sich um eine Abfrage-Datenmenge, die eine SQL-Anweisung kapselt und es
Anwendungen ermöglicht, auf die Ergebnis-Datenmenge zuzugreifen.
TSQLTable
Dies ist eine Tabellen-Datenmenge, die alle Zeilen und Spalten einer einzelnen Datenbanktabelle darstellt.
TSQLStoredProc Diese Komponente ist eine auf Stored Procedures basierende Datenmenge, die eine auf einem
Datenbankserver definierte Stored Procedure ausführt.
TSQLMonitor
Diese Komponente fängt die zwischen einer SQL-Verbindungskomponente und einem Datenbankserver
gesendeten Informationen ab und speichert diese in einer Stringliste.
TSimpleDataSet
Hierbei handelt es sich um eine Client-Datenmenge, die interne Objekte des Typs TSQLDataSet und
TDataSetProvider verwendet, um Daten abzurufen und Aktualisierungen einzutragen.
Siehe auch
Überblick zu VCL für .NET (
see page 77)
VCL-Anwendungen portieren (
see page 75)
Deployment von Datenbankanwendungen für das .NET Framework
dbExpress.NET-Datenbankanwendungen mit VCL-Formularen erstellen (
see page 167)
1.1.2.3 Überblick zu dbGo-Komponenten
dbGo ist ein leistungsstarkes und logisches Objektmodell, mit dem Daten aus einer Vielzahl von Datenquellen über Microsoft
ADO-Schnittstellen abgerufen, bearbeitet und aktualisiert werden können. Meist wird dbGo eingesetzt, um Abfragen für Tabellen
einer relationalen Datenbank zu stellen, die Ergebnisse abzurufen und in einer Anwendung anzuzeigen und Benutzern die
Möglichkeit zu geben, Änderungen an den Daten vorzunehmen und zu speichern.
Die ADO-Schicht einer ADO-Anwendung basiert auf der neuesten Version von Microsoft ADO, einem OLE DB-Provider bzw.
ODBC-Treiber für den Zugriff auf einen Datenspeicher, spezifischer Client-Software für das verwendete Datenbanksystem (bei
SQL-Datenbanken), einem Back-End-System für Datenbanken, auf das die Anwendung zugreifen kann (bei SQL-Datenbanken),
sowie einer Datenbank. Diese Elemente müssen für die ADO-Anwendung ohne Einschränkung verfügbar sein, damit diese voll
funktionsfähig ist. Microsoft Data Access Components (MDAC) 2.1 und höher enthält diese erforderlichen Elemente. RAD Studio
unterstützt MDAC 2.8.
Der dbGo-Abschnitt der Tool-Palette enthält die folgenden Komponenten, die über dbGo auf Datenbankinformationen
zugreifen:
Komponente
Funktion
TADOConnection Diese Komponente kapselt eine dbGo-Verbindung zu einem Datenbankserver.
TADODataSet
Diese Komponente wird verwendet, um alle über dbGo verfügbaren Daten darzustellen oder um Befehle
an eine Datenbank zu senden, auf die über dbGo zugegriffen wird.
TADOQuery
Hierbei handelt es sich um eine Abfrage-Datenmenge, die eine SQL-Anweisung kapselt und es
Anwendungen ermöglicht, auf die resultierenden Datensätze (sofern vorhanden) in einem
ADO-Datenspeicher zuzugreifen.
TADOTable
Dies ist eine Tabellen-Datenmenge, die alle Zeilen und Spalten einer einzelnen Datenbanktabelle darstellt.
TADOStoredProc Diese Komponente ist eine auf Stored Procedures basierende Datenmenge, die eine auf einem
Datenbankserver definierte Stored Procedure ausführt.
TADOCommand
Diese Komponente repräsentiert ein ADO-Befehlsobjekt, mit dem Anweisungen für einen Datenspeicher
ausgeführt werden können, auf den über einen ADO-Provider zugegriffen wird.
11
1
AdoDbx.NET-Datentypen
TADODataSet
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
Diese Komponente repräsentiert eine Datenmenge, die von einem ADO-Datenspeicher abgerufen wurde.
TRDSConnection Diese Komponente stellt die Funktionalität des RDS DataSpace-Objekts bereit.
Siehe auch
Überblick zu VCL für .NET (
see page 77)
VCL-Anwendungen portieren (
see page 75)
Deployment von Datenbankanwendungen für das .NET Framework
ADO.NET-Datenbankanwendungen mit VCL-Formularen erstellen (
see page 161)
1
1.1.3 AdoDbx.NET-Datentypen
AdoDbx Client-Datentypen entsprechen logischen .NET-Typen. Je nach Datenbanktyp bilden die AdoDbx Client-Datentypen die
nativen Datentypen ab. Sofern verfügbar, sorgt AdoDbx Client für:
• Eine konsistente Datentypzuordnung zwischen den Datenbanken.
• Eine Zuordnung logischer Datentypen zu nativen .NET-Typen.
AdoDbx und das .NET Framework
Die Klasse DataSet in ADO.NET verwendet die Datentypen des .NET Framework. Die AdoDbx Client-Datentypen ordnen die
.NET-Datentypen für unterstützte Datenbanken logisch zu. Sie können zur Entwurfszeit mit den logischen AdoDbx Client-Typen
arbeiten, die dann den entsprechenden nativen Typen zugeordnet werden.
Datentypen
Das .NET Framework enthält ein breites Spektrum logischer Datentypen. AdoDbx Client erbt logische Datentypen und sorgt
intern für eine den unterstützten Datenbanken entsprechende Zuordnung der Datentypen. AdoDbx Client unterstützt die
Zuordnung logischer Datentypen für DB2, InterBase, MS SQL, MSDE und Oracle.
DB2
AdoDbx Client unterstützt folgende DB2-Typzuordnungen.
12
DB2-Typ
Bdp-Typ
Bdp-Untertyp
System-Typ
CHAR
String
stFixed
String
VARCHAR
String
NV
String
SMALLINT
Int16
NV
Int16
BIGINT
Int64
NV
Int64
INTEGER
Int32
NV
Int32
DOUBLE
Double
NV
Double
FLOAT
Float
NV
Single
REAL
Float
NV
Single
DATE
Date
NV
DateTime
TIME
Time
NV
DateTime
TIMESTAMP
Datetime
NV
DateTime
NUMERIC
Decimal
NV
Decimal
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
AdoDbx.NET-Datentypen
DECIMAL
Decimal
NV
Decimal
BLOB
Blob
stBinary
Byte[]
CLOB
Blob
stMemo
Char[]
InterBase
AdoDbx Client unterstützt folgende InterBase-Typzuordnungen.
InterBase-Typ
Bdp-Typ
Bdp-Untertyp
System-Typ
CHAR
String
stFixed
String
VARCHAR
String
NV
String
SMALLINT
Int16
NV
Int16
INTEGER
Int32
NV
Int32
FLOAT
Float
NV
Single
DOUBLE
Double
NV
Double
BLOB Sub_Type 0
Blob
stBinary
Byte[]
BLOB Sub_Type 1
Blob
stMemo
Char[]
TIMESTAMP
Datetime
NV
DateTime
1
MS SQL und MSDE
AdoDbx Client unterstützt folgende Typzuordnungen für MS SQL und MSDE.
MSSQL-Typ
Bdp-Typ
Bdp-Untertyp
System-Typ
BIGINT
Int64
NV
Int64
INT
Int32
NV
Int32
SMALLINT
Int16
NV
Int16
TINYINT
Int16
NV
Int16
BIT
Boolean
NV
Boolean
DECIMAL
Decimal
NV
Decimal
NUMERIC
Decimal
NV
Decimal
MONEY
Decimal
NV
Decimal
SMALLMONEY
Decimal
NV
Decimal
FLOAT
Double
NV
Double
REAL
Float
NV
Single
DATETIME
DateTime
NV
DateTime
SMALLDATETIME
DateTime
NV
DateTime
CHAR
String
stFixed
String
VARCHAR
String
NV
String
TEXT
Blob
stMemo
Char[]
BINARY
VarBytes
NV
Byte[]
VARBINARY
VarBytes
NV
Byte[]
IMAGE
Blob
stBinary
Byte[]
13
AdoDbx.NET-Datentypen
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
TIMESTAMP
VarBytes
NV
Byte[]
UNIQUEIDENTIFIER
Guid
NV
Guid
Oracle
AdoDbx Client unterstützt die folgenden Oracle-Typzuordnungen.
1
Oracle-Typ
Bdp-Typ
Bdp-Untertyp
System-Typ
CHAR
String
stFixed
String
NCHAR
String
stFixed
String
VARCHAR
String
NV
String
NVARCHAR
String
NV
String
VARCHAR2
String
NV
String
NVARCHAR2
String
NV
String
NUMBER
Decimal
NV
Decimal
DATE
Date
NV
DateTime
BLOB
Blob
stHBinary
Byte[]
CLOB
Blob
stHMemo
Char[]
LONG
Blob
stMemo
Char[]
LONG RAW
Blob
stBinary
Byte[]
BFILE
Blob
stBFile
Char[]
ROWID
String
NV
String
Sybase
AdoDbx Client unterstützt folgende Sybase-Typzuordnungen.
14
Sybase-Typ
Bdp-Typ
Bdp-Untertyp
System-Typ
CHAR
String
stFixed
String
VARCHAR
String
NV
String
INT
Int32
NV
Int32
SMALLINT
Int16
NV
Int16
TINYINT
Int16
NV
Int16
DOUBLE PRECISION
Float
NV
Single
FLOAT
Float
NV
Single
REAL
Float
NV
Single
NUMERIC
Decimal
NV
Decimal
DECIMAL
Decimal
NV
Decimal
SMALLMONEY
Decimal
NV
Decimal
MONEY
Decimal
NV
Decimal
SMALLDATETIME
DateTime
NV
DateTime
DATETIME
DateTime
NV
DateTime
IMAGE
Blob
stBinary
Byte[]
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Überblick zu ADO.NET
TEXT
Blob
stMemo
Char[]
BIT
Boolean
NV
Boolean
TIMESTAMP
VarBytes
NV
Byte[]
BINARY
Bytes
NV
Byte[]
VARBINARY
VarBytes
NV
Byte[]
SYSNAME
String
NV
String
Siehe auch
Überblick zu ADO.NET (
see page 15)
1
1.1.4 Überblick zu ADO.NET
ADO.NET ist die .NET-Programmierumgebung für das Erstellen von Datenbankanwendungen, die auf nativen
Datenbankformaten oder auf XML basieren. ADO.NET dient als Backend-Datenspeicher für alle Microsoft
.NET-Programmiermodelle, einschließlich Web Forms und Web Services. Sie verwenden ADO.NET, um die Daten im .NET
Framework zu verwalten.
Anmerkung: BDP.NET basiert auf ADO.NET 1.1. AdoDbx Client basiert auf .NET 2.0.
Mit den Borland-Datenprovidern für .NET (BDP.NET) und AdoDbx Client lässt sich die ADO.NET-Entwicklung beschleunigen.
Wenn Ihnen die Konzepte des Rapid Application Development (RAD) und der objektorientierten Programmierung (OOP) mit
Eigenschaften, Methoden und Ereignissen bereits bekannt sind, werden Sie keine größeren Probleme mit dem ADO.NET-Modell
zum Erstellen von Anwendungen haben. Für traditionelle Datenbankentwickler stehen auch in ADO.NET die bekannten
Konzepte von Tabellen, Zeilen und Spalten mit relationaler Navigation bereit. XML-Programmierer werden es vermutlich
vorziehen, mit denselben Daten mittels Knoten, über-, gleich- und untergeordneten Elementen umzugehen.
Dieses Thema beschreibt die wichtigsten Komponenten der ADO.NET-Architektur, die Integration von ADO.NET in andere
Programmiermodelle des .NET Framework sowie die Leistungsmerkmale, die RAD Studio für die Unterstützung von ADO.NET
bereitstellt.
Folgende Bereiche werden behandelt:
• Die Architektur von ADO.NET
• ADO.NET-Benutzeroberflächen
• BDP.NET-Namespace
Die Architektur von ADO.NET
Die beiden wichtigsten Komponenten der ADO.NET-Architektur sind der Datenprovider und die Datenmenge. Die Datenquelle
15
Überblick zu ADO.NET
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
repräsentiert die eigentliche Datenbank oder XML-Datei, der Datenprovider stellt die Verbindungen her und übergibt die Befehle
und die Datenmenge (Objekt DataSet) stellt eine oder mehrere Datenquellen im Arbeitsspeicher dar. Weitere Informationen über
das allgemeine Modell ADO.NET finden Sie in der Dokumentation des Microsoft .NET Framework SDK.
Die Datenquelle
Bei der Datenquelle muss es sich entweder um eine lokal oder extern vorliegende Datenbank oder um eine XML-Datei handeln.
In der traditionellen Datenbankprogrammierung arbeitet der Entwickler üblicherweise direkt mit der Datenquelle und muss dabei
mit den komplexen und oft unterschiedlichen Oberflächen einzelner Hersteller umgehen. Mit ADO.NET arbeitet der
Datenbankentwickler immer mit demselben Satz von Komponenten, mit dessen Hilfe er auf die Datenquelle zugreift und Befehle
an sie übergibt.
1
Die Datenprovider
Die Datenprovider-Komponenten stellen eine Verbindung zur Datenbank oder den XML-Dateien her und halten dabei einzelne
Implementierungsdetails im Hintergrund. Die Provider können Verbindungen zu einer oder mehreren Datenquellen herstellen,
Befehle weitergeben und Daten in der Datenmenge bereitstellen.
Das .NET Framework enthält Provider für MS SQL, OLE DB und Oracle. Neben den .NET-Providern stehen in diesem Produkt
AdoDbx Client and BDP.NET zur Verfügung. Diese bieten die Möglichkeit, unter Verwendung einer konsistenten
Programmierumgebung Verbindungen zu verschiedenen Standarddatenbanken herzustellen. Weitere Informationen finden Sie
im Thema zu Borland-Datenprovidern für Microsoft .NET.
Die Datenmenge
Das Objekt DataSet bewahrt eine bestimmte Datenmenge, zum Beispiel Tabellen und Beziehungen aus einer oder mehreren
Datenquellen, im Arbeitsspeicher. Das DataSet-Objekt ist also eine Art temporärer Arbeitsbereich oder virtueller Notizblock für
die Bearbeitung von Daten. ADO.NET-Anwendungen manipulieren Datentabellen zunächst im Arbeitsspeicher und nicht in der
eigentlichen Datenbank. Das DataSet-Objekt stellt - über direkte Verbindungen zu physischen Datenbanken hinaus - zusätzliche
Flexibilität bereit. Ähnlich wie das von vielen Datenbanksystemen unterstützte Datenmengenobjekt kann auch das
DataSet-Objekt mehrere DataTable-Objekte enthalten, die Tabellen oder Ansichten aus einer beliebigen Zahl von Datenquellen
repräsentieren. Das DataSet-Objekt arbeitet asynchron in einem nicht mit den Datenbanken verbundenen Modus. Erst zu einem
späteren Zeitpunkt werden dann die Befehle zur Aktualisierung der Datenquelle via Datenprovider übergeben.
RAD Studio unterstützt zwei Arten von Datenmengen (DataSet-Objekten): Standarddatenmengen und typisierte Datenmengen.
Eine Standarddatenmenge erhalten Sie, wenn Sie das DataSet-Objekt implizit definieren. Die Datenmenge basiert in diesem Fall
auf dem Layout der Spalten in der Datenquelle, das zur Laufzeit entsprechend der Select-Anweisung geliefert wird.
Typisierte Datenmengen bieten umfassendere Steuerungsmöglichkeiten bezüglich des Layouts der Daten, die von der
Datenquelle abgerufen werden. Eine typisierte Datenmenge ist von einer DataSet-Klasse abgeleitet. Der Zugriff auf Tabellen
und Spalten erfolgt bei typisierten Datenmengen nicht mit Hilfe entsprechender Methoden, sondern direkt über den Namen.
Typisierte Datenmengen haben gegenüber Standarddatenmengen verschiedene Vorteile, etwa eine bessere Lesbarkeit,
umfassendere Funktionen zur Code-Vervollständigung und die Möglichkeit, Datentypen zu erzwingen. Die Elemente typisierter
Datenmengen werden bereits zur Compilierzeit und nicht erst zur Laufzeit auf Typübereinstimmung überprüft. Wenn Sie eine
typisierte Datenmenge erstellen, werden einige neue Objekte erzeugt, auf die Sie über die Projektverwaltung zugreifen
können. Hierzu gehören zwei Dateien, die entsprechend der Datenmenge benannt sind. Eine dieser Dateien ist eine XML-Datei
mit der Erweiterung .xsd, die andere enthält Quelltext in der verwendeten Sprache. Alle Daten der Datenmenge, einschließlich
der Tabellen- und Spaltendaten aus der Datenbankverbindung, werden in der .xsd-Datei gespeichert. Die Quelltextdatei wird
basierend auf den XML-Daten in der .xsd-Datei erzeugt. Sie können die Struktur einer typisierten Datenmenge ändern, indem
Sie Elemente in der .xsd-Datei modifizieren. Die Quelltextdatei wird dann beim Compilieren basierend auf den geänderten
XML-Daten neu erstellt.
Weitere Informationen zu Datenmengen finden Sie in der Dokumentation des Microsoft .NET Framework SDK.
16
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
BDP-Migration: Überblick
ADO.NET-Benutzeroberflächen
Der Datenzugriff über ADO.NET ist für alle Programmiermodelle in .NET verfügbar.
Web Forms
Die Web Forms in ASP.NET bieten eine komfortable Oberfläche für den Zugriff auf Datenbanken über das Web. ASP.NET
verwendet ADO.NET, um die Funktionen des Datenzugriffs auszuführen.
.NET, AdoDbx Client- und BDP.NET-Verbindungskomponenten vereinfachen das Zusammenspiel von Web Forms und
ADO.NET. DB Web Controls unterstützen sowohl ADO.NET- als auch AdoDbx Client- und BDP.NET-Komponenten. Die
Entwicklung von Webanwendungen wird dadurch wesentlich beschleunigt.
Windows Forms
1
Windows Forms werden nicht mehr unterstützt.
AdoDbx Client Namespace
Die AdoDbx Client-Klassen sind unter dem Namespace Borland.Data.AdoDbxClientProvider zu finden.
BDP.NET-Namespace
Die BDP.NET-Klassen sind unter den Namespaces Borland.Data zu finden.
BDP.NET-Namespace
Namespace
Beschreibung
Borland.Data.Common Enthält Objekte, die allen Borland-Datenprovidern gemeinsam sind, einschließlich der Klassen Error
und Exceptions, Datentypaufzählungen, Provideroptionen und Interfaces für die Entwicklung eigener
Command-, Connection- und Cursor-Klassen.
Borland.Data.Provider
Enthält die wichtigsten BDP.NET-Klassen, wie BdpCommand, BdpConnection, BdpDataAdapter und
andere Klassen, die Möglichkeiten zur Interaktion mit externen Datenquellen wie Oracle-, DB2-,
Interbase- und MS SQL Server-Datenbanken bereitstellen.
Borland.Data.Schema
Enthält Interfaces für die Entwicklung eigener Klassen zur Manipulation von Datenbankschemen
sowie verschiedene Typen und Enumeratoren zur Definition von Metadaten.
Siehe auch
Deployment von Anwendungen
ASP.NET-Datenbankanwendung erstellen (
see page 187)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 1 (
see page 189)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 2 (
see page 191)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 3 (
see page 192)
ASP.NET-Datenbankanwendung erstellen (
Datenprovider für Microsoft .NET (
AdoDbx.NET-Datentypen (
see page 187)
see page 28)
see page 12)
ADO.NET-Komponentendesigner (
see page 23)
Typisierte Datenmengen verwenden (
Tabellenzuordnungen erstellen (
see page 143)
see page 120)
.NET Framework Developer's Guide ADO.NET (MSDN)
17
BDP-Migration: Überblick
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
1.1.5 BDP-Migration: Überblick
BDP (Borland Daten-Provider) ist veraltet und Sie sollten BDP nicht für neue Entwicklungen verwenden. Verwenden Sie
stattdessen AdoDbx Client. Dieses Thema beschreibt die Unterschiede und Äquivalenzen zwischen BDP und AdoDbx Client.
Auswirkungen der Abschaffung von BDP:
• BDP wird in einem künftigen Release aus dem Produkt entfernt.
• Es wird keine Weiterentwicklung von BDP und nur ein minimaler QS-Aufwand vorgenommen werden. Es werden nur kritische
Fehler behoben werden.
1
• Es wird keine weitere Dokumentation bereitgestellt, obwohl die Dokumentation noch nicht entfernt wird.
BDP basierte auf ADO.NET 1.1. Viele der abweichenden Features von BDP, wie z.B. die Provider-Unabhängigkeit und
erweiterte Metadaten, wurden zu ADO.NET 2 mit unterschiedlichen Methoden hinzugefügt, die mit BDP nicht kompatibel sind.
Außerdem verwendet ADO.NET 2 abstrakte Basisklassen und nicht mehr die ADO.NET 1.1-Interfaces. All dies machte eine
Erweiterung von BDP auf ADO.NET 2.0 unmöglich.
AdoDbx Client basiert auf ADO.NET 2.0 und stellt fast alle BDP-Funktionen bereit.
BDP besteht aus drei Namespaces:
BDP-Namespace
Beschreibung
Borland.Data.Common Enthält Objekte, die allen Borland-Datenprovidern gemeinsam sind, einschließlich der Klassen Error
und Exceptions, Datentypaufzählungen, Provider-Optionen und Interfaces für die Entwicklung eigener
Command-, Connection- und Cursor-Klassen.
Borland.Data.Provider
Enthält die wichtigsten BDP.NET-Klassen, wie BdpCommand, BdpConnection, BdpDataAdapter,
BdpDataReader und andere Klassen, die Möglichkeiten zur Interaktion mit externen Datenquellen wie
Oracle-, DB2-, Interbase- und MS SQL Server-Datenbanken bereitstellen.
Borland.Data.Schema
Enthält Interfaces für die Entwicklung eigener Klassen zur Manipulation von Datenbankschemen
sowie verschiedene Typen und Enumeratoren zur Definition von Metadaten.
Dieses Dokument beschreibt die Migration für alle drei Namespaces.
Migration von Borland.Data.Provider
Zwei Klassen in diesem Namespace stellen Daten-Remoting bereit und sind nicht veraltet, so dass keine Migration erforderlich
ist:
• DataHub
• DataSync
Korrespondierende Klassen in BDP und AdoDbx Client
Die meisten BDP-Klassen in diesem Namespace sind Implementierungen der ADO.NET-Klassen. Diese Klassen sind auch in
AdoDbx Client implementiert. Der meiste Quelltext, der diese Klassen verwendet, muss mit geringem Aufwand nach AdoDbx
Client konvertiert werden.
Die folgende Tabelle zeigt die Zuordnungen von Klassen in ADO.NET, BDP und AdoDbx Client:
18
ADO.NET
BDP.NET
ADODbx Client
DbCommand
BdpCommand
TAdoDbxCommand
DbCommandBuilder
BdpCommandBuilder
TAdoDbxCommandBuilder
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
BDP-Migration: Überblick
DbConnection
BdpConnection
TAdoDbxConnection
DbDataAdapter
BdpDataAdapter
TAdoDbxDataAdapter
DbDataReader
BdpDataReader
TAdoDbxDataReader
DbTransaction
BdpTransaction
TAdoDbxTransaction
Die Konvertierung von BDP-Klassen in dieser Gruppe ist ziemlich einfach. Sehen Sie in der Dokumentation nach, ob die
Methode, die Sie verwendet haben, in der korrespondierenden AdoDbx Client-Klasse unterstützt wird. Falls ja, müssen Sie
wahrscheinlich gar nichts tun. Wenn die Methode nicht unterstützt wird, müssen Sie Ihren Quelltext ändern und die Methoden
verwenden, die von AdoDbx Client oder von ADO.NET unterstützt werden.
Die Klasse BdpDataReader greift beispielsweise auf Datenbankdatensätze zu. Die meisten Datenzugriffsmethoden dieser
Klasse haben korrespondierende TAdoDbxDataReader.Methoden, wie im ISQLCursor-Abschnitt beschrieben. Mit
BdpDataReader.GetSchemaTable können Cursor-Metadaten als Datentabelle abgerufen werden. Eine Beschreibung des
Zugriffs auf Metadaten für AdoDbx Client finden Sie im Abschnitt ISQLExtendedMetaData und ISQLMetaData.
BDP-Klassen ohne korrespondierende AdoDbx Client-Klassen
Die Klasse BdpCopyTable hat in AdoDbx Client keine korrespondierende Klasse, daher ist dieses Feature in AdoDbx Client
nicht verfügbar.
Migration von Borland.Data.Common
Dieser Namespace hat sieben Klassen und drei Interfaces.
BdpConnectionString
Die Klasse TAdoDbxConnection verfügt über die Eigenschaft ConnectionString. Diese Klasse unterstützt auch das
Verbindungs-Pooling.
BdpError und BdpErrorCollection
Alle Fehler werden in AdoDbx Client in der Klasse TAdoDbxException als Exceptions behandelt, daher sind diese Klassen nicht
erforderlich.
BdpException, BdpParameter und BdpParameterCollection
Diese Klassen sind Implementierungen der ADO.NET-Klassen. Diese Klassen sind auch in AdoDbx Client implementiert. Der
meiste Quelltext, der diese Klassen verwendet, muss mit geringem Aufwand nach AdoDbx Client konvertiert werden.
Die Konvertierung von BDP-Klassen in dieser Gruppe ist ziemlich einfach. Sehen Sie in der Dokumentation nach, ob die
Methode, die Sie verwendet haben, in der korrespondierenden AdoDbx Client-Klasse unterstützt wird. Falls ja, müssen Sie
wahrscheinlich gar nichts tun. Wenn die Methode nicht unterstützt wird, müssen Sie Ihren Quelltext ändern und die Methoden
verwenden, die von AdoDbx Client oder von ADO.NET unterstützt werden.
Die folgende Tabelle zeigt die Zuordnungen von Klassen in ADO.NET, BDP und AdoDbx Client:
ADO.NET
BDP.NET
ADODbx Client
DbException
BdpException
TAdoDbxException
DbParameter
BdpParameter
TAdoDbxParameter
DbParameterCollection
BdpParameterCollection
TAdoDbxParameterCollection
19
1
BDP-Migration: Überblick
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
DbResolver
DbResolver ist eine Implementierung des ISQLResolver-Interface in dem Namespace Borland.Data.Schema (wird weiter unten
in diesem Thema beschrieben).
ISQLCommand, IAQLConnection und ISQLCursor
Diese Interfaces werden hauptsächlich von Treiberentwicklern verwendet, und es gibt kein AdoDbx Client-Äquivalent. Sie
müssen den Treiber erneut unter Verwendung des dbExpress-Frameworks schreiben.
Migration von Borland.Data.Schema
Diese Namespace enthält fünf Interfaces.
1
ISQLDataSource
Die Methode GetProviders gibt eine Liste der Daten-Provider zurück. Ähnliches führt die Methode
TAdoDbxProviderFactory.CreateDataSourceEnumerator aus, die einen Enumerator für alle Provider erstellt. Für die Methoden
GetConnections und GetDbObjectTypes gibt es in AdoDbx Client keine Äquivalente.
ISQLExtendedMetaData und ISQLMetaData
Mit der Methode GetSchema in TAdoDbxConnection ermitteln Sie eine Metadatenkollektion. Der Parameter Name von
GetSchema legt die Art der zu ermittelnden Metadaten fest. Die von DbConnection.GetSchema unterstützten Standardnamen
werden in AdoDbx Client unterstützt.
Zusätzlich können Sie eine der Namenskonstanten in der Klasse TDBXMetaDataCollectionName festlegen, um eine bestimmte
Metadatenkollektion zu erhalten. Mit der korrespondierenden Klasse im Namespace DBXMetaDataNames lassen sich dann die
für diese Metadatenkollektion gewünschten Spalteninformationen ermitteln.
Um beispielsweise den Quelltext für Prozeduren in einer Datenbank zu ermitteln, verwenden Sie die Konstante
ProcedureSources. Dadurch erhalten Sie eine Datentabelle mit Quelltextinformationen zu den Prozeduren. Über die
DBXMetaDataNames-Klassen TDBXProcedureSourcesColumns und TDBXProcedureSourcesIndex mit der zurückgegebenen
Datentabelle greifen Sie auf die Quelltextinformationen zu den Prozeduren per Namen oder Ordinalzahl zu.
ISQLResolver
Diese Klasse löst SQL-Anweisungen auf.
Das nächste Analog ist die Klasse TAdoDbxDataAdapter für ISQLResolver-Methoden. Die folgende Tabelle zeigt die
Eigenschaften, die mit Methoden korrespondieren.
ISQLResolver
TAdoDbxDataAdapter
Methode GetDeleteSQL
Eigenschaft DeleteCommand
Methode GetInsertSQL
Eigenschaft InsertCommand
GetSelectSQL
Eigenschaft SelectCommand
GetUpdateSQL
Eigenschaft UpdateCommand
Das nächste Analog für ISQLResolver-Eigenschaften sind die Eigenschaften, die TAdoDbxCommandBuilder von der
ADO.NET-Klasse DbCommandBuilder und einer TAdoDbxDataReader-Eigenschaft erbt.
20
ISQLResolver
ADODbx Client
Eigenschaft QuotePrefix
Eigenschaft TAdoDbxCommandBuilder.QuotePrefix
Eigenschaft QuoteSuffix
Eigenschaft TAdoDbxCommandBuilder.QuoteSuffix
Eigenschaft Row
Eigenschaft TAdoDbxDataReader.Item
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Blackfish SQL - Überblick
ISQLSchemaCreate
Dieses Interface ermöglicht das Erstellen eines Datenbankschemas in Ihrem eigenen Provider. Der AdoDbx Client stellt dieses
Feature nicht bereit.
Siehe auch
Überblick zu ADO.NET (
see page 15)
.NET Framework Developer's Guide ADO.NET (MSDN)
TAdoDbxCommand
TAdoDbxCommandBuilder
1
TAdoDbxConnection
TAdoDbxDataAdapter
TAdoDbxDataReader
TAdoDbxException
TAdoDbxParameter
TAdoDbxParameterCollection
TAdoDbxProviderFactory
TAdoDbxTransaction
TDBXMetaDataCollectionName
1.1.6 Blackfish SQL - Überblick
Design und Implementierung von Blackfish SQL sind auf Leistung, Skalierbarkeit, einfache Verwendung und strenge
Kompatibilität mit Industriestandards ausgerichtet. Blackfish SQL hat folgende Eigenschaften:
• Kompatibilität mit Industriestandards
• Unterstützung von SQL-92
• Unicode-Speicherung von Zeichendaten
• Unicode-basierende Sortierfolge für Sortierung und Indizierung
• dbExpress 4-Treiber für Win32-Delphi und -C++
• ADO.NET 2.0-Provider für .NET
• JDBC für Java
• JavaBean-Datenzugriffskomponenten für Java
• Verteilte XA/JTATransaktionen für Java
• Hohe Leistung und Skalierbarkeit für Anwendungen mit anspruchsvoller Transaktionsverarbeitung (OLTP) und
Entscheidungsunterstützung (DSS)
• Stored Procedures und Trigger für Delphi, C# und VB.NET unter Windows
• Stored Procedures und Trigger für Java
• Keine Administration erforderlich; Deployment in Form einer einzigen Assembly oder Jar-Datei
21
Blackfish SQL - Überblick
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
• Inkrementelles Backup und Failover der Datenbank
Blackfish SQL-DataStore
Blackfish SQL ist der Name sowohl des Produkts, als auch der zugehörigen Tools und des Dateiformats. Zu diesem Produkt
gehört ein Package, das die Klasse DataStore sowie weitere Klassen enthält, deren Namen die Bezeichnung "DataStore"
enthalten. ish Blackfish SQL für Windows und Blackfish SQL für Java sind äußerst kompatibel miteinander. Die Dateiformate von
Blackfish SQL für Windows und Blackfish SQL für Java sind binär-kompatibel. Darüber hinaus sind auch die Datenbank-Clients
und die -Server austauschbar. Windows-Clients können mit Java-Servern eine Verbindung herstellen, und Java-Clients mit
Windows-Servern.
Da die Blackfish SQL für Windows-Implementierung neuer als die für Java ist, werden einige der in Blackfish SQL für Java
vorhandenen Funktionen noch nicht unterstützt. Die folgenden Funktionen werden nicht unterstützt:
• ISQL SQL-Befehlszeileninterpreter
1
• Verfügbarkeitsfunktionen, darunter inkrementelles Backup und Failover
• Grafische Bearbeitung administrativer Aufgaben
• Zugriff auf Datei- und Objekt-Streams
• Nachverfolgung und Auflösung von Einfüge-, Aktualisierungs- und Löschoperationen der untersten Ebene
• Zugriff auf das Blackfish SQL-Dateisystemverzeichnis
Blackfish SQL-Connectivity
Dieser Abschnitt bietet eine Übersicht über die für Blackfish SQL für Windows und Blackfish SQL für Java verfügbaren Treiber.
Hinweise, wie mit diesen Treibern eine Verbindung zu einer Blackfish SQL-Datenbank hergestellt werden kann, finden Sie im ,
Blackfish SQL Developer's Guide.
Blackfish SQL für Windows-Connectivity
Blackfish SQL für Windows stellt folgende Treiber bereit:
• DBXClient: Dies ist ein Win32-dbExpress 4-Treiber, mit dessen Hilfe Delphi- und C++ Anwendungen unter Win32 eine
Verbindung zu einem Remote-Server von Blackfish SQL für Windows oder Blackfish SQL für Java herstellen können.
• Lokaler ADO.NET 2.0-Provider: Dies ist ein vollständig in verwaltetem Code geschriebener Treiber, mit dessen Hilfe
.NET-Anwendungen eine Verbindung zu einem lokalen Server von Blackfish SQL für Windows herstellen können. Der lokale
ADO.NET-Treiber wird, um die Leistung zu erhöhen, im gleichen Prozess ausgeführt wie der
BlackFishSQL-Datenbank-Kernel.
• Remote-ADO.NET 2.0-Provider: Dies ist ein vollständig in verwaltetem Code geschriebener Treiber, mit dessen Hilfe
.NET-Anwendungen eine Verbindung zu einem Remote-Server von Blackfish SQL für Windows oder Blackfish SQL herstellen
können.
Blackfish SQL für Java-Connectivity
Blackfish SQL für Java stellt folgende JDBC-Treiber bereit:
• Lokaler JDBC-Treiber : Dies ist ein vollständig in verwaltetem Code geschriebener Treiber, mit dessen Hilfe
Java-Anwendungen eine Verbindung zu einem lokalen Server von Blackfish SQL für Java herstellen können. Der lokale
JDBC-Treiber wird, um die Leistung zu erhöhen, im gleichen Prozess ausgeführt wie der BlackFishSQL-Datenbank-Kernel.
•
Remote-JDBC-Treiber: Dies ist ein vollständig in verwaltetem Code geschriebener Treiber, mit dessen Hilfe
Java-Anwendungen eine Verbindung zu einem Remote-Server von Blackfish SQL für Windows oder Blackfish SQL für Java
herstellen können.
Siehe auch
Blackfish SQL Developer's Guide
ConnectionProperties
22
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
ADO.NET-Komponentendesigner
DataStoreErrorCode
1.1.7 ADO.NET-Komponentendesigner
Fast alle verteilten Anwendungen müssen in der Lage sein, Informationen in Datenbanken zu lesen und zu aktualisieren. Je
nachdem, welche Anwendung Sie mit ADO.NET entwickeln, werden verschiedene Anforderungen an die Arbeit mit den Daten
gestellt. Es kann zum Beispiel sein, dass Sie eine einfache Anwendung entwickeln möchten, die lediglich Daten in einem
Formular anzeigt. Oder Sie möchten eine Anwendung entwickeln, die es ermöglicht, Daten mit einem anderen Unternehmen
auszutauschen. In jedem Fall ist es unumgänglich, die grundlegenden Konzepte zur Arbeit mit Daten in ADO.NET zu kennen.
Mit diesen Designern können Sie unter Verwendung serverspezifischer Schemaobjekte von Datenbanken, wie Tabellen,
Ansichten und Indizes, effizient auf Daten zugreifen, Daten bereitstellen und Daten bearbeiten. Auf diese Weise lassen sich
Verbindungen zu den meisten gängigen Standarddatenbanken einrichten und konsistente und zuverlässige Operationen mit den
Daten ausführen.
In diesem Thema wird Folgendes behandelt:
• Aufgabenbereiche der Komponentendesigner
• Verbindungseditor
• Anweisungstext-Editor
• Das Dialogfeld für Stored Procedures
• Datenmenge erzeugen
• Datenadapter konfigurieren
• Daten-Explorer
Aufgabenbereiche der Komponentendesigner
Die wichtigsten Designer und Tools für Datenbankkomponenten sind:
• Der Verbindungseditor, mit dem eine Live-Verbindung zur Datenquelle hergestellt werden kann.
• Der Anweisungstext-Editor zur Eingabe von Text für Anweisungskomponenten.
• Der Designer Datenadapter konfigurieren, mit dem Anweisungen für Datenadapter definiert werden.
• Das Dialogfeld für Stored Procedures, in dem Werte für die Eingabe- oder Eingabe-/Ausgabeparameter für
Befehlskomponenten angezeigt und definiert werden.
• Der Designer Datenmenge erzeugen für die Erstellung benutzerdefinierter Datenmengen.
• Der Daten-Explorer, mit dem serverspezifische Schemaobjekte in Datenbanken durchsucht und Daten aus Datenquellen in
23
1
ADO.NET-Komponentendesigner
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
ein Delphi für .NET-Projekt per Drag&Drop eingelesen werden können.
Verbindungseditor
Der Verbindungseditor dient zur Verwaltung von Verbindungsstrings und datenbankspezifischer Verbindungsoptionen. Mit dem
Verbindungseditor können Sie Datenbankverbindungen hinzufügen, entfernen, löschen, umbenennen und testen. Änderungen
der Verbindungsinformationen werden in der Datei ADoDbxConnections.xml gespeichert. Auf diese Informationen kann beim
Erstellen eines neuen Verbindungsobjekts zugegriffen werden. Nach der Auswahl einer Verbindung erzeugt der
Verbindungseditor den Verbindungsstring und die erforderlichen Verbindungsoptionen und weist diese der Eigenschaft
ConnectionString bzw. ConnectionOptions zu.
Zum Anzeigen des Dialogfelds Verbindungseditor ziehen Sie die Komponente TAdoDbxConnection aus der Tool-Palette in
das Formular und klicken auf das Designer Verb der Komponente am unteren Rand des Objektinspektors.
1
Anweisungstext-Editor
Im Anweisungstext-Editor geben Sie den Anweisungstext für Befehlskomponenten ein, die über die Eigenschaft
CommandText verfügen. In dem mehrzeiligen Bearbeitungsfeld des Editors können Sie Anweisungen manuell bearbeiten oder
den Anweisungstext durch die Auswahl von Tabellen und Spalten generieren. Um das Dialogfeld Anweisungstext-Editor zu
öffnen, ziehen Sie die Komponente TAdoDbxCommand aus der Tool-Palette in das Formular und klicken auf das Designer Verb
der Komponente am unteren Rand des Objektinspektors.
Der Anweisungstext-Editor ist ein einfacher SQL-Builder, mit dem SQL-Anweisungen für eine einzelne Tabelle erstellt werden
können. Die Datenbankobjekte werden über die Eigenschaft SchemaName in der ISQLSchemaCreate-Komponente gefiltert,
d.h. es werden nur Tabellen verwendet, die Teil des Schemas sind. Ist keine SchemaName-Eigenschaft angegeben, werden alle
Objekte angezeigt, die für den aktuell angemeldeten Benutzer verfügbar sind. Die Einstellung QuoteObjects der Eigenschaft
ConnectionOptions bestimmt, ob die Objekte in das datenbankspezifische Anführungszeichen eingeschlossen werden. Dies ist
beispielsweise bei Datenbanken wichtig, in denen die Tabellennamen Leerzeichen enthalten können.
Um die Listenfelder für die Tabellen und Spalten mit Elementen zu füllen und SQL-Anweisungen zu erstellen, muss zuvor eine
Live-TAdoDbxConnection definiert worden sein. Andernfalls können die Daten nicht abgerufen werden. Der
Anweisungstext-Editor unterstützt die Auswahl von Tabellen- und Spaltennamen aus entsprechenden Listen. Nach der
Auswahl erzeugt der Editor eine SQL-Anweisung. Er verwendet hierzu eine Instanz der Klasse TAdoDbxCommandBuilder. Bei
der Erstellung optimierter SQL-Anweisungen generiert der Editor die WHERE-Klausel für SELECT-, UPDATE- und
DELETE-Anweisungen basierend auf Indexinformationen. Ansonsten wird die WHERE-Klausel mit Hilfe von
Nicht-BLOB-Spalten und durchsuchbaren Spalten erzeugt.
Nach der Erstellung wird die SQL-Anweisung der Eigenschaft TAdoDbxCommand. CommandText zugewiesen.
Das Dialogfeld für Stored Procedures
Im Dialogfeld für Stored Procedures können Sie Eingabe- und Eingabe-/Ausgabeparameter für eine Stored Procedure
anzeigen und eingeben sowie die Stored Procedure ausführen. Um das Dialogfeld für Stored Procedures zu öffnen, ziehen Sie
eine TAdoDbxCommand-Komponente aus der Tool-Palette in das Formular, setzen die Eigenschaft CommandType der
TAdoDbxCommand-Komponente auf StoredProcedure und klicken auf das Designer Verb Anweisungstext-Editor am unteren
Rand des Objektinspektors.
Das Dialogfeld für Stored Procedures enthält eine Auswahlliste mit den verfügbaren Stored Procedures. Der Inhalt dieser Liste
hängt von der TAdoDbxConnection-Komponente ab, die in der Eigenschaft Connection der TAdoDbxCommand-Komponente
angegeben ist. Nach Auswahl einer Stored Procedure werden im Dialogfeld die zugehörigen Parameter eingeblendet. Für den
ausgewählten Parameter werden die Parameter-Metadaten angezeigt. Sie können Werte für die Eingabe- oder
Eingabe-/Ausgabeparameter festlegen und die Stored Procedure ausführen. Wenn die Stored Procedure Ergebnisse liefert
(Ausgabeparameter, Eingabe-/Ausgabeparameter, Rückgabewerte, Cursor usw.), werden diese in einem Datengitter im unteren
Teil
des
Dialogfelds
angezeigt.
Nachdem
die
Eigenschaften
CommandText
und
Parameters
für
die
TAdoDbxCommand-Komponente festgelegt wurden, kann die Stored Procedure zur Laufzeit durch einen Aufruf von
ExecuteReader oder ExecuteNonQuery ausgeführt werden.
24
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
ADO.NET-Komponentendesigner
Datenmenge erzeugen
Mit dem Designer Datenmenge erzeugen können Sie eine Datenmenge (DataSet) generieren. Wenn Sie mit diesem Designer
arbeiten, haben Sie folgende Vorteile: strikte Typisierung, sauberer Quelltext und die Möglichkeit, die Code-Vervollständigung zu
verwenden. Eine Datenmenge wird zunächst von der Basisklasse DataSet abgeleitet und verwendet dann die Informationen in
einer XML-Schemadatei (.xsd-Datei), um eine neue Klasse zu generieren. Die Informationen aus dem Schema (Tabellen,
Spalten usw.) werden generiert und in das neue DataSet-Objekt compiliert. Um dieses Dialogfeld zu öffnen, ziehen Sie eine
TAdoDbxDataAdapter-Komponente aus der Tool-Palette in das Formular und klicken auf das Designer Verb der Komponente
am unteren Rand des Objektinspektors. Wenn diese Komponente nicht angezeigt wird, wählen Sie
Komponenten Installierte .NET-Komponenten, um sie der Tool-Palette hinzuzufügen.
Datenadapter konfigurieren
Mit dem Designer Datenadapter konfigurieren können Sie SELECT-, INSERT-, UPDATE- und DELETE-Anweisungen
erstellen. Nachdem die SQL-Anweisungen generiert wurden, erzeugt der Designer Datenadapter konfigurieren neue
TAdoDbxCommand-Objekte und fügt sie den Eigenschaften SelectCommand, DeleteCommand, InsertCommand und
UpdateCommand des TAdoDbxDataAdapter-Objekts hinzu.
Nach der Erstellung einer SQL SELECT-Anweisung können Sie sich Daten in der Vorschau ansehen und eine neue
Datenmenge (DataSet) erzeugen. Es ist auch möglich, eine neues DataTable-Objekt mit einer vorhandenen Datenmenge zu
füllen. Neue DataSet-Objekte werden automatisch dem Designer-Host hinzugefügt. Es besteht die Möglichkeit, typisierte
DataSet-Objekte zu erstellen.
Die Datenadapter sind ein integraler Bestandteil der von ADO.NET verwalteten Provider. Adapter werden im Wesentlichen dazu
verwendet, den Datenaustausch zwischen einer Datenquelle und einer Datenmenge auszuführen. Dies impliziert die folgenden
beiden Vorgänge: Das Einlesen von Daten aus einer Datenbank in ein DataSet-Objekt und das Zurückschreiben der geänderten
Daten aus dem DataSet-Objekt in die Datenbank. Ein Datenadapter transferiert Daten zwischen einer beliebigen Quelle und
Datenadapter
konfigurieren
einem
DataSet-Objekt.
Um
das
Dialogfeld
zu
öffnen,
ziehen
Sie
eine
TAdoDbxDataAdapter-Komponente aus der Tool-Palette in das Formular und klicken auf das Designer Verb der Komponente
am unteren Rand des Objektinspektors.
Daten-Explorer
Der Daten-Explorer ist ein hierarchischer Datenbank-Browser mit Bearbeitungsfunktionen. Der Daten-Explorer ist in die IDE
integriert, kann aber auch als eigenständiges Programm ausgeführt werden. Um in der IDE auf den Daten-Explorer
zuzugreifen, wählen Sie Ansicht Daten-Explorer. Mit Hilfe der Kontextmenüs des Daten-Explorers können Sie folgende
Aufgaben ausführen:
• Datenbankverbindungen verwalten – Sie können neue Verbindungen hinzufügen oder vorhandene Verbindungen ändern,
löschen oder umbenennen.
• Datenbankstruktur und Daten durchsuchen – Erweitern und öffnen Sie Browser-Knoten, um nach serverspezifischen
Schemaobjekten, z.B. nach Tabellen, Ansichten, Definitionen für Stored Procedures und Indizes, zu suchen.
• Tabellen hinzufügen und bearbeiten – Sie können die Datenstrukturen für eine neue Tabelle festlegen oder in einer
vorhandenen Tabelle Spalten hinzufügen und entfernen bzw. die Informationen in den Spalten ändern.
• Parameter für Stored Procedures anzeigen und testen – Sie können Werte für die Eingabe- oder Eingabe-/Ausgabeparameter
festlegen und die Stored Procedure ausführen.
• Daten migrieren – Das Schema und die Daten einer oder mehrerer Tabellen kann von einem Provider zu einem anderen
übertragen werden.
• Schemaobjekte per Drag&Drop in Formulare einfügen, um die Anwendungsentwicklung zu vereinfachen – Sie können
Tabellen und Stored Procedures in das Anwendungsformular für das .NET Framework ziehen, um Verbindungskomponenten
hinzuzufügen und Verbindungsstrings automatisch zu erzeugen.
Der Daten-Explorer unterstützt Verbindungen zu verschiedenen Standarddatenbanken und kann erweitert werden, um
Verbindungen zu anderen gebräuchlichen Datenbanken einzurichten. Der Daten-Explorer verwendet das Interface
ISQLDataSource, um eine Liste der verfügbaren Provider, Datenbankverbindungen und unterstützten Schemaobjekte
25
1
Deployment von Datenbankanwendungen
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
zusammenzustellen. Die Liste der verfügbaren Provider wird in der Datei TAdoDbxDataSources.xml gespeichert, die Liste
der verfügbaren Verbindungen in der Datei TAdoDbxConnections.xml. Nach Auswahl eines Providers werden mit dem
Interface ISQLMetadata Metadaten abgerufen und die Datenbankobjekte in einem schreibgeschützten Baumdiagramm
angezeigt. In der aktuellen Implementierung stellt der Daten-Explorer eine Liste der Tabellen, Ansichten und Stored
Procedures für alle AdoDbx Client-unterstützten Datenbanken bereit.
Sie können mit dem Daten-Explorer neue Tabellen erstellen, vorhandene Tabellen ändern und leeren, Daten aus mehreren
Tabellen von einem Provider zu einem anderen migrieren und einzelne Tabellen von einer ADO-unterstützten Datenbank zu
einer anderen übertragen. Bei allen diesen Operationen greift der Daten-Explorer auf die
ISQLSchemaCreate-Implementierung des Providers zu.
Der Daten-Explorer lässt sich auch dazu verwenden, Daten aus einer Datenquelle in ein beliebiges RAD Studio-Projekt für das
.NET Framework einzubinden. Wenn Sie eine Tabelle in ein Formular ziehen, werden der Anwendung eine
TAdoDbxConnection- und eine TAdoDbxDataAdapter-Komponente hinzugefügt, und die TAdoDbxDataAdapter-Komponente
wird automatisch für die Tabelle konfiguriert. Wird eine Stored Procedure in ein Formular gezogen, werden der Anwendung
eine TAdoDbxConnection- und eine TAdoDbxCommand-Komponente hinzugefügt, und die Eigenschaft CommandType des
TAdoDbxCommand wird auf StoredProcedure gesetzt.
1
Siehe auch
Überblick zu ADO.NET (
see page 15)
AdoDbx.NET-Datentypen (
see page 12)
Anweisungstext-Editor verwenden (
Verbindungseditor verwenden (
see page 137)
see page 139)
Designer für Datenadapter verwenden (
Datenadapter-Vorschau verwenden (
see page 138)
see page 136)
Designer "Datenmenge erzeugen" verwenden (
Daten zwischen Datenbanken migrieren (
Tabellenzuordnungen erstellen (
see page 143)
see page 124)
see page 120)
1.1.8 Deployment von Datenbankanwendungen für das .NET
Framework
Wenn Sie Datenbankanwendungen mit RAD Studio weitergeben, kopieren Sie die Assemblierungen und Treiber-DLLs, die zur
Laufzeit erforderlich sind, in ein Verzeichnis für das Deployment. Im Folgenden werden die Namen dieser Assemblierungen und
DLLs aufgeführt und der jeweilige Speicherort angegeben.
ADO.NET 2.0-Anwendungs-Deployment
Siehe die Quelltextdatei Borland.Data.AdoDbxClientProvider.pas.
Deployment von BDP.NET-Anwendungen
Spezielle Laufzeit-Assemblierungen für Datenbanken werden an den folgenden Speicherort kopiert:
26
Verwaltete Assemblierungen
Daten-Provider
Speicherort
Borland.Data.Common.dll
Alle
GAC
Borland.Data.Provider.dll
Alle
GAC
Borland.Data.DB2.dll
DB2
GAC
Borland.Data.Interbase.dll
Interbase
GAC
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Deployment von Datenbankanwendungen
Borland.Data.Mssql.dll
MS SQL/MSDE
GAC
Borland.Data.Oracle.dll
Oracle
GAC
Borland.Data.Msacc.dll
MS Access
GAC
Borland.Data.Sybase.dll
Sybase
GAC
Anmerkung: Bei der Weitergabe von verteilten Datenbankanwendungen, die BDP.NET-Remoting-Komponenten wie DataHub,
DataSync, RemoteConnection und RemoteServer verwenden, müssen Sie Borland.Data.DataSync.dll
im GAC installieren. Nicht verwaltete Datenbanktreiber-DLLs werden an den folgenden Speicherort kopiert:
DLLs
Daten-Provider
Speicherort
bdpint20.dll
Interbase
Suchpfad
bdpdb220.dll
DB2
Suchpfad
bdpmss20.dll
MS SQL/MSDE
Suchpfad
bdpora20.dll
Oracle
Suchpfad
bdpmsa20.dll
MS Access
Suchpfad
bdpsyb20.dll
Sybase
Suchpfad
1
Deployment von dbExpress-Anwendungen für .NET
Spezielle Laufzeit-Assemblierungen für Datenbanken werden an den folgenden Speicherort kopiert:
Verwaltete Assemblierungen
Daten-Provider
Speicherort
Borland.VclDbExpress.dll
Alle
GAC
Borland.VclDbCtrls.dll
Alle
GAC
Borland.VclDbxCds.dll
Wird von Datenbankanwendungen verlangt, die GAC
mit Client-Datenmengen arbeiten.
Borland.Common.Driver.dll
Alle
GAC
Zugehörige dbExpress.NET-Treiber und DataSnap-DLLs können mit der Anwendung weitergegeben werden. Nicht verwaltete
Datenbanktreiber-DLLs werden an den folgenden Speicherort kopiert:
DLLs
Daten-Provider
Speicherort
dbxINT30.dll
InterBase 2007, 7.5.1, 7.1*, 7.0*, 6.5*
Suchpfad
dbxASA30.dll
Adaptive Sybase Anywhere 9, 8*
Suchpfad
dbxDB230.dll
DB2 UDB 8.x, 7.x*
Suchpfad
dbxINF30.dll
Informix 9.x
Suchpfad
dbxMSS30.dll
MSSQL 2005, 2000
Suchpfad
dbxMYSA30.dll
MySQL 4.0.24
Suchpfad
dbxMYS30.dll
MySQL 5.0.27, 4.1.22*
Suchpfad
dbxora30.dll
Oracle 10g, 9.2.0*, 9.1.0*
Suchpfad
dbxASE30.dll
Sybase 12.5
Suchpfad
Midas.dll
Wird
von
Datenbankanwendungen
Client-Datenmengen arbeiten.
verlangt,
die
mit Suchpfad
Anmerkung: * Der Treiber ist für diese Datenbankversion nicht vollständig zertifiziert.
27
Datenprovider für Microsoft .NET
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
Deployment von dbGo-Anwendungen für .NET
Laufzeit-Assemblierungen und Datenbanktreiber für dbGo-Komponenten, die in VCL.NET-Anwendungen verwendet werden,
müssen nicht weitergegeben werden. Für die Ausführung von Anwendungen mit dbGo-Komponenten außerhalb der IDE ist
Microsoft Data Access Components (MDAC) Version 2.1 oder höher erforderlich. Dies gilt sowohl für Win32-VCL-Anwendungen
als auch für VCL.NET-Anwendungen. RAD Studio unterstützt MDAC 2.8.
Deployment von BDE für .NET-Anwendungen
Beim Deployment von BDE-Anwendungen müssen Sie auch die BDE mit weitergeben. Dies vergrößert zwar den Umfang der
Anwendung und macht das Deployment komplizierter, hat aber den Vorteil, dass die BDE auch von anderen BDE-Anwendungen
genutzt werden kann und eine umfassende Unterstützung von Datenbankoperationen bietet. Obwohl Sie die API der BDE direkt
in der Anwendung verwenden können, wird diese Funktionalität fast vollständig von den Komponenten im Abschnitt BDE der
Tool-Palette übernommen.
1
Siehe auch
Borland – Übersicht zum Deployment von Anwendungen
Microsoft – Übersicht zum Deployment von Anwendungen
1.1.9 Datenprovider für Microsoft .NET
Zusätzlich zur Unterstützung der .NET Framework-Provider sind in RAD Studio AdoDbxClient-Provider für Microsoft .NET
enthalten. AdoDbx Client ist eine Implementierung des .NET-Providers und stellt Verbindungen zu verschiedenen bekannten
Datenbanken her.
In diesem Thema wird Folgendes behandelt:
• Datenprovider-Architektur
• Vorteile von AdoDbx Client
• AdoDbx Client und ADO.NET-Komponenten
• Unterstützte AdoDbx Client-Provider
• AdoDbx Client-Datentypen
• AdoDbx Client-Interfaces
Datenprovider-Architektur
RAD Studio unterstützt die Provider des .NET Framework sowie die Provider von AdoDbx Client.
28
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Datenprovider für Microsoft .NET
1
AdoDbx.NET bietet eine leistungsstarke Architektur für den Zugriff auf Datenquellen ohne COM Interop-Schicht.
Hierzu gehören verschiedene Interfaces für die Integration von Datenquellen anderer Hersteller. Sie können diese Interfaces für
Ihre eigene Datenbank implementieren und auf diese Weise Entwurfszeit-Tools und Tools für den Laufzeitdatenzugriff in die
CodeGear-IDE integrieren. Von AdoDbx.NET verwaltete Komponenten kommunizieren mit diesen Interfaces, um die
grundlegende Funktionalität für den Datenzugriff bereitzustellen. Durch die Implementierung dieser Interfaces werden
datenbankspezifische, native Client-Bibliotheken mittels Platform Invoke-Services (P/Invoke) gekapselt. Je nach Verfügbarkeit
verwalteter Datenbank-Clients können Sie unter AdoDbx.NET einen voll verwalteten Provider implementieren.
Die datenbankspezifische Implementierung wird in einer Assemblierung gekapselt, deren voller Name als Teil des
Verbindungsstrings an die AdoDbxConnection-Komponente übergeben wird. Wenn die Eigenschaft ConnectionString einen
entsprechenden Assemblierungseintrag enthält, lädt AdoDbx.NET den datenbankspezifischen Provider dynamisch und
verwendet die Implementierung für ISQLConnection, ISQLCommand und ISQLCursor. Um die Datenbank zu wechseln, müssen
Sie lediglich über die Eigenschaft ConnectionString auf den entsprechenden Provider verweisen.
Vorteile von AdoDbx.NET
AdoDbx.NET bietet verschiedene Vorteile:
• Ein einheitliches Programmiermodell für verschiedene Datenbankplattformen.
• Eine leistungsstarke Architektur für den Datenzugriff.
• Eine offene Architektur, die weitere Datenbanken problemlos unterstützt.
• Portierbarer Code, der einmal geschrieben werden muss und dann für alle unterstützten Datenbanken einsetzbar ist.
• Eine konsistente Datentypzuordnung zwischen den verschiedenen Datenbanken (sofern verfügbar).
• Eine Zuordnung logischer Datentypen zu nativen .NET-Typen.
• Anders als bei OLE DB ist keine COM Interop-Schicht erforderlich.
• Während der Anwendungswicklung können Daten "live" angezeigt werden.
• Erweiterung von ADO.NET um Interfaces für Metadaten-Services, Schemaerstellung und Datenmigration.
• Schnellere Entwicklung von Datenbankanwendungen durch einen umfangreichen Satz von Komponentendesignern und
Tools.
RAD Studio erweitert die Unterstützung von .NET auf zusätzliche Datenbankplattformen und sorgt für eine konsistente
Verbindungsarchitektur sowie eine verlässliche Datentypzuordnung.
AdoDbx.NET und ADO.NET-Komponenten
Mit Hilfe eines DataSet-Objekts werden eine oder mehrere Datentabellen (DataTable-Objekte) im Arbeitsspeicher verwaltet.
Jede Datentabelle in einem DataSet-Objekt besteht aus Datenspalten (DataColumn-Objekten) und Datenzeilen
(DataRows-Objekten). Das DataSet-Objekt wird basierend auf einer SQL-Abfrage erstellt, die Sie an den Provider übergeben.
29
Datenprovider für Microsoft .NET
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
Die Navigation in einem DataSet-Objekt erfolgt auf die gleiche Weise wie in einer Standardtabelle einer relationalen Datenbank.
AdoDbx.NET-Provider kapseln zwar Implementierungsdetails für jeden Datenbanktyp, Sie können Ihre SQL-Anweisungen aber
nach Bedarf anpassen und Ergebnismengen beliebig verarbeiten.
Zu AdoDbx.NET gehören verschiedene Komponenten, die Sie zur Entwurfszeit in ein Windows Form oder Web Form einfügen
können. Außerdem stehen verschiedene Designer bereit, die die Erstellung von Datenverbindungen, Datenmengen,
Beziehungen und weiteren Elementen vereinfachen.
Die folgenden Komponenten sind sehr hilfreich, wenn Sie einen eigenen datenbankspezifischen Provider implementieren
möchten:
• AdoDbxConnection — Richtet eine Datenbankverbindung ein.
• AdoDbxCommand — Stellt Methoden und Eigenschaften für die Ausführung von SQL-Anweisungen und Stored Procedures
bereit.
1
• AdoDbxDataReader — Ruft Daten ab.
• AdoDbxParameter — Sorgt für die Laufzeitbindung der Parameter.
• AdoDbxTransaction — Unterstützt die Steuerung von Transaktionen.
• AdoDbxDataAdapter — Sorgt für die Bereitstellung und Auflösung von Daten.
• ISQLMetaData — Ruft Metadaten ab.
• ISQLSchemaCreate — Stellt Methoden zum Erstellen, Entfernen und Ändern von Datenbankobjekten bereit.
Klicken Sie auf den Link einer Komponente, um weitere Informationen anzuzeigen. Alternativ können Sie in der API-Referenz
dieser Hilfe nach der entsprechenden Dokumentation suchen.
Unterstützte AdoDbx.NET-Provider
AdoDbx.NET bietet Provider für die wichtigsten Standarddatenbanken. Sie sind in der folgenden Tabelle zusammen mit ihren
Namespaces aufgeführt.
Datenbank
Namespace
InterBase
Borland.Data.Interbase
Oracle
Borland.Data.Oracle
IBM DB2
Borland.Data.Db2
Microsoft SQL Server
Borland.Data.Mssql
Microsoft Access
Borland.Data.Msacc
Sybase
Borland.Data.Sybase
Die Komponenten, Metadaten-Zugriffstools und Designer von AdoDbx.NET sind in den folgenden Namespaces definiert:
• Borland.Data.AdoDbxClientProvider
• Borland.Data.Common
• Borland.Data.Schema
• Borland.Data.Design
AdoDbx.NET-Datentypen
AdoDbx.NET bildet SQL-Datentypen auf Datentypen des .NET Framework ab. Sie müssen sich deshalb nicht mit einem
datenbankspezifischen Typsystem befassen. Bei der Weiterentwicklung des Produkts wurde größter Wert auf eine konsistente
Typzuordnung für die einzelnen Datenbanktypen gelegt, sodass derselbe Quelltext für verschiedene Datenbanken verwendet
werden kann. Eine ähnliche Wirkung erreichen Sie bei den Datenprovidern des .NET Framework, indem Sie direkt auf deren
Interfaces zugreifen und untypisierte Vorfahren verwenden. Die Verwendung streng typisierter Zugriffsfunktionen wirkt sich
nachteilig auf die Portierbarkeit der Anwendung aus. AdoDbx.NET unterstützt keine datenbankspezifischen typisierten
30
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Überblick zu Stored Procedures
Zugriffsfunktionen. Weitere Informationen finden Sie unter dem Thema "AdoDbx.NET-Datentypen".
AdoDbx.NET-Interfaces
Sie können AdoDbx.NET so erweitern, dass es andere DBMS unterstützt. Dazu implementieren Sie einen Teilbereich des
.NET-Provider-Interface. Die Funktionalität, die für die Implementierung von Datenprovidern erforderlich ist, ist mit AdoDbx.NET
weitestgehend verallgemeinert. Das .NET Framework ermöglicht es, für jede Datenquelle einzelne Datenprovider zu erstellen.
CodeGear hat diese Aufgabe noch weiter vereinfacht und die diesbezüglichen Möglichkeiten vereinheitlicht. Anstatt einzelne
Provider mit den zugehörigen Objekten DataAdapter, DataReader und Connection sowie weiteren erforderlichen Objekten zu
erstellen, können Sie eine Sammlung von AdoDbx.NET-Interfaces implementieren, um eigene Plug-Ins für Datenquellen in den
AdoDbx-Client-Provider einzubinden.
Das Erstellen von Plug-Ins ist einfacher, als komplett neue Datenprovider zu entwickeln. Sie erstellen dazu eine Assemblierung,
die den Namespace des gewählten Providers enthält, sowie jene Klassen, die die providerspezifische Funktionalität kapseln. In
den Interfaces des AdoDbx-Client-Provider ist bereits ein Großteil der Funktionalität definiert, die zum Verbinden mit
Datenquellen, zum Ausführen von Befehlen für Datenquellen und zum Einlesen von Daten aus Datenquellen erforderlich ist.
Siehe auch
Überblick zu ADO.NET (
see page 15)
AdoDbx.NET-Komponentendesigner (
AdoDbx.NET-Datentypen (
see page 23)
see page 12)
1.1.10 Überblick zu Stored Procedures
Alle relationalen Datenbanken verfügen über bestimmte gemeinsame Funktionsmerkmale, die es den Anwendungen
ermöglichen, Daten zu speichern und zu bearbeiten. Stored Procedures sind eigenständige Programme, die jeweils in einer
datenbanksystemspezifischen Sprache geschrieben wurden. In der Regel dienen sie zur Bearbeitung häufig auftretender
datenbankbezogener Aufgaben und sind besonders bei der Verarbeitung von großen Datensatzmengen oder bei Verwendung
von Zusammenfassungs- oder mathematischen Funktionen hilfreich. Stored Procedures werden normalerweise auf dem
Datenbankserver gespeichert.
Stored Procedures werden ähnlich aufgerufen wie SQL-Anweisungen. Das Bearbeiten und Erstellen von Stored Procedures in
RAD Studio erfolgt daher mit den Verfahren, die auch für SQL-Anweisungstext verwendet werden.
Mit Hilfe von Stored Procedures können Sie Ihre Datenbankanwendungen hinsichtlich Ausführungsgeschwindigkeit, Sicherheit
und Zuverlässigkeit verbessern.
• Ausführungsgeschwindigkeit – Stored Procedures erhöhen die Ausführungsgeschwindigkeit, da sie die größere
Verarbeitungsleistung und -geschwindigkeit des Servers nutzen. Die Netzwerkbelastung wird verringert, weil Prozesse auf
den Server verlagert werden. Darüber hinaus werden compilierte SQL-Anweisungen in einer Stored Procedure normalerweise
schneller ausgeführt als normaler SQL-Anweisungstext.
• Sicherheit – Stored Procedures fungieren als zusätzliche Schicht zwischen den Clients und der Datenbank und erhöhen so
die Sicherheit der Daten. Den einzelnen Benutzern wird keine Zugriffsberechtigung für die Datenbank gewährt, sondern sie
führen Stored Procedures unabhängig von den zugrunde liegenden Tabellenzugriffsberechtigungen aus.
• Zuverlässigkeit – Stored Procedures unterstützen die Zentralisierung des Programmcodes und erleichtern so das Auffinden
und Beheben von Problemen. Außerdem kann die datenbankbezogene Geschäftslogik mit Hilfe von Stored Procedures in die
Datenbank integriert werden. Sie steht dadurch auf allen Clients zur Verfügung, unabhängig von der Sprache, mit der diese
programmiert wurden.
Bei Verwendung von AdoDbx Client können Sie während der Anwendungsentwicklung mit dem Anweisungstext-Editor und
dem Daten-Explorer die Parameter Ihrer Stored Procedures anzeigen, Eingabeparameter festlegen und Stored Procedures
ausführen.
31
1
dbExpress-Framework
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
Siehe auch
ADO.NET-Komponentendesigner (
Provider für Microsoft .NET (
see page 23)
see page 28)
1.1.11 dbExpress-Framework
Das dbExpress-Framework (DBX-Framework) ist eine Menge abstrakter Klassen, die in der Unit DBXCommon bereitgestellt
sind.. Anwendungen können mit dem Framework über verschiedene Wege in Verbindung treten: Sie können das Framework
direkt oder die dbExpress VCL-Komponenten, die sich in der oberen Schicht des Framework befinden, für native und verwaltete
Anwendungen einsetzen.
1
Obwohl viele Anwendungen mit dbExpress-Treibern über die dbExpress VCL-Komponenten in Verbindung treten, bietet das
DBX-Framework eine bequeme, einfachere Option für die Kommunikation mit einem Datenbanktreiber. Sie können auch für
dbExpress einen Datenbanktreiber erstellen, indem Sie die abstrakten DBXCommon-Basisklassen des Framework erweitern.
Das
DBX-Framework
stellt
die
gebräuchlichste
Datenbanktreiberfunktionalität
für
eine
"mengenorientierte"
Datenbankanwendung bereit, bietet aber ein einfaches Interface.
Im Folgenden finden Sie einige Schlüsselfunktionen des DBX-Framework:
• Das Treibe-Framework ist vollständig in Delphi geschrieben und ermöglicht, dass Treiber ebenfalls in Delphi geschrieben
werden.
• Es verwendet einen streng typisierten Datenzugriff anstelle von Zeigern. Das Framework verwendet z.B. String-Typen anstatt
Zeiger auf Strings.
• Das Treibe-Framework verwendet einen einzigen Quelltext Das bedeutet, dass eine einzige Kopie des Quelltextes entweder
mit den nativen DCC32- oder den verwalteten DCCIL-Compilern compiliert werden kann.
• Das Framework hat nur abstrakte Basisklassen, die für Treiber, Verbindungen, Befehle, Reader usw. verwendet werden.
• Das Framework verwendet eine auf Exception basierte Fehlerbehandlung anstelle der Rückgabe von Fehlercodes.
Leistungsmerkmale
Es gibt zwei Treiberkategorien, die die Klassen in DBXCommon erweitern: DBXDynaLink und DBXDirect. Diese Treiber
unterscheiden sich in der Art und Weise, wie sie geladen werden und in den Leistungsmerkmalen, die Sie für eine Anwendung
bereitstellen. Dies wird weiter unten detaillierter beschrieben.
Sie können das DBX-Framework auch erweitern, um Delegattreiber zu schreiben, die eine Extra-Schicht zwischen der
Anwendung und dem eigentlichen Treiber bereitstellen. Delegattreiber sind beim Verbindungs-Pooling, beim Erstellen von
Treiberprofilen, bei der Ablaufverfolgung und beim Auditing hilfreich. Eine weitere mögliche Anwendung der Treiberdelegation ist
das Erstellen eines Thread-sicheren Treiberdelegaten. Ein solcher Delegat könnte einen Thread-synchronisierten Zugriff auf alle
public Methoden bereitstellen.
Absolute
Thread-Sicherheit
bleibt
den
Anwendungen
überlassen,
die
dbExpress
verwenden.
Gewisse
Thread-Sicherheitsbelange werden aber vom dbExpress-Framework ausgezeichnet gehandhabt. Zu den Thread-sicheren
Operationen von dbExpress zählen das Laden und Entladen von Treiber und die Verbindungserstellung. Wie weiter oben
erwähnt, kann ein Delegattreiber erstellt werden, um das gesamte public Interface von dbExpress bei Bedarf Thread-sicher zu
machen.
Ein dbExpress 4-Treiber kann Treiber, die als Delphi-Packages erstellt wurden, statisch oder dynamisch linken. Der einfachste
Weg ein Treiber-Package zu linken ist, es einfach in den "uses"-Klausel aufzunehmen. Der Treiberlader lädt auch Packages, die
in einer config- oder ini-Datei angegeben sind, mit der Methode LoadPackage. Dies ermöglicht das dynamische Laden von
Treibern, die in keiner uses-Klausel in den Units der Anwendung angegeben sind. Beachten Sie bitte, dass die Methode
LoadPackage nur für Anwendungen eingesetzt werden kann, die für die Verwendung von Packages vorgesehen sind.
32
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
dbExpress Framework-Kompatibilität
Entwickler von dbExpress 4-Treibern sollten den Abschnitt "initialization" der Units DBXDynalink und DBXTrace im mit
dbExpress ausgelieferten Quelltext studieren. Diese Abschnitte registrieren sich selbst mit einer Singleton-Unit namens
ClassRegistry. ClassRegistry wird von den dbExpress 4-Treiberladern zum Instantiieren der Treiberladeklassen anhand des
Namens (ein String) verwendet. ClassRegistry ist ein einfacher, schmaler Mechanismus zum Registrieren und Instantiieren einer
Klasse über ihren Namen.
DBXDynalink-Treiber
DBXDynalink wird für vorhandene dbExpress 3-Treiber und für neue Treiber verwendet. Es wird als natives Delphi-Package
oder als verwaltete .NET-Assemblierung compiliert. DBXDynalink lädt native dbExpress-Treiber, die ein primitiveres "natives"
Interface namens DBXExports implementieren. Das Interface DBXExports ist eine kleine Sammlung von "linearen"
Exportmethoden. Der Quelltext von DBXExports ist in dbExpress enthalten. DBXExports stellt eine strenger typisierte API als
das COM-basierte Interface von dbExpress 3 bereit. Daher können Methoden zu zukünftigen Produktgenerationen hinzugefügt
werden, ohne dass die Kompatibilität mit älteren Implementierungen des DBXExports-Interface verloren geht.
DBXAdapter ist ein dbExpress 4-konformer Treiber, der das DBXExports-Interface an das ältere dbExpress 3 COM-Interface
adaptiert. Neuere native Treiber können durch direktes Implementieren von DBXExports geschrieben werden.
Weil das DBXExports-Interface für die Implementierung über eine native Sprache (Delphi oder C++) entwickelt wurde,
verwendet es eine primitivere Fehlerbehandlung, die nicht auf Exceptions basiert. DBXDynalink ordnet Fehlercodes einer
DBXCommon-Exception zu.
Die Unit DBXDynalink enthält einen dbExpress 4-Treiber. Dieser Treiber delegiert an Nicht-Delphi-Treiber, die das lineare
Export-Interface DBXDynalinkExport implementieren. DBXTrace ist ein Delegattreiber für die Ablaufverfolgung. Die
DbExpress-VCL verwendet DBXCommon, DBXDynalink und DbxTrace als "Standardtreiber". Dies kann jedoch für statisch
gelinkte Anwendungen geändert werden, ohne dass der dbExpress VCL-Quelltext (SQLExpr.pas) bearbeitet werden muss.
SQLExpr.pas verwendet die Unit DBXDefaultDrivers. Die Unit DBXDefaultDrivers enthält nur eine uses-Klausel. Die
uses-Klausel in DBXDefaultDrivers enthält DBXCommon, DBXDynalink und DBXTrace. DBXCommon muss immer verwendet
werden. Eine statisch gelinkte Anwendung kann aber DBXTrace entfernen und DBXDynalink durch einen anderen Treiber
ersetzen.
DBXDirect-Treiber
Ein DBXDirect-Treiber ist ein beliebiger Treiber, der durch Erweiterung der abstrakten DBXCommon-Basisklassen implementiert
wird. Diese Klassen sind für native Implementierungen in Delphi geschrieben. Für verwaltete Implementierungen können Sie in
jeder CLR-kompatiblen Sprache, wie z.B. Delphi, C# oder Visual Basic.NET, geschrieben werden.
Strenggenommen sind alle DBX-Framework-Treiber eine Form von DBXDirect-Treiber. DBXDynalink und DBXRemote stellen
jedoch eine "indirektere" Bindung an Treiberimplementierungen bereit.
Siehe auch
Kompatibilität mit dem dbExpress Datenbanktreiber-Framework (
see page 34)
dbExpress-Datenbankanwendungen weitergeben
1.1.12 dbExpress Framework-Kompatibilität
Teile der dbExpress-Software, die vor dem Erscheinen des dbExpress-Treiber-Framework (DBX-Treiber-Framework) entwickelt
wurden, mussten für die Zusammenarbeit mit dem DBX-Treiber-Framework verändert werden. Dies hat zu einigen
Kompatibilitätsproblemen geführt.
Allgemein
dbExpress 2.5-Treiber können nicht mit dem DBX-Framework verwendet werden.
33
1
Einführung in InterBase Express
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
Das dbExpress-Framework bietet keine 100% Kompatibilität mit dbExpress 3.
dbExpress 3-Treiber können mit dem DBX-Framework verwendet werden. Der Treiberlademechanismus des DBX-Framework
erkennt dbExpress 3-Treiber automatisch und passt mithilfe des DBXAdapter-Treibers (dbxadapter30.dll) einen dbExpress
3-Treiber an einen dbExpress 4-Treiber an.
Im Folgenden finden Sie eine Liste der bekannten Kompatibilitätsprobleme:
• Statische Treiberbindung. dbExpress-Treiber können nicht statisch in eine ausführbare Datei gelinkt werden.
• SqlExpr.TSQLConnection stellte eine geschützten Zugriff auf das Connection-Member bereit, das nur in der nativen Version
von SqlExpr.pas den Typ TISQLConnection hatte. Diese wurde in der verwalteten Version wegen der Komplexität
weggelassen, mit der PInvoke in der verwalteten Version der dbExpress VCL verwendet wurde. SqlExpr.TSQLConnection
stellt nun stattdessen einen geschützten Zugriff auf TDBXConnection bereit. Auf diese geschützte Verbindung können native
und verwaltete Anwendungen zugreifen.
1
• Das Ereignis für die Ablaufüberwachung ist leicht verändert, weil es auf dem DBX-Treiber-Framework basiert.
• Der DBXAdapter-Treiber kann dbExpress 3-Treiber an dbExpress 4 anpassen, aber keine dbExpress 2.5-Treiber.
VCL-Probleme
Die meisten Anwendungen, die dbExpress VCL-Komponenten verwenden, können mit dieser Modifikation arbeiten. Es gibt
jedoch einige lokalisierte Änderungen an VCL-Komponenten, weil die VCL jetzt mit dem mehr objektorientierten
DBX-Treiber-Framework anstatt mit dem C-ähnlichen COM-basierten dbExpress 3-Treiber-Interface interagiert.
Außerdem wurde die API für zwei VCL-Komponenten leicht verändert: TSQLConnection und TSQLDataSet. Es wurden auch
einige Datenstrukturen verändert. In Folgenden finden Sie eine Zusammenfassung der API-Änderungen.
Anmerkung: Wegen der API-Änderungen müssen Sie die mit dem Produkt ausgelieferte Unit SqlExpr.pas neu compilieren. Die
Unit DBXpress wird nicht mehr verwendet.
• TSQLConnection. Anstatt der Methode Commit wird nun die neue Methode CommitFreeAndNil verwendet. Anstatt der
Methode Rollback werden nun die neuen Methoden RollbackFreeAndNil und RollbackIncompleteFreeAndNil verwendet. Die
Methode SetTraceCallbackEvent wurde durch SetTraceEvent ersetzt. Anstatt der Methode StartTransaction wird nun die
neue Methode BeginTransaction verwendet. Die Eigenschaft MetaData enthält eine Instanz der neuen Klasse
TDBXDatabaseMetaData anstelle von TISQLMetaData. Die Eigenschaft SQLConnection wurde durch DBXConnection
ersetzt, die eine Instanz der neuen Klasse TDBXConnection enthält. Die Eigenschaft TraceCallbackEvent enthält nun ein
TDBXTraceEvent.
• TSQLDataSet. Die neue Eigenschaft DbxCommandType wurde hinzugefügt. Sie enthält einen der Konstanten-Strings aus der
Klasse TDBXCommandTypes.
• Datenstrukturen. TTransactionItem wurde durch die neue Klasse TDBXTransaction ersetzt. TSQLDriverOption,
TSQLConnectionOption, TSQLCommandOption, TSQLCursorOption, TSQLMetaDataOption und TSQLObjectType sind
veraltet. TSTMTParamType wurde durch die Klasse TDBXParameterDirections ersetzt. TSQLTraceFlag wurde durch
TDBXTraceFlags ersetzt. SQLTRACEDesc wurde durch TDBXTraceInfo ersetzt.
Siehe auch
dbExpress-Framework
Deployment des dbExpress-Framework
1.1.13 Einführung in InterBase Express
InterBase Express (IBX) besteht aus Komponenten, mit denen auf die Daten von InterBase-Datenbanken zugegriffen werden
kann. Die InterBase-Verwaltungskomponenten, für die InterBase 6 erforderlich ist, werden nach den
InterBase-Datenzugriffskomponenten beschrieben.
34
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Einführung in InterBase Express
IBX-Komponenten
Die folgenden Komponenten befinden sich auf der Registerkarte InterBase der Komponentenpalette.
Symbol
Komponentenname Beschreibung
TIBTable
Eine Datenmengenkomponente, die eine Datenbanktabelle kapselt.
TIBQuery
Mit dieser Komponente
ausgeführt werden.
TIBStoredProc
Diese Komponente kapselt eine Stored Procedure auf einem
Datenbankserver.
TIBDatabase
Diese Komponente kapselt eine InterBase-Datenbankverbindung.
TIBTransaction
Diese Komponente ermöglicht die Transaktionssteuerung bei einer
oder
mehreren
Datenbankverbindungen
in
einer
Datenbankanwendung.
TIBUpdateSQL
Diese Komponente stellt ein Objekt für die Aktualisierung von
schreibgeschützten
Datenmengen
bereit,
wenn
das
Zwischenspeichern von Aktualisierungen aktiviert ist.
TIBDataSet
Diese Komponente führt InterBase-SQL-Anweisungen aus.
TIBSQL
Mit dieser Komponente kann eine InterBase-SQL-Anweisung mit
minimalem Overhead ausgeführt werden.
TIBDatabaseInfo
Dieses Komponente dient zum Abrufen von Informationen über die
verknüpfte Datenbank.
TIBSQLMonitor
Mit dieser Komponente können die an den InterBase-Server
übergebenen dynamischen SQL-Anweisungen überwacht werden.
TIBExtract
Diese Komponente ruft Metadaten von einem InterBase-Server ab.
TIBCustomDataSet
Dies ist die Basisklasse für alle Datenmengen, die mit InterBase
Express abgerufene Daten repräsentieren.
kann
eine
InterBase-SQL-Anweisung
Trotz ähnlicher Namen bestehen gewisse Unterschiede zwischen BDE- und IBX-Komponenten. In den folgenden Abschnitten
werden diese Unterschiede erläutert.
Die Migration von BDE- zu IBX-Anwendungen ist mit einem gewissen Aufwand verbunden. Sie müssen die BDE-Komponenten
durch entsprechende IBX-Komponenten ersetzen und danach die Anwendung neu compilieren. Der zusätzliche
Migrationsaufwand wird jedoch durch die höhere Ausführungsgeschwindigkeit und den Zugriff auf die leistungsstarken
InterBase-Funktionen ausgeglichen.
IBDatabase
Mit der TIBDatabase-Komponente werden Verbindungen zu Datenbanken eingerichtet, die eine gleichzeitige Abwicklung
mehrerer Transaktionen unterstützen. Im Gegensatz zur BDE verfügt IBX über eine gesonderte Transaktionskomponente, die
eine getrennte Verwaltung von Transaktionen und Datenbankverbindungen ermöglicht.
So richten Sie eine Datenbankverbindung ein:
1. Ziehen Sie eine IBDatabase-Komponente in ein Formular oder Datenmodul.
2. Legen Sie die Eigenschaft DatabaseName fest. Bei lokalen Verbindungen ist dies das Laufwerk, die Pfadangabe und der
Dateiname der Datenbankdatei. Setzen Sie die Eigenschaft Connected auf True.
3. Geben Sie eine gültigen Benutzernamen und ein Passwort ein, und klicken Sie auf OK, um die Verbindung zur Datenbank
herzustellen.
Warnung: Benutzername und Passwort können in der Eigenschaft Params der IBDatabase-Komponente gespeichert
werden. Setzen Sie dazu die Eigenschaft LoginPrompt nach dem Anmelden auf False. Wenn Sie sich beispielsweise als
35
1
Einführung in InterBase Express
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
Systemadministrator anmelden und LoginPrompt auf False setzen, könnte die Eigenschaft Params Folgendes enthalten:
user_name=sysdba
password=masterkey
IBTransaction
Im Gegensatz zur Borland Database Engine steuert IBX Transaktionen mit einer speziellen Komponente namens
TIBTransaction. Damit haben Sie die Möglichkeit, Transaktionen und Datenbankverbindungen getrennt zu verwalten und den
Zweiphasen-Mechanismus von InterBase für das Eintragen zu verwenden (Transaktionen können mehrere Verbindungen
umfassen). Außerdem können mehrere gleichzeitige Transaktionen über eine Verbindung ausgeführt werden.
Verwenden Sie für einen Transaktionskontext, in dem möglicherweise mehrere Datenbankverbindungen genutzt werden, eine
IBTransaction-Komponente. In der Regel kann aber das Modell "Eine Datenbank/Eine Transaktion" verwendet werden.
1
So richten Sie eine Transaktion ein:
1. Richten Sie eine IBDatabase-Verbindung wie oben beschrieben ein.
2. Ziehen Sie eine IBTransaction-Komponente in das Formular oder Datenmodul.
3. Weisen Sie der Eigenschaft DefaultDatabase den Namen der IBDatabase-Komponente zu.
4. Setzen Sie die Eigenschaft Active auf True, um die Transaktion zu starten.
IBX-Datenmengenkomponenten
Sie haben die Wahl zwischen verschiedenen IBX-Datenmengenkomponenten, die jeweils auf einen bestimmten Einsatzzweck
zugeschnitten sind:
IBTable
Mit Hilfe einer TIBTable-Komponente können Sie eine Live-Datenmenge für eine Tabelle oder Ansicht einrichten, ohne
SQL-Anweisungen eingeben zu müssen.
IBTable-Komponenten lassen sich sehr einfach konfigurieren:
1. Ziehen Sie eine IBTable-Komponente in das Formular oder Datenmodul.
2. Bestimmen Sie die zugehörigen Datenbank- und Transaktionskomponenten.
3. Wählen Sie in der Dropdown-Liste mit den Tabellennamen den Namen der Beziehung aus.
4. Setzen Sie dann die Eigenschaft Active auf True.
IBQuery
Mit Hilfe einer TIBQuery-Komponente können Sie eine InterBase-DSQL-Anweisung ausführen, die Ergebnismenge auf
bestimmte Spalten und Zeilen beschränken, Aggregatfunktionen verwenden und mehrere Tabellen miteinander verbinden.
IBQuery-Komponenten stellen eine schreibgeschützte Datenmenge bereit und fügen sich ideal in die Client-/Server-Umgebung
von InterBase ein. So richten Sie eine IBQuery-Komponente ein:
1. Richten Sie eine IBDatabase-Verbindung wie oben beschrieben ein.
2. Richten Sie eine IBTransaction-Verbindung wie oben beschrieben ein.
3. Ziehen Sie eine IBQuery-Komponente in das Formular oder Datenmodul.
4. Bestimmen Sie die zugehörigen Datenbank- und Transaktionskomponenten.
5. Geben Sie im Stringlisten-Editor eine gültige SQL-Anweisung für die Eigenschaft SQL der IBQuery-Komponente ein.
6. Setzen Sie die Eigenschaft Active auf True.
IBDataSet
Mit Hilfe einer TIBDataSet-Komponente können Sie eine InterBase-DSQL-Anweisung ausführen, die Ergebnismenge auf
bestimmte Spalten und Zeilen beschränken, Aggregatfunktionen verwenden und mehrere Tabellen miteinander verbinden.
IBDataSet-Komponenten funktionieren ähnlich wie IBQuery-Komponenten, unterstützen aber Live-Datenmengen auch ohne
36
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Einführung in InterBase Express
Verwendung einer IBUpdateSQL-Komponente.
Mit den folgenden Schritten erhalten Sie eine Live-Datenmenge für die Tabelle COUNTRY in employee.gdb:
1. Richten Sie eine IBDatabase-Verbindung wie oben beschrieben ein.
2. Bestimmen Sie die zugehörigen Datenbank- und Transaktionskomponenten.
3. Ziehen Sie eine IBDataSet-Komponente in das Formular oder Datenmodul.
4. Geben Sie SQL-Anweisungen für die folgenden Eigenschaften ein: SelectSQL, RefreshSQL, ModifySQL, DeleteSQL,
InsertSQL. Beispiele für SQL-Anweisungen finden Sie in der folgenden Tabelle.
5. Setzen Sie dann die Eigenschaft Active auf True.
Beispiele für SQL-Anweisungen
Eigenschaft
SQL-Anweisung
SelectSQL
SELECT Country, Currency FROM Country
RefreshSQL
SELECT Country, Currency FROM Country WHERE Country = :Country
ModifySQL
UPDATE Country SET Country = :Country, Currency = :Currency WHERE Country =
:Old_Country
DeleteSQL
DELETE FROM Country WHERE Country = :Old_Country
InsertSQL
INSERT INTO Country (Country, Currency) VALUES (:Country, :Currency)
1
Anmerkung: Im Dialekt 3 wird bei Parametern und Feldern, die an Funktionen übergeben werden, zwischen Groß- und
Kleinschreibung unterschieden. Beispielsweise liefert die Anweisung
FieldByName(EmpNo)
im Dialekt 3 kein Ergebnis, wenn das Feld "EMPNO" lautet.
IBStoredProc
TIBStoredProc-Komponenten werden für ausführbare InterBase-Prozeduren verwendet. Diese liefern maximal eine Zeile mit
Daten. Verwenden Sie für Stored Procedures, die mehrere Datenzeilen zurückgeben, und für "Select"-Prozeduren entweder
eine IBQuery- oder eine IBDataSet-Komponente.
IBSQL
Verwenden Sie TIBSQL-Komponenten für kompakte Datenoperationen, die schnell ausgeführt werden. Hierzu gehört
beispielsweise die Datendefinition und das Übertragen von Daten von einer Datenbank in eine andere.
Folgendermaßen können Sie mit einer IBSQL-Komponente den nächsten Wert von einem Generator abrufen:
1. Richten Sie eine IBDatabase-Verbindung wie oben beschrieben ein.
2. Ziehen Sie eine IBSQL-Komponente in das Formular oder Datenmodul, und weisen Sie ihrer Database-Eigenschaft den
Namen der Datenbank zu.
3. Verfassen Sie im Stringlisten-Editor eine SQL-Anweisung für die Eigenschaft SQL, z.B.:
SELECT GEN_ID(MyGenerator, 1) FROM RDB$DATABASE
IBUpdateSQL
TIBUpdateSQL-Komponenten werden verwendet, um schreibgeschützte Datenmengen zu aktualisieren. Sie können
beispielsweise die Ausgabe einer IBQuery-Komponente mit Hilfe einer IBUpdateSQL-Komponente aktualisieren:
1. Richten Sie eine IBQuery-Komponente wie oben beschrieben ein.
2. Ziehen Sie eine IBUpdateSQL-Komponente in das Formular oder Datenmodul.
37
Einführung in InterBase Express
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
3. Geben Sie SQL-Anweisungen für die folgenden Eigenschaften ein: DeleteSQL, InsertSQL, ModifySQL und RefreshSQL.
4. Weisen Sie der Eigenschaft UpdateObject der IBQuery-Komponente den Namen der IBUpdateSQL-Komponente zu.
5. Setzen Sie die Eigenschaft Active der IBQuery-Komponente auf True.
TIBSQLMonitor
Verwenden Sie eine TIBSQLMonitor-Komponente zur Entwicklung von Diagnose-Tools, mit denen die Kommunikation zwischen
der Anwendung und dem InterBase-Server überwacht wird. Wenn die TraceFlag-Eigenschaften einer
IBDatabase-Komponente aktiviert sind, können aktive IBSQLMonitor-Komponenten die Aktivitäten der Verbindung
protokollieren und die Ausgabe an eine Datei oder ein Steuerelement senden.
Sie können beispielsweise eine separate Anwendung erstellen, die über eine IBSQLMonitor-Komponente und ein Memofeld
verfügt. Starten Sie diese Sekundäranwendung, und aktivieren Sie für die Primäranwendung die TraceFlag-Eigenschaften der
IBDatabase-Komponente. Führen Sie danach in der Primäranwendung einige Aktionen aus, und beobachten Sie, wie das
Memofeld der Sekundäranwendung mit Daten gefüllt wird.
1
IBDatabaseInfo
Mit Hilfe einer TIBDatabaseInfo-Komponente können Sie Informationen über eine Datenbank abrufen (z.B. das Sweep-Intervall,
die ODS-Version und die Namen der Benutzer, die gegenwärtig auf die Datenbank zugreifen).
Folgendermaßen richten Sie eine IBDatabaseInfo-Komponente für die Anzeige der Benutzer ein, die aktuell mit der Datenbank
verbunden sind:
1. Richten Sie eine IBDatabase-Verbindung wie oben beschrieben ein.
2. Ziehen Sie eine IBDatabaseInfo-Komponente in das Formular oder Datenmodul, und weisen Sie ihrer Database-Eigenschaft
den Namen der Datenbank zu.
3. Fügen Sie eine Memo-Komponente in das Formular ein.
4. Ziehen Sie eine Timer-Komponente in das Formular, und legen Sie das Intervall fest.
5. Doppelklicken Sie auf das Feld für das OnTimer-Ereignis des Timers, und geben Sie folgenden (oder einen ähnlichen) Code
ein:
Memo1.Text := IBDatabaseInfo.UserNames.Text;
//
Memo1->Text = IBDatabaseInfo->UserNames->Text; //
Delphi-Beispiel
C++ Beispiel
IBEvents
Mit Hilfe einer IBEvents-Komponente kann eine Anwendung Ereignisse eines InterBase-Servers empfangen und asynchron
behandeln.
So richten Sie eine IBEvents-Komponente ein:
1. Richten Sie eine IBDatabase-Verbindung wie oben beschrieben ein.
2. Ziehen Sie eine IBEvents-Komponente in das Formular oder Datenmodul, und weisen Sie ihrer Database-Eigenschaft den
Namen der Datenbank zu.
3. Definieren Sie im Stringlisten-Editor Ereignisse für die Eigenschaft Events, z.B.:
IBEvents.Events.Add('EVENT_NAME'); (für Delphi) oder IBEvents->Events->Add("EVENT_NAME"); (für C++).
4. Setzen Sie die dann Eigenschaft Registered auf True.
InterBase-Verwaltungskomponenten
Wenn InterBase 6 installiert ist, können Sie mit den Komponenten von InterBase 6 Administration die leistungsstarken
API-Aufrufe von InterBase Services verwenden.
Die Registerkarte InterBase Admin der IDE enthält folgende Komponenten:
TIBConfigService
TIBBackupService
TIBRestoreService
38
1.1 Datenbankanwendungen mit ADO.NET
RAD Studio für .NET
Einführung in InterBase Express
TIBValidationService
TIBStatisticalService
TIBLogService
TIBSecurityService
TIBLicensingService
TIBServerProperties
TIBInstall
TIBUnInstall
1
Anmerkung: Diese Funktionen stehen nur zur Verfügung, wenn InterBase 6 installiert ist.
IBConfigService
Verwenden Sie TIBConfigService-Objekte zur Konfiguration von Datenbankparametern wie Seitenpuffer, Asynchron-Modus,
Reservespeicher oder Sweep-Intervall.
IBBackupService
Mit Hilfe eines TIBBackupService-Objekts können Sie die Datenbank sichern. IBBackupService-Objekte ermöglichen die
Angabe verschiedener Parameter. Sie können beispielsweise einen Blockierungsfaktor, den Namen der Sicherungsdatei und
verschiedene Sicherungsoptionen angeben.
IBRestoreService
TIBRestoreService-Objekte werden zur Wiederherstellung von Datenbanken eingesetzt. Sie können verschiedene Parameter
angeben, z.B. Seitenpuffer, Seitengröße und Wiederherstellungsoptionen.
IBValidationService
Mit Hilfe eines TIBValidationService-Objekts können Sie eine Datenbank validieren und Datenbanktransaktionen abstimmen.
Das IBValidationService-Objekt unterstützt die Angabe einer Standardaktion für die Transaktion, die Rückgabe von
Informationen zum Status der Transaktion und weitere Optionen zur Datenbankvalidierung.
IBStatisticalService
TIBStatisticalService-Objekte dienen zur Anzeige von Datenbankinformationen wie Datenseiten, Datenbankprotokoll,
Header-Seiten, Indexseiten und Systembeziehungen.
IBLogService
TIBLogService-Objekte werden zur Erstellung von Protokolldateien eingesetzt.
IBSecurityService
TIBSecurityService-Objekte dienen zur Verwaltung des Benutzerzugriffs auf den InterBase-Server. Sie können mit Hilfe eines
IBSecurityService-Objekts Benutzerkonten erstellen, ändern und löschen, alle Benutzer anzeigen und (mit SQL-Rollen)
Arbeitsgruppen einrichten.
IBLicensingService
TIBLicensingService-Komponenten werden verwendet, um Software-Aktivierungszertifikate für InterBase hinzuzufügen oder zu
entfernen.
IBServerProperties
Mit
Hilfe
einer
TIBServerProperties-Komponente
können
Informationen
zum
Datenbankserver
abgerufen
werden
39
Einführung in InterBase Express
RAD Studio für .NET
1.1 Datenbankanwendungen mit ADO.NET
(Konfigurationsparameter, Versions- und Lizenzinformationen usw.).
IBInstall
TIBInstall-Komponenten dienen zum Einrichten von InterBase-Installationen. Sie können das Quell- und das Zielverzeichnis für
die Installation sowie die zu installierenden Komponenten festlegen.
IBUnInstall
Ein TIBUnInstall-Objekt wird zur Konfiguration einer Deinstallationskomponente eingesetzt.
1
40
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
COM Interop in verwalteten Anwendungen
1.2 Anwendungen mit nicht verwaltetem Code
entwickeln
RAD Studio stellt Funktionen zur Unterstützung von nicht verwaltetem Quelltext in .NET bereit.
Sollen vorhandene COM- oder ActiveX-Komponenten im .NET Framework verwendet werden, können Sie bei der Erstellung
Ihrer Anwendungen auf die .NET COM Interop-Funktionen in RAD Studio zurückgreifen.
1
Themen
Name
Beschreibung
COM Interop in verwalteten Anwendungen (
DrInterop verwenden (
see page 41)
see page 46)
Das Befehlszeilenprogramm drinterop überprüft eine Assemblierung und
generiert Diagnosemeldungen, die bei der Vorbereitung der Assemblierung für
die Verwendung mit COM/Interop hilfreich sind.
Das Programm drinterop befindet sich im Unterverzeichnis bin des
Installationsverzeichnisses. Es wird mit folgendem Befehl aufgerufen:
Deployment von COM Interop-Anwendungen (
Platform Invoke mit Delphi für .NET verwenden (
Interfaces für virtuelle Bibliotheken (
COM Interop ist ein .NET-Service, der ein nahtloses Zusammenspiel zwischen
verwaltetem und nicht verwaltetem Code ermöglicht. Der Service COM Interop ist
mit einer zweiseitig befahrbaren Brücke vergleichbar: Das heißt, Sie können
sowohl vorhandene COM-Server und ActiveX-Elemente in neue
.NET-Anwendungen integrieren, als auch .NET-Komponenten in vorhandene,
nicht verwaltete Anwendungen übernehmen.
In der RAD Studio-IDE stehen Tools zur Verfügung, die Sie bei der Integration
vorhandener COM-Server und ActiveX-Elemente in verwaltete Anwendungen
unterstützen. In der IDE lassen sich Referenzen zu nicht verwalteten DLLs in Ihr
Projekt einfügen. Dann können Sie, wie bei verwalteten Assemblierungen, nach
den darin enthaltenen Typen suchen. ActiveX-Elemente lassen sich... more (
see page 41)
see page 47)
see page 48)
see page 56)
Bei der Arbeit mit nicht verwalteten Komponenten gilt es, zwei Punkte nicht aus
den Augen zu verlieren: Erstens, beachten Sie grundsätzlich, dass eine
Interop-Assemblierung kein wirklicher Ersatz für den COM-Server ist, sondern
sein Stellvertreter oder Proxy. Die von tlbimp und RAD Studio generierten
Interop-Assemblierungen transformieren den nicht verwalteten Code einer
Komponente in keinster Weise in verwalteten Code. Alle Dateien, die für eine
Komponente in einer nicht verwalteten Deployment-Umgebung erforderlich sind,
müssen zusätzlich zu den Interop-Assemblierungen auch in einer verwalteten
Umgebung weitergegeben werden. Zweitens bieten die Interop Services des
.NET Framework keine Umgehungsmöglichkeit für die Registrierung des
COM-Servers auf dem Computer... more ( see page 47)
In diesem Thema werden die grundlegenden Techniken zur Verwendung nicht
verwalteter APIs erläutert. Außerdem wird auf einige der üblichen Fehlerquellen
hingewiesen. Eine Schnellübersicht für die Übersetzung von Delphi-Datentypen
wird ebenfalls angeboten. Dieses Thema kann nicht die gesamten Grundlagen
von Platform Invoke oder des Marshaling von Daten beschreiben. In den Links
am Ende dieses Themas finden Sie weitere Informationen zu Platform Invoke
und Marshaling. Zum besseren Verständnis dieses Dokuments sollten Sie
wissen, was Attribute sind und wie sie verwendet werden.
In mehreren Beispielen wird die Win32-API benutzt. Detaillierte Informationen zu
den erwähnten API-Funktionen finden Sie in der Dokumentation zum Windows
Platform... more ( see page 48)
In diesem Thema wird erläutert, wie Sie das Delphi-Feature Interfaces für
virtuelle Bibliotheken verwenden. Interfaces für virtuelle Bibliotheken ermöglicht
es, nicht verwalteten Code ohne Verwendung das Attributs DllImport zur
Laufzeit zu suchen, zu laden und aufzurufen.
1.2.1 COM Interop in verwalteten Anwendungen
COM Interop ist ein .NET-Service, der ein nahtloses Zusammenspiel zwischen verwaltetem und nicht verwaltetem Code
ermöglicht. Der Service COM Interop ist mit einer zweiseitig befahrbaren Brücke vergleichbar: Das heißt, Sie können sowohl
41
COM Interop in verwalteten Anwendungen
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
vorhandene COM-Server und ActiveX-Elemente in neue .NET-Anwendungen integrieren, als auch .NET-Komponenten in
vorhandene, nicht verwaltete Anwendungen übernehmen.
In der RAD Studio-IDE stehen Tools zur Verfügung, die Sie bei der Integration vorhandener COM-Server und ActiveX-Elemente
in verwaltete Anwendungen unterstützen. In der IDE lassen sich Referenzen zu nicht verwalteten DLLs in Ihr Projekt einfügen.
Dann können Sie, wie bei verwalteten Assemblierungen, nach den darin enthaltenen Typen suchen. ActiveX-Elemente lassen
sich der Tool-Palette hinzufügen und von dort wie jede andere .NET-Komponente in Formulare einfügen.
In dieser Übersicht werden folgende Themen erläutert:
• Einführung in die Terminologie von COM Interop. Wenn Ihnen diese Konzepte bereits bekannt sind, können Sie direkt mit den
Abschnitten zu den IDE-Features und Tools von RAD Studio für COM Interop fortfahren.
• Relevante Tools des .NET Framework SDK für die Arbeit mit COM Interop.
1
• Verwendung von COM Interop-Assemblierungen in der IDE.
Überblick zu COM Interop
Die nahtlose Zusammenarbeit wird durch Stellvertreterobjekte namens Runtime Callable Wrappers (RCW) ermöglicht. Ein RCW
bildet eine eigene Kommunikationsschicht zwischen Ihrer verwalteten Anwendung und dem aktuell nicht verwalteten
COM-Server.
Terminologie von COM Interop
Das .NET Framework besteht aus zahlreichen Fachbegriffen und Akronymen. Dieser Abschnitt soll dabei helfen, die
Terminologie in den Dokumentationen zu COM Interop zu verstehen.
Metadaten
Der Begriff "Metadaten" bezeichnet im Zusammenhang mit .NET und COM im Wesentlichen Typinformationen. In COM können
Typinformationen auf verschiedene Arten gespeichert sein. Zum Beispiel ist eine Headerdatei in C++ ein sprachspezifischer
Container für Typinformationen. Eine Typbibliothek ist ebenfalls ein Container für Typinformationen. Da Bibliotheken jedoch ein
Binärformat aufweisen, sind sie in Bezug auf die Programmiersprache neutral. Anders als bei der COM-Entwicklung, bei der
keine Typbibliotheken erforderlich sind, müssen für alle .NET-Assemblierungen sprachneutrale Metadaten bereitgestellt werden.
Jede Assemblierung ist selbstbeschreibend, d.h. ihre Metadaten enthalten die kompletten Typinformationen, einschließlich der
private deklarierten Typen und Klassenelemente.
Benutzerdefinierte Attribute
Entwickler zeichnen Programmentitäten (wie Klassen und ihre Methoden) häufig mit beschreibenden Attributen aus, wie zum
Beispiel static, private, protected und public. Im .NET-Framework können Sie jede Entität, einschließlich Klassen,
Eigenschaften, Methoden und Assemblierungen, mit einem selbst definierten Attribut und eigener Bedeutung auszeichnen.
Benutzerdefinierte Attribute werden im Quelltext formuliert und vom Compiler verarbeitet. Am Ende des Build-Vorgangs werden
benutzerdefinierte Attribute wie alle anderen Metadaten an die Output-Assemblierung ausgegeben.
Reflexion
Es ist ein charakteristisches Merkmal des .NET Framework, dass Typinformationen während der Compilierung nicht verloren
gehen. Stattdessen werden alle Metadaten, einschließlich benutzerdefinierter Attribute, vom Compiler in die endgültige
Output-Assemblierung ausgegeben. Die Metadaten stehen durch die .NET Reflexions-Services zur Laufzeit zur Verfügung. Das
.NET Framework SDK enthält ein Reflexions-Tool namens ildasm. Damit können Entwickler jede .NET-Assemblierung öffnen
42
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
COM Interop in verwalteten Anwendungen
und die darin deklarierten Typen inspizieren. Reflexions-Tools bieten Programmierern die Möglichkeit, eine direkte Darstellung
des IL-Codes, der vom Compiler generiert wird, zu erzeugen. In der IDE von RAD Studio ist ein eigenes integriertes
Reflexions-Tool enthalten: der Metadaten-Explorer wird angezeigt, sobald Sie eine .NET-Assemblierung öffnen.
Globaler Assemblierungs-Cache
In COM können Komponenten an eine beliebige Position auf dem Computer des Benutzers weitergegeben werden. Ein
Installationsscript der Komponente zeichnet deren Position in der Systemregistrierung auf. Befehlszeilen-Tools wie regsvr32 und
tregsvr können COM-Komponenten auch in die Registrierung einfügen oder daraus entfernen. Die Registrierung der
Komponenten ist in der COM-Programmierung erforderlich, auch wenn die Komponenten nicht von mehreren Anwendungen
gemeinsam genutzt werden sollen.
Das Modell der .NET-Programmierung sieht eine drastische Vereinfachung des Deployment von Anwendungen und
Komponenten vor. Das Deployment von nicht gemeinsam genutzten Komponenten erfolgt auf der .NET-Plattform direkt im
lokalen Installationsverzeichnis der Anwendung, und es ist keine Registrierung erforderlich. Eine nicht gemeinsam genutzte
Komponente kann alternativ auch in das Verzeichnis weitergegeben werden, in dem sich die Konfigurationsdatei der
Anwendung befindet. Auch hierfür ist beim Deployment keine Registrierung erforderlich.
Gemeinsame Komponenten werden an einer bestimmten Position, dem so genannten Globalen Assemblierungs-Cache (GAC)
installiert. Der GAC ist eine Weiterentwicklung der Systemregistrierung (auch wenn es sich dabei um einen vollkommen
getrennten Mechanismus handelt, der in keinster Weise mit der Registrierung verbunden ist). Der GAC befindet sich im
Dateisystem im Ordner \WINDOWS\ASSEMBLY. Das .NET Framework unterstützt das simultane Deployment verschiedener
Versionen derselben Komponente. Wenn Sie den Globalen Assemblierungs-Cache im Windows Explorer öffnen, sehen Sie den
Inhalt des GAC durch eine spezielle Oberflächenerweiterung. In dieser Darstellungsform werden alle im GAC installierten
Assemblierungen mit ihren Versions-, Kultur- und öffentlichen Schlüsselinformationen aufgeführt.
Es gibt drei Möglichkeiten, eine .NET-Komponente im GAC zu installieren. Sie können dazu das Befehlszeilen-Tool des
Framework SDK mit dem Namen gacutil verwenden, das nachstehend erläutert wird. Die zweite Möglichkeit eine
Komponente im GAC zu installieren besteht darin, den Ordner \WINDOWS\ASSEMBLY im Windows Explorer zu öffnen und
dann die Assemblierung direkt mit der Maus in das Verzeichnis zu ziehen. Und drittens können Sie dazu das .NET-Tool zur
Verwaltung der Konfiguration verwenden, das in der Systemsteuerung von Windows zur Verfügung steht.
Starke Namen
Das Konzept der starken Namen ist dem des 128-Bit-GUID (Globally Unique Identifier) in der COM-Programmierung sehr
ähnlich. Ein GUID ist ein Name, der weltweit garantiert einmalig ist. Jede .NET-Assemblierung hat einen Basisnamen, der aus
einem Text, einer Versionsnummer und Kulturinformationen (sofern vorhanden) besteht. Bei gemeinsam genutzten, im GAC
installierten Assemblierungen reicht der Basisname alleine nicht aus, um die einmalige Benennung einer Assemblierung zu
garantieren. Um einen weltweit einmaligen Namen zu erzeugen, wird eine Verschlüsselungstechnik mit öffentlichen und privaten
Komponenten dazu benutzt, eine digitale Signatur zu erstellen. Diese Signatur wird der Assemblierung dann entweder mit dem
.NET Framework SDK Assembly Linker (al.exe) oder über Assemblierungsattribute im Quelltext zugewiesen.
Runtime Callable Wrappers (zur Laufzeit aufrufbare Wrapper) und COM Callable Wrapper (unter COM aufrufbare Wrapper)
Der Zugriff auf eine Komponente, ob .NET-Komponente oder COM-Server, ist sehr transparent. Das heißt, wenn Sie einen
COM-Server in einer .NET-Anwendung verwenden, wird dieser ähnlich jeder anderen .NET-Komponente dargestellt. Genauso
wird auch jede .NET-Komponente in einer nicht verwalteten Anwendung mit Hilfe von COM Interop so dargestellt wie ein
COM-Server. Diese Transparenz wird durch Proxies oder Wrapper-Objekte hinter den Kulissen erzeugt.
Wenn Sie in einer verwalteten Anwendung ein COM-Objekt verwenden, erstellt die allgemeine Laufzeitumgebung (CLR) einen
RCW (Runtime Callable Wrapper), der als Schnittstelle zwischen verwaltetem und nicht verwaltetem Code dient. Die gesamte
komplexe Aufgabe des Daten-Marshaling und der Referenzzählung wird von dem RCW gehandhabt. Der RCW greift dafür nicht
einmal auf die Interfaces IUnknown und IDispatch zurück.
Wenn Sie eine .NET-Komponente in einer nicht verwalteten Anwendung benutzen, erzeugt das System einen Stellvertreter, den
so genannten COM Callable Wrapper (CCW).
43
1
COM Interop in verwalteten Anwendungen
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
Primäre Interop-Assemblierung
Sobald im Modell der COM-Programmierung einem Typ ein GUID zugewiesen ist, bezieht sich dieser immer auf jenen speziellen
Typ, unabhängig davon, wo der Typ auftritt. Zum Beispiel: Ein allgemeines Interface kann in vielen verschiedenen
Typbibliotheken definiert sein, aber jede einzelne Typbibliothek würde das Interface mit demselben GUID definieren, weshalb die
Duplizierung kein Problem ist. Wenn Sie jedoch COM-Interop-Assemblierungen für diese einzelnen Typbibliotheken erstellen,
würde für jede Typbibliothek eine neue und eindeutige Assemblierung angelegt. Jede dieser einzelnen Assemblierungen würde
dann (sofern es die allgemeine Laufzeitumgebung betrifft) eindeutige Typen enthalten. In diesem Fall wirkt sich also die starke
Identität und die selbstbeschreibende Natur der .NET-Assemblierungen negativ aus. Dies führt zu einem GAC, der mit
Interop-Assemblierungen überfüllt ist, die alle RCWs für dieselbe Typbibliothek enthalten. Besonders negativ für die allgemeine
Laufzeitumgebung ist dabei, dass jede Assemblierung eindeutige und inkompatible Typen enthält, denn jeder Typ hat einen
anderen starken Namen.
1
Um diese Auswüchse von Assemblierungen sowie die potenziellen Inkompatibilitäten von Typen zu vermeiden, steht im
Framework die Möglichkeit zur Verfügung, eine Assemblierung als primäre Interop-Assemblierung für eine Typbibliothek zu
definieren. Eine primäre Interop-Assemblierung ist immer mit einem starken Namen signiert, wofür der ursprüngliche Hersteller
der Typbibliothek zuständig ist.
COM Interop-Tools im .NET Framework SDK
Die Funktionalität der Tools des .NET Framework SDK ist zum Teil in der Entwicklungsumgebung zu finden. Dieser Abschnitt
soll keine komplette Referenz für diese Tools darstellen, sondern eher als Ausgangspunkt für weitere Erkundungen des .NET
Framework SDK dienen und Ihnen die Funktionsweise der COM-Interop-Technologie in der IDE näher bringen.
Import und Export von Typbibliotheken
Tlbimp ist ein Befehlszeilen-Tool mit dessen Hilfe sich .NET-Assemblierungen aus einer Typbibliothek erstellen lassen. Tlbimp
verwendet entweder direkt eine Typbibliothek oder eine nicht verwaltete DLL, die eine Typbibliothek als eingebettete Ressource
enthält. Beachten Sie, dass die mit dem Tool tlbimp erstellte Assemblierung nur den Quelltext für den RCW, nicht aber für das
ursprüngliche COM-Objekt selbst enthält. Aus diesem Grund müssen das Deployment und die Registrierung des COM-Objekts
dennoch auf dem Computer des Endanwenders erfolgen. Die Assemblierung enthält auch diejenigen Typen, die in der
Typbibliothek als Metadaten beschrieben sind. Das Tool Tlbimp bietet zusätzlich einen Befehlszeilenschalter für das Erstellen
einer primären Interop-Assemblierung.
Das .NET Framework SDK enthält ein weiteres Befehlszeilen-Tool mit dem Namen tlbexp, mit dessen Hilfe sich aus einer
.NET-Assemblierung eine Typbibliothek erstellen lässt. Eine solchermaßen exportierte Typbibliothek ließe sich dazu verwenden,
eine .NET-Komponente als COM-Server zur Verwendung in einer nicht verwalteten Anwendung bereitzustellen.
ActiveX-Elementbibliotheken importieren
Das Befehlszeilen-Tool Aximp generiert eine ActiveX-Element-Wrapper-Assemblierung. Diese Assemblierung ist notwendig,
damit das ActiveX-Element in einem Windows Form verwendet werden kann. Dazu ist ein spezielles Utility erforderlich, denn in
ein Windows Form können nur Steuerelemente eingefügt werden, die von der Klasse System.Windows.Forms.Control abgeleitet
sind, und das Utility tlbimp erstellt keinen von dieser Klasse abgeleiteten Wrapper.
Das Tool aximp erstellt beides, sowohl die Interop-Assemblierung (wie bei tlbimp umfasst dies auch die abhängigen
Assemblierungen) als auch die ActiveX-Wrapper-Assemblierung. Ebenso wie tlbimp verfügt auch aximp über
Befehlszeilenschalter, um die Assemblierungen mit einem starken Namen zu versehen. Anders als tlbimp kann das Tool
aximp jedoch keine primäre Interop-Assemblierung generieren.
Starke Namen generieren
Wenn Sie eine .NET-Komponente an den GAC weitergeben, müssen Sie der Assemblierung einen starken Namensschlüssel
zuweisen. Dies lässt sich mit dem Befehlszeilen-Tool sn des .NET Framework SDK ausführen. Einer Assemblierung kann mit
einer der drei folgenden Möglichkeiten ein starker Name zugewiesen werden:
44
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
COM Interop in verwalteten Anwendungen
• Sie geben die Schlüsseldatei des starken Namens in der Befehlszeile des Assemblierungs-Linker (al) an.
• Sie kennzeichnen die Assemblierung mit dem Attribut AssemblyKeyFile.
• Sie verwenden eine Technik, die als "verzögertes Signieren" bezeichnet wird.
Beim verzögerten Signieren wird die Assemblierung zum Zeitpunkt des Build mit dem öffentlichen Teil der Schlüsseldatei
signiert. Vor der Auslieferung der Assemblierung verwenden Sie dann das Tool sn dazu, die Assemblierung mit dem privaten
Schlüssel zu signieren.
Deployment einer .NET-Komponente in den globalen Assemblierungs-Cache
Das Utility gacutil des .NET Framework SDK ist ein Befehlszeilenprogramm, das sich zum Installieren, Entfernen und
Anzeigen von Komponenten im GAC verwenden lässt. Der Befehl gacutil kann sowohl von Installationsscripts als auch von
Batchdateien genutzt werden. Mit dem Befehl gacutil installieren und entfernen Sie gemeinsam genutzte Assemblierungen
mit und ohne Referenzzählung. Es empfiehlt sich, die Befehlsschalter für das Auslassen der Referenzzählung nur während der
Entwicklung zu verwenden. Installationsscripts, die gacutil für die Installation gemeinsamer Komponenten verwenden, sollten
grundsätzlich den Befehlszeilenschalter für eine Referenzzählung enthalten.
COM Interop-Assemblierungen in der IDE verwenden
Die gesamte Funktionalität, die durch die Befehlszeilen-Tools des .NET Framework SDK zur Verfügung steht, wird im Grunde
von der Klassenbibliothek des .NET Framework selbst bereitgestellt. Die IDE von RAD Studio nutzt die Klassen des .NET
Framework auch für die Funktionen der Interoperabilität (Interop). Dabei gehen die Möglichkeiten der IDE weit über jene der
Befehlszeilen-Tools hinaus und vereinfachen zusätzlich das Zusammenspiel mit nicht verwalteten Komponenten.
Typbibliotheken und Interop-Assemblierungen
In der IDE lassen sich Interop-Assemblierungen in der Projektverwaltung erstellen. Wenn Sie in ein Projekt eine Referenz zu
einer DLL einfügen, können Sie aus den registrierten Typbibliotheken und den nicht verwalteten DLLs auswählen oder nach
einer nicht registrierten Komponente suchen.
Die IDE erstellt für jede importierte Typbibliothek oder DLL eine eigene Interop-Assemblierung. Diese Assemblierungen tragen
den Namen Interop.LibraryName.DLL, wobei LibraryName der Name der Typbibliothek ist. Der Name der Bibliothek wird in der
Bibliotheksanweisung im IDL-Quelltext angegeben, weshalb sich der Dateiname der generierten Assemblierung von dem der
ursprünglichen DLL oder Typbibliothek unterscheiden kann. Jede Interop-Assemblierung (und alle zugehörigen
Assemblierungen) werden als referenzierte Assemblierungen in das Projekt eingefügt. Die in der Interop-Assemblierung
enthaltenen Typen werden in einen Namespace eingefügt, der denselben Namen wie die Typbibliothek hat. Auch dieser wird
wiederum von der Bibliotheksanweisung im IDL-Quelltext abgeleitet.
Wenn die referenzierte Assemblierung eine primäre Interop-Assemblierung besitzt, erkennt die IDE dies und erstellt keine neue
Interop-Assemblierung. In diesem Fall fügt die IDE eine Referenz zu der betreffenden primären Interop-Assemblierung in den
GAC ein. Die Assemblierung wird dann nicht in das lokale Projektverzeichnis kopiert.
ActiveX-Elemente importieren
Wenn Sie ein ActiveX-Element in Ihrer verwalteten Anwendung verwenden möchten, müssen Sie dieses zunächst in die
Tool-Palette einfügen. Dadurch wird sowohl eine Interop-Assemblierung als auch eine ActiveX-Assemblierung mit einer
Wrapperklasse erstellt, die von System.Windows.Forms.AxHost abgeleitet ist. Die ActiveX-Wrapper-Assemblierung erhält den
Namen AXINTEROP.LibraryName.DLL, wobei LibraryName der Name der Typbibliothek ist. Wenn Sie das ActiveX-Element
dann von der Tool-Palette in das Windows Form ziehen, werden automatisch die Referenzen zu beiden Assemblierungen in das
Projekt eingefügt.
Sobald es sich im Formular befindet, kann das ActiveX-Element wie jede andere .NET-Komponente behandelt werden. Sie
können das Element markieren und dessen Eigenschaften und Ereignisbehandlungsroutinen im Objektinspektor setzen. Der
ActiveX-Element-Wrapper stellt die Eigenschaften der Klasse Windows.Forms.Control bereit, während die Eigenschaften, die
von dem betreffenden ActiveX-Element bereitgestellt werden, in der Kategorie Sonstiges im Objektinspektor zu finden sind.
45
1
DrInterop verwenden
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
Interop-Assemblierungen und die Projektverwaltung
Interop-Assemblierungen (einschließlich ActiveX-Element-Wrapper-Assemblierungen), die von der IDE generiert wurden,
werden in einem separaten Ordner namens COMImports unterhalb des Projektordners aufbewahrt. Für jede generierte
Assemblierung ist die Eigenschaft Lokal kopieren gesetzt. Dies bedeutet, dass die Assemblierung beim Build eines Projekts in
den Ordner kopiert wird, in dem sich das endgültige Build des Projekts befindet. Lediglich die primären Interop-Assemblierungen
betrifft dies nicht, denn ihr Deployment findet im GAC statt. Wenn Sie eine Referenz zu einer primären Interop-Assemblierung
hinzufügen, kopiert die IDE die Assemblierung nicht in den Ordner COMImports. Die Assemblierung wird zwar in der
Projektverwaltung angezeigt, aber wenn Sie mit der rechten Maustaste darauf klicken, sehen Sie, dass die Einstellung Lokal
kopieren nicht aktiv ist.
Die Liste der referenzierten Assemblierungen (einschließlich derjenigen, die keine Interop-Assemblierungen sind) ist ein Attribut
des Projekts. Existiert der Ordner COMImports (oder eine der darin enthaltenen Interop-Assemblierungen) nicht, wenn Sie ein
Projekt öffnen, versucht die IDE diesen neu zu erstellen. Wenn die IDE eine Interop-Assemblierung nicht erstellen kann, ist diese
zwar dennoch als referenzierte Assemblierung in der Projektverwaltung aufgeführt, doch sie wird besonders hervorgehoben,
damit Sie wissen, dass die Assemblierung aktuell nicht auf dem Computer vorhanden bzw. nicht registriert ist.
1
Siehe auch
Referenzen zu einem COM-Server hinzufügen (
see page 150)
ActiveX-Steuerelemente zur Tool-Palette hinzufügen
Platform Invoke mit Delphi verwenden (
Interfaces für virtuelle Bibliotheken (
see page 48)
see page 56)
1.2.2 DrInterop verwenden
Das Befehlszeilenprogramm drinterop überprüft eine Assemblierung und generiert Diagnosemeldungen, die bei der
Vorbereitung der Assemblierung für die Verwendung mit COM/Interop hilfreich sind.
Das Programm drinterop befindet sich im Unterverzeichnis bin des Installationsverzeichnisses. Es wird mit folgendem Befehl
aufgerufen:
drinterop assembly
Meldung
Ursache
Assembly ComVisible attribute is true when it Das Attribut [assembly:ComVisible(bool)] ist auf True gesetzt
should be false. (Das Assemblierungsattribut oder nicht vorhanden.
ComVisible ist True, muss aber False sein.)
Assemblierungen sollten vor COM verborgen werden, um Probleme
mit der Registrierung zu vermeiden.
Setzen Sie das Attribut ComVisible auf False, und stellen Sie
Klassen und Interfaces selektiv bereit.
Assembly, class, or interface is exposed to COM but Das Attribut ComVisible für die Assemblierung, die Klasse oder das
does not contain the Guid attribute. (Assemblierung, Interface ist auf True gesetzt, es ist aber kein Guid-Attribut
Klasse oder Interface ist für COM bereitgestellt, enthält vorhanden.
aber kein Guid-Attribut.)
46
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
Platform Invoke mit Delphi für .NET
A type library should be generated and registered for Diese Meldung wird erzeugt, wenn eine erforderliche Typbibliothek
assembly. (Für die Assemblierung muss eine nicht in demselben Verzeichnis wie die Assemblierung vorhanden ist.
Typbibliothek generiert und registriert werden.)
Assembly does not contain the TypeLibVersion Das Attribut [assembly: TypeLibVersion(x,y)] ist in der
attribute.
(Die
Assemblierung
enthält
kein Assemblierung nicht vorhanden.
TypeLibVersion-Attribut.)
Die Versionsnummern für Typbibliotheken werden standardmäßig
aus den ersten beiden Stellen der Assemblierungsversion erzeugt.
Durch die Verwendung des Attributs TypeLibVersion lassen sich
Konflikte vermeiden, wenn die beiden ersten Stellen der
Versionsnummern zweier Assemblierungen identisch sind.
Reduce
registry
size
by
adding
attribute
[ClassInterface(ClassInterfaceType.None)]
to class. (Registrierungsgröße durch Hinzufügen des
Attributs
[ClassInterface(ClassInterfaceType.None)]
zur Klasse verringern.)
Die Klasse enthält kein ClassInterface-Attribut.
Standardmäßig wird für jede Klasse ein entsprechendes Interface
erzeugt, wobei dem Klassennamen ein Unterstrich vorangestellt wird.
Dem Interface sind keine Methoden zugeordnet.
Sie können die Größe der Registrierung verringern, indem Sie der
Klasse
das
Attribut
[ClassInterface(ClassInterfaceType.None)] zuweisen.
Anmerkung: Wenn keine der oben aufgeführten Bedingungen vorliegt, gibt das Programm drinterop
keine Meldungen aus.
1.2.3 Deployment von COM Interop-Anwendungen
Bei der Arbeit mit nicht verwalteten Komponenten gilt es, zwei Punkte nicht aus den Augen zu verlieren: Erstens, beachten Sie
grundsätzlich, dass eine Interop-Assemblierung kein wirklicher Ersatz für den COM-Server ist, sondern sein Stellvertreter oder
Proxy. Die von tlbimp und RAD Studio generierten Interop-Assemblierungen transformieren den nicht verwalteten Code einer
Komponente in keinster Weise in verwalteten Code. Alle Dateien, die für eine Komponente in einer nicht verwalteten
Deployment-Umgebung erforderlich sind, müssen zusätzlich zu den Interop-Assemblierungen auch in einer verwalteten
Umgebung weitergegeben werden. Zweitens bieten die Interop Services des .NET Framework keine Umgehungsmöglichkeit für
die Registrierung des COM-Servers auf dem Computer des Endanwenders. Beachten Sie, dass eine Registrierung auch
während der Entwicklung einer verwalteten Anwendung erforderlich ist.
Das Deployment einer Interop-Assemblierung erfolgt, ebenso wie bei jeder anderen .NET-Assemblierung, zusammen mit der
verwalteten ausführbaren Datei im Installationsordner oder im GAC. Erfolgt das Deployment einer Interop-Assemblierung im
GAC, müssen Sie ihr während der Entwicklung einen starken Namen geben. Das Deployment primärer
Interop-Assemblierungen erfolgt grundsätzlich im GAC. Doch dies bedeutet nicht umgekehrt, dass es sich durch das
Deployment einer Assemblierung im GAC bereits automatisch um eine primäre Interop-Assemblierung handelt. Um eine
Interop-Assemblierung als primäre Interop-Assemblierung auszuzeichnen, müssen Sie die Befehlszeilenoption /primary des
Utilitys tlbimp verwenden. Die IDE verfügt aktuell über keine integrierte Funktion zum Erstellen primärer
Interop-Assemblierungen. Das Deployment nicht verwalteter COM-Server lässt sich auf dem Computer des Endanwenders an
einer beliebigen Position vornehmen. Doch wie bereits erwähnt, müssen Sie die nicht verwalteten Komponenten bei der
Installation der Anwendung nach wie vor registrieren.
Siehe auch
CodeGear – Übersicht zum Deployment von Anwendungen
Microsoft – Übersicht zum Deployment von Anwendungen
47
1
Platform Invoke mit Delphi für .NET
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
1.2.4 Platform Invoke mit Delphi für .NET verwenden
In diesem Thema werden die grundlegenden Techniken zur Verwendung nicht verwalteter APIs erläutert. Außerdem wird auf
einige der üblichen Fehlerquellen hingewiesen. Eine Schnellübersicht für die Übersetzung von Delphi-Datentypen wird ebenfalls
angeboten. Dieses Thema kann nicht die gesamten Grundlagen von Platform Invoke oder des Marshaling von Daten
beschreiben. In den Links am Ende dieses Themas finden Sie weitere Informationen zu Platform Invoke und Marshaling. Zum
besseren Verständnis dieses Dokuments sollten Sie wissen, was Attribute sind und wie sie verwendet werden.
In mehreren Beispielen wird die Win32-API benutzt. Detaillierte Informationen zu den erwähnten API-Funktionen finden Sie in
der Dokumentation zum Windows Platform SDK.
1
Dieser Abschnitt behandelt die folgenden Themen:
• Nicht verwaltete Funktionen aufrufen
• Strukturen
• Callback-Funktionen
• Objektreferenzen übergeben
• COM-Interfaces verwenden
Nicht verwaltete Funktionen aufrufen
Beim Aufruf nicht verwalteter Funktionen, muss eine verwaltete Deklaration der Funktion erstellt werden, die die nicht
verwalteten Typen repräsentiert. In vielen Fällen verwenden Funktionen Zeiger auf Daten, die Variablentypen sein können. Ein
Beispiel für eine solche Funktion ist die Win32-API-Funktion SystemParametersInfo, die wie folgt deklariert wird:
BOOL SystemParametersInfo(
UINT uiAction, // Abzurufender oder zu setzender Systemparameter
UINT uiParam,
// Abhängig von der auszuführenden Aktion
PVOID pvParam, // Abhängig von der auszuführenden Aktion
UINT fWinIni
// Benutzerprofil-Aktualisierungsoption
);
Je nach dem Wert von uiAction kann pvParam eine von Dutzenden verschiedener Strukturen oder auch einfacher
Datentypen sein. Da es keine Möglichkeit gibt, dies mit einer einzigen Deklaration darzustellen, müssen mehrere überladene
Versionen der Funktion deklariert werden (siehe Borland.Vcl.Windows.pas), wobei jede Überladung einen bestimmten Fall
abdeckt. Der Parameter pvParam kann auch die generische Deklaration IntPtr erhalten. Damit wird die Aufgabe des Marshaling
an die aufrufende Funktion übergeben. Der integrierte Marshaler übernimmt dies dann nicht. Beachten Sie, dass die
Datentypen, die in einer verwalteten Deklaration einer nicht verwalteten Funktion verwendet werden, jenen Typen entsprechen
müssen, die der Marshaler unterstützt. Andernfalls muss der Aufrufer die Parameter als IntPtr deklarieren und ist dann für das
Marshaling der Daten verantwortlich.
Datentypen
Die meisten Datentypen müssen nicht verändert werden, mit Ausnahme der Zeiger- und String-Typen. Die folgende Tabelle führt
häufig verwendete Datentypen auf und zeigt, wie diese für verwalteten Code übersetzt werden:
Nicht verwalteter Datentyp
48
Verwalteter Datentyp
Eingabeparameter
Ausgabeparameter
Zeiger auf String (PChar)
String
StringBuilder
Untypisierter Parameter/Puffer
TBytes
TBytes
Zeiger auf Struktur (PRect)
const TRect
var TRect
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
Platform Invoke mit Delphi für .NET
Zeiger auf einfachen Typ (PByte)
const Byte
var Byte
Zeiger auf Array (PInteger)
Integer-Array
Integer-Array
Zeiger auf Zeigertyp (^PInteger)
IntPtr
IntPtr
IntPtr kann auch alle Zeiger- und String-Typen darstellen. In diesem Fall muss das Marshaling der Daten mit Hilfe der Klasse
Marshal manuell ausgeführt werden. Wenn Sie mit Funktionen arbeiten, die einen Textpuffer empfangen, bietet die Klasse
StringBuilder die einfachste Lösung. Das folgende Beispiel zeigt, wie die Klasse StringBuilder dazu verwendet wird, einen
Textpuffer zu empfangen.
function GetText(Window: HWND; BufSize: Integer = 1024): string;
var
Buffer: StringBuilder;
begin
Buffer := StringBuilder.Create(BufSize);
GetWindowText(Window, Buffer, Buffer.Capacity);
Result := Buffer.ToString;
end;
1
Die Klasse StringBuilder wird automatisch in einen nicht verwalteten Puffer und wieder zurück übertragen. In einigen Fällen kann
es sich als unpraktikabel oder unmöglich erweisen, die Klasse StringBuilder zu verwenden. Das folgende Beispiel zeigt, wie sich
das Marshaling zum Senden und Empfangen von Strings mit SendMessage ausführen lässt:
procedure SetText(Window: HWND; Text: string);
var
Buffer: IntPtr;
begin
Buffer := Marshal.StringToHGlobalAuto(Text);
try
Result := SendMessage(Window, WM_SETTEXT, 0, Buffer);
finally
Marshal.FreeHGlobal(Buffer);
end;
end;
Ein nicht verwalteter Puffer ist zugewiesen, und der String durch den Aufruf von StringToHGlobalAuto hineinkopiert worden.
Der Puffer muss freigegeben werden, wenn er nicht mehr benötigt wird. Um einen Zeiger an eine Struktur zu übertragen,
verwenden Sie das Marshaling. Mit der Methode StructureToPtr wird der Inhalt der Struktur in den nicht verwalteten
Speicherpuffer kopiert.
Das folgende Beispiel zeigt, wie ein Textpuffer empfangen wird und die Daten in einen String übertragen werden:
function GetText(Window: HWND; BufSize: Integer = 1024): string;
var
Buffer: IntPtr;
begin
Buffer := Marshal.AllocHGlobal(BufSize * Marshal.SystemDefaultCharSize);
try
SendMessage(Window, WM_GETTEXT, BufSize, Buffer);
Result := Marshal.PtrToStringAuto(Buffer);
finally
Marshal.FreeHGlobal(Buffer);
end;
end;
Es muss sichergestellt sein, dass der Puffer groß genug ist, und dass er bei Verwendung der Methode SystemDefaultCharSize
die BufSize-Zeichen auf jedem System garantiert enthalten kann.
Anspruchsvollere Techniken
Bei der Arbeit mit nicht verwalteten APIs ist es üblich, Parameter entweder als Zeiger auf etwas oder als NULL zu übergeben. Da
die verwalteten API-Übersetzungen keine Zeigertypen verwenden, kann es notwendig werden, eine zusätzliche überladene
49
Platform Invoke mit Delphi für .NET
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
Version der Funktion mit dem Parameter zu erstellen, der sich als NULL oder IntPtr deklarieren lässt.
Spezialfälle
Es gibt Fälle, in denen die Klasse StringBuilder und auch die Klasse Marshal die Daten, die an die nicht verwaltete Funktion
übergeben werden sollen, nicht korrekt behandeln kann. Ein solcher Fall tritt beispielsweise ein, wenn der String, den Sie
übergeben oder empfangen möchten, mehrere Strings enthält, die durch NULL-Zeichen getrennt sind. Da der
Standard-Marshaler bereits die erste NULL als Ende des Strings interpretiert, werden die Daten abgeschnitten (dies gilt auch für
die Methoden StringToHGlobalXXX und PtrToStringXXX). In dieser Situation lässt sich TBytes verwenden (mit Hilfe der
Funktionen PlatformStringOf und PlatformBytesOf in Borland.Delphi.System wird das Byte-Array zu/von einem String
konvertiert.) Beachten Sie, dass diese Zusatzfunktionen keine terminierenden NULL-Zeichen hinzufügen oder entfernen.
Wenn Sie mit COM-Interfaces arbeiten, hat die Aufzählung des Typs UnmanagedType (dieser wird von der Klasse
MarshalAsAttribute verwendet) den Wert LPStruct. Dies gilt nur in Kombination mit der Klasse System.Guid, die den Marshaler
dazu bringt, die Parameter in eine Win32-GUID-Struktur zu konvertieren. Die Funktion CoCreateInstance wird in Delphi 7 wie
folgt deklariert:
1
function CoCreateInstance([MarshalAs(UnmanagedType.LPStruct)] clsid: TCLSID;
[MarshalAs(UnmanagedType.IUnknown)] unkOuter: TObject;
dwClsContext: Longint;
[MarshalAs(UnmanagedType.LPStruct)] iid: TIID;
[MarshalAs(UnmanagedType.Interface)] out pv
): HResult;
Dies ist gegenwärtig die einzige dokumentierte Verwendung von UnmanagedType.LPStruct.
Strukturen
Der größte Unterschied zwischen dem Aufruf nicht verwalteter Funktionen und der Übergabe von Strukturen an nicht verwaltete
Funktionen besteht darin, dass der Standard-Marshaler bei der Arbeit mit Strukturen einigen wesentlichen Beschränkungen
unterliegt. Dynamische Arrays, Arrays von Strukturen und die Klasse StringBuilder lassen sich nicht in Strukturen verwenden. In
diesen Fällen ist IntPtr erforderlich (obwohl in manchen Fällen auch string mit verschiedenen Marshaling-Attributen für Strings
verwendet werden kann).
Datentypen
Die folgende Tabelle führt häufig verwendete Datentypen auf und zeigt, wie diese für verwalteten Code "übersetzt" werden:
Nicht verwalteter Datentyp
Verwalteter Datentyp
Eingabeparameter
Ausgabeparameter
Zeiger auf String (PChar)
String
IntPtr
Zeichenarray (array[a..b] of Char)
String
String
Werttyp-Array (array[a..b] of Byte)
array[a..b] of Byte
array[a..b]
Byte
Dynamisches Array (array[0..0] of type)
IntPtr
IntPtr
Struktur-Array (array[1..2] of TRect)
IntPtr
aufgeschlüsselt
Zeiger auf Struktur (PRect)
IntPtr
IntPtr
Zeiger auf einfachen Typ (PByte)
IntPtr
IntPtr
Zeiger auf Array (PInteger)
IntPtr
IntPtr
Zeiger auf Zeigertyp (^PInteger)
IntPtr
IntPtr
oder IntPtr
aufgeschlüsselt
of
oder
Wenn Sie in Strukturen mit Arrays und Strings arbeiten, wird das Attribut MarshalAs dazu verwendet, dem Standard-Marshaler
zusätzliche Informationen über den Datentyp bereitzustellen. In Delphi 7 wird ein Record wie folgt deklariert:
50
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
Platform Invoke mit Delphi für .NET
type
TMyRecord = record
IntBuffer: array[0..31] of Integer;
CharBuffer: array[0..127] of Char;
lpszInput: LPTSTR;
lpszOutput: LPTSTR;
end;
In RAD Studio würde er hingegen so deklariert:
type
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
TMyRecord = record
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
IntBuffer: array[0..31] of Integer;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
CharBuffer: string;
[MarshalAs(UnmanagedType.LPTStr)]
lpszInput: string;
lpszOutput: IntPtr;
end;
1
Die oben dargestellten Deklarationen gehen davon aus, dass die Strings plattformabhängige TChars enthalten (wie gewöhnlich
von der Win32-API verwendet). Damit der Text in lpszOutput empfangen werden kann, muss die Methode
Marshal.AllocHGlobal aufgerufen werden, bevor die Struktur an eine API-Funktion übergeben wird.
Eine Struktur kann wiederum Strukturen enthalten, aber keine Zeiger auf Strukturen. In diesem Fall muss ein IntPtr deklariert
und die Methode Marshal.StructureToPtr dazu verwendet werden, die Daten von der verwalteten Struktur in den nicht
verwalteten Speicher zu verschieben. Beachten Sie, dass StructureToPtr den erforderlichen Speicherplatz nicht automatisch
zuweist (dies muss separat erfolgen). Stellen Sie sicher, dass Sie Marshal.SizeOf verwenden, um den erforderlichen
Speicherplatz zu ermitteln, da der Delphi-Operator SizeOf das Attribut MarshalAs nicht erkennt (im vorhergehenden Beispiel
wäre CharBuffer mit dem Delphi-Operator SizeOf 4 Byte, obwohl es in Wirklichkeit 128 Byte in einem Single-Byte-System
belegen würde). Die folgenden Beispiele zeigen, wie Botschaften gesendet werden, die Zeiger an eine Struktur übergeben:
procedure SetRect(Handle: HWND; const Rect: TRect);
var
Buffer: IntPtr;
begin
Buffer := Marshal.AllocHGlobal(Marshal.SizeOf(TypeOf(TRect)));
try
Marshal.StructureToPtr(TObject(Rect), Buffer, False);
SendMessage(Handle, EM_SETRECT, 0, Buffer);
finally
Marshal.DestroyStructure(Buffer, TypeOf(TRect));
end;
end;
procedure GetRect(Handle: HWND; var Rect: TRect);
var
Buffer: IntPtr;
begin
Buffer := Marshal.AllocHGlobal(Marshal.SizeOf(TypeOf(TRect)));
try
SendMessage(Handle, EM_GETRECT, 0, Buffer);
Rect := TRect(Marshal.PtrToStructure(Buffer, TypeOf(TRect)));
finally
Marshal.DestroyStructure(Buffer, TypeOf(TRect));
end;
end;
Wenn die Struktur Felder enthält, für die die Marshal-Schicht weitere Puffer freigeben muss, ist es wichtig anstelle der Methode
FreeHGlobal die Methode DestroyStructure aufzurufen (detaillierte Informationen hierzu finden Sie in der Dokumentation zu
DestroyStructure).
51
Platform Invoke mit Delphi für .NET
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
Weiterführende Themen
Bei der Arbeit mit nicht verwalteten APIs kann es erforderlich sein, ein Byte-Array in eine Struktur zu konvertieren (oder eines
bzw. mehrere Felder aus einer Struktur abzurufen, die sich in einem Byte-Array befindet) oder umgekehrt. Die Klasse Marshal
enthält zwar eine Methode, um den Offset des angegebenen Feldes abzurufen, diese ist aber extrem langsam. Deshalb sollte
ihre Verwendung auf Sonderfälle beschränkt werden. Interne Geschwindigkeitstests haben ergeben, dass es bei einer Struktur
mit acht oder neun numerischen Feldern deutlich schneller ist, einen nicht verwalteten Speicherblock zu reservieren, das
Byte-Array in den nicht verwalteten Speicher zu kopieren und dann die Methode PtrToStructure aufzurufen, anstatt die Position
nur eines Feldes mit der Methode Marshal.OffsetOf ausfindig zu machen und die Daten dann mit der Klasse BitConverter zu
konvertieren. Borland.Vcl.WinUtils enthält Hilfefunktionen zur wechselseitigen Konvertierung zwischen Byte-Arrays und
Strukturen (siehe StructureToBytes und BytesToStructure).
1
Spezialfälle
Es gibt Situationen, in denen eine benutzerdefinierte Verarbeitung erforderlich ist, zum Beispiel das Senden von Botschaften mit
einem Zeiger auf ein Integer-Array. In diesem Fall stellt die Klasse Marshal Methoden zum direkten Kopieren der Daten in den
nicht verwalteten Puffer an den angegebenen Offsets bereit (auf diese Weise können Sie nach der Pufferzuweisung einen
benutzerdefinierten Array-Datentyp erstellen). Das folgende Beispiel zeigt, wie Sie eine Botschaft senden, in der LParam einen
Zeiger auf einen Integer-Array darstellt.
function SendArrayMessage(Handle: HWND; Msg: UINT; WParam: WPARAM;
LParam: TIntegerDynArray): LRESULT;
var
Buffer: IntPtr;
begin
Buffer := Marshal.AllocHGlobal(Length(LParam) * SizeOf(Integer));
try
Marshal.Copy(LParam, 0, Buffer, Length(LParam));
Result := SendMessage(Handle, Msg, WParam, Buffer);
finally
Marshal.FreeHGlobal(Buffer);
end;
end;
Callback-Funktionen
Wenn ein Funktionszeiger für eine verwaltete Funktion an eine nicht verwaltete API übergeben werden soll, muss eine Referenz
zum Delegate verwaltet werden, andernfalls gelangt dieser in die Garbage Collection. Wenn Sie einen Zeiger direkt an eine
verwaltete Funktion übergeben, wird ein temporärer Delegate erstellt. Sobald dieser den Gültigkeitsbereich verlässt (im
nachstehenden Beispiel am Ende von MyFunction) wird er der Garbage Collection überlassen. Beachten Sie den
nachstehenden Code für Delphi 7:
function MyFunction: Integer;
begin
...
RegisterCallback(@MyCallback);
...
end;
Damit dies auch in einer verwalteten Umgebung funktioniert, muss der Code wie folgt geändert werden:
const
MyCallbackDelegate: TFNMyCallback = @MyCallback;
function MyFunction: Integer;
begin
...
RegisterCallback(MyCallbackDelegate);
...
end;
Damit ist sichergestellt, dass der Callback solange erfolgen kann wie MyCallbackDelegate sich innerhalb des
52
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
Platform Invoke mit Delphi für .NET
Gültigkeitsbereichs befindet.
Datentypen
Für Callbacks gelten dieselben Regeln wie für alle anderen nicht verwalteten API-Funktionen.
Spezialfälle
Alle Parameter, die in einem asynchronen Prozess verwendet werden, müssen als IntPtr deklariert werden. Der Marshaler gibt
nach der Rückkehr vom Funktionsaufruf soviel Speicher frei, wie er den nicht verwalteten Typen zugewiesen hat. Bei der
Verwendung von IntPtr liegt es in Ihrer Verantwortung, den zugewiesenen Speicher wieder freizugeben.
Objektreferenzen übergeben
Wenn Sie mit der Windows-API arbeiten, werden Objektreferenzen gelegentlich vorübergehend an die API übergeben. Dort
werden sie gespeichert und später, meist zusammen mit einem bestimmten Ereignis, zurück an die Anwendung zur
Verarbeitung übergeben. Dies kann auch mit .NET ausgeführt werden, aber es ist eine besondere Sorgfalt erforderlich, um
sicherzustellen, dass eine Referenz auf alle Objekte behalten wird (andernfalls werden sie von der Garbage Collection
eingesammelt).
Datentypen
Nicht verwaltete Datentypen
Zeiger (Objektreferenz, Benutzerdaten)
Verwalteter Datentyp
Daten zur Verfügung stellen
Daten empfangen
GCHandle
GCHandle
Die Klasse GCHandle sorgt dafür, dass Objektreferenzen an nicht verwalteten Code übergeben werden und stellt sicher, dass
keine automatische Speicherfreigabe über die Garbage Collection erfolgt. Die Klasse GCHandle muss zugewiesen und später,
wenn sie nicht mehr benötigt wird, wieder freigegeben werden. Es gibt verschiedene Typen von GCHandle, wobei
GCHandleType.Normal dann am sinnvollsten ist, wenn ein nicht verwalteter Client die einzige Referenz enthält. Nach der
Zuweisung übergeben Sie GCHandle an eine API-Funktion und wandeln sie in den Typ IntPtr um (wahlweise und abhängig von
der nicht verwalteten Deklaration ist auch eine weitere Umwandlung in LongInt möglich). Der Typ IntPtr kann später jederzeit an
eine GCHandle-Klasse zurück überführt werden. Beachten Sie, dass vor dem Zugriff auf die Eigenschaft Target die Methode
IsAllocated aufgerufen werden muss. Siehe dazu das nachstehende Beispiel:
procedure MyProcedure;
var
Ptr: IntPtr;
Handle: GCHandle;
begin
...
if Ptr <> nil then
begin
Handle := GCHandle(Ptr);
if Handle.IsAllocated then
DoSomething(Handle.Target);
end;
...
end;
Anspruchsvollere Techniken
Der Einsatz einer GCHandle-Klasse ist zwar relativ einfach, bringt aber Performance-Einbußen mit sich. Es besteht auch die
Gefahr von Ressourcenlecks, wenn die Handles nicht korrekt freigegeben wurden. Wenn Objektreferenzen im verwaltetem Code
aufbewahrt werden, ist es möglich, anstelle einer Objektreferenz auch einen einmaligen Index, zum Beispiel den von der
53
1
Platform Invoke mit Delphi für .NET
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
Methode GetHashCode zurückgegebenen Hash-Code, an die nicht verwaltete API zu übergeben. Eine Hash-Tabelle kann auf
der verwalteten Seite gepflegt werden, um das Abrufen von Objektinstanzen auf der Basis des Hash-Werts zu vereinfachen, falls
dies erforderlich ist. Ein Beispiel für diese Technik finden Sie in der Klasse TTreeNodes (in Borland.Vcl.ComCtrls).
COM-Interfaces verwenden
Für COM-Interfaces ist ein ähnlicher Ansatz erforderlich wie bei der Verwendung nicht verwalteter APIs. Das Interface muss mit
Hilfe von benutzerdefinierten Attributen deklariert werden, um den Interface-Typ und den GUID anzugeben. Im nächsten Schritt
werden dann die Methoden deklariert, wobei derselbe Ansatz wie bei nicht verwalteten APIs benutzt wird. Das folgende Beispiel
verwendet das Interface IAutoComplete, das in Delphi 7 wie folgt deklariert wird:
IAutoComplete = interface(IUnknown)
['{00bb2762-6a77-11d0-a535-00c04fd7d062}']
function Init(hwndEdit: HWND; punkACL: IUnknown;
pwszRegKeyPath: LPCWSTR; pwszQuickComplete: LPCWSTR): HRESULT; stdcall;
function Enable(fEnable: BOOL): HRESULT; stdcall;
end;
1
In RAD Studio hingegen erfolgt die Deklaration auf diese Weise:
[ComImport, GuidAttribute('00BB2762-6A77-11D0-A535-00C04FD7D062'),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
IAutoComplete = interface
function Init(hwndEdit: HWND; punkACL: IEnumString;
pwszRegKeyPath: IntPtr; pwszQuickComplete: IntPtr): HRESULT;
function Enable(fEnable: BOOL): HRESULT;
end;
Beachten Sie die benutzerdefinierten Attribute, die zur Beschreibung des GUID und des Interface-Typs verwendet werden.
Ferner ist es wichtig, die Klasse ComImportAttribute zu verwenden. Beachten Sie beim Import von COM-Interfaces, dass die
Methoden IUnknown/IDispatch nicht implementiert werden müssen und dass eine Vererbung nicht unterstützt wird.
Datentypen
Für die meisten Datentypen gelten dieselben Regeln wie für nicht verwaltete Funktionen. Folgendes ist jedoch zusätzlich zu
beachten:
Nicht verwalteter Datentyp
Verwalteter Datentyp
Daten zur Verfügung stellen
Daten empfangen
GUID
System.Guid
System.Guid
IUnknown
TObject
TObject
IDispatch
TObject
TObject
Interface
TObject
TObject
Variant
TObject
TObject
SafeArray (des Typs)
Array von <Typ>
Array von <Typ>
BSTR
String
String
Die Verwendung des benutzerdefinierten Attributs MarshalAsAttribute ist für manche der oben aufgeführten
Verwendungszwecke von TObject erforderlich, um den genauen, nicht verwalteten Typ anzugeben (zum Beispiel
UnmanagedType.IUnknown, UnmanagedType.IDispatch oder UnmanagedType.Interface). Dies gilt auch für manche
Arraytypen. Ein Beispiel für die explizite Angabe eines nicht verwalteten Typs ist die Methode Next des Interface
IEnumString. Die Win32-API deklariert Next wie folgt:
HRESULT Next(
ULONG celt,
LPOLESTR * rgelt,
ULONG * pceltFetched
54
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
Platform Invoke mit Delphi für .NET
);
In RAD Studio lautet die Deklaration hingegen wie folgt:
function Next(celt: Longint;
[out, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr, SizeParamIndex =
0)]
rgelt: array of string;
out pceltFetched: Longint
): Integer;
Anspruchsvollere Techniken
Bei der Arbeit mit SafeArrays konvertiert die Marshal-Schicht zum Beispiel ein Array aus Bytes in den entsprechenden
SafeArray-Typ. Die Marshal-Schicht ist gegenüber unverträglichen Typen beim Konvertieren von SafeArrays sehr "aufmerksam".
Wenn der Typ des SafeArray nicht genau dem Typ des verwalteten Array entspricht, wird eine Exception ausgelöst. Einige der
Win32-SafeArray-APIs setzen den Typ des SafeArray bei der Erstellung des Arrays nicht korrekt. Das führt in der
Marshal-Schicht bei einer Verwendung aus .NET zu einer fehlerhaften Zuweisung. Es gibt dafür nur zwei Lösungsmöglichkeiten:
Entweder muss sichergestellt sein, dass das SafeArray korrekt erstellt wurde, oder die automatische Konvertierung der
Marshal-Schicht muss umgangen werden. Letzteres kann riskant sein (aber auch die einzige Alternative, wenn Sie nicht die
Möglichkeit haben, den COM-Server, der die Daten liefert, entsprechend zu ändern). Beachten Sie folgende Deklaration:
function AS_GetRecords(const ProviderName: WideString; Count: Integer;
out RecsOut: Integer; Options: Integer; const CommandText: WideString;
var Params: OleVariant; var OwnerData: OleVariant): OleVariant;
Wenn es sich bei dem Rückgabewert immer um ein SafeArray handelt (dessen Typ nicht korrekt beschrieben ist), das in ein
variantes Array verpackt ist, lässt sich die Deklaration wie folgt ändern:
type
TSafeByteArrayData = packed record
VType: Word;
Reserved1: Word;
Reserved2: Word;
Reserved3: Word;
VArray: IntPtr; { Dies ist ein Zeiger auf das aktuelle SafeArray }
end;
function AS_GetRecords(const ProviderName: WideString; Count: Integer;
out RecsOut: Integer; Options: Integer; const CommandText: WideString;
var Params: OleVariant; var OwnerData: OleVariant): TSafeByteArrayData;
Angenommen Sie wissen, dass ein OleVariant-Objekt ein Record ist, dann kann in Delphi 7 der Record TSafeByteArrayData von
TVarData extrahiert werden (ähnlich dem Fall, in dem der Datentyp varArray ist). Der Record bietet Zugriff auf den Rohzeiger
auf das SafeArray, von dem sich die Daten extrahieren lassen. Wird anstelle eines OleVariant-Objekts jedoch eine Struktur
verwendet, versucht die Marshal-Schicht nicht, den Datentyp des Arrays zu interpretieren. Das Extrahieren der Daten aus dem
SafeArray bedeutet aber einen zusätzlichen Aufwand.
Spezialfälle
Beim Erstellen einer Instanz empfiehlt es sich zwar, Activator.CreateInstance zu verwenden, doch besteht dadurch keine
komplette Kompatibilität zu CoCreateInstanceEx. Bei der Arbeit mit externen Servern versucht CreateInstance grundsätzlich,
den Server lokal aufzurufen, ehe der Aufruf des Servers auf dem Remote-Computer erfolgt. Gegenwärtig besteht die einzige
bekannte Lösung dieses Problems in der Verwendung von CoCreateInstanceEx.
Da keine Vererbung unterstützt wird, muss ein Nachkommen-Interface die Vorfahrmethoden deklarieren. Nachstehend sehen
Sie das Interface IAutoComplete2, das IAutoComplete erweitert.
[ComImport, GuidAttribute('EAC04BC0-3791-11d2-BB95-0060977B464C'),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
IAutoComplete2 = interface(IAutoComplete)
55
1
Interfaces für virtuelle Bibliotheken
RAD Studio für .NET
1.2 Anwendungen mit nicht verwaltetem
// IAutoComplete-Methoden
function Init(hwndEdit: HWND; punkACL: IEnumString;
pwszRegKeyPath: IntPtr; pwszQuickComplete: IntPtr): HRESULT;
function Enable(fEnable: BOOL): HRESULT;
//
function SetOptions(dwFlag: DWORD): HRESULT;
function GetOptions(var dwFlag: DWORD): HRESULT;
end;
Siehe auch
Marshaling von Daten mit Platform Invoke
COM Interop in verwalteten Anwendungen (
Interfaces für virtuelle Bibliotheken (
see page 41)
see page 56)
1
1.2.5 Interfaces für virtuelle Bibliotheken
In diesem Thema wird erläutert, wie Sie das Delphi-Feature Interfaces für virtuelle Bibliotheken verwenden. Interfaces für
virtuelle Bibliotheken ermöglicht es, nicht verwalteten Code ohne Verwendung das Attributs DllImport zur Laufzeit zu suchen,
zu laden und aufzurufen.
Standard PInvoke
Um aus verwaltetem Code eine nicht verwaltete Funktion aufzurufen, benötigen Sie einen .NET-Service namens Platform Invoke
(Kurzform: PInvoke). Damit dieser Service genutzt werden kann, müssen Sie im Quelltext für jede nicht verwaltete Funktion, die
Sie aufrufen möchten, einen Prototyp deklarieren. Dies kann innerhalb einer vorhandenen .NET-Klasse erfolgen, Sie können für
die Prototypen aber auch eine neue Klasse erstellen. Jede Prototyp-Deklaration für nicht verwalteten Code muss mit dem
Attribut DllImport gekennzeichnet werden.
Im DllImport-Attribut wird der Name der DLL angegeben, in der sich die nicht verwaltete Funktion befindet. Da der nicht
verwaltete Prototyp während der Compilierung mit dem DllImport-Attribut gekennzeichnet ist, lassen sich DLLs und ihre
exportierten, nicht verwalteten Funktionen nur schwer dynamisch bestimmen. Außerdem tritt ein Laufzeitfehler auf, wenn die
nicht verwaltete Funktion nicht aus der im DllImport-Attribut bezeichneten DLL exportiert wurde. Um einen Laufzeitfehler zu
verhindern, müssten Sie mit LoadLibrary die benötigte DLL laden und mit einem GetProcAddress-Aufruf sicherstellen, dass
die nicht verwaltete Funktion vorhanden ist. Selbst dann wäre aber ein direkter Aufruf der Funktion mit dem von
GetProcAddress zurückgegebenen Zeiger nicht möglich. Sie müssten den Zeiger stattdessen an eine Funktion in einer
anderen, nicht verwalteten DLL übergeben und den Aufruf mit dieser Funktion durchführen.
Interfaces für virtuelle Bibliotheken verwenden
Interfaces für virtuelle Bibliotheken benötigt für den Aufruf von nicht verwaltetem Code ebenfalls den Platform Invoke-Service.
Anstatt jedoch das DllImport-Attribut zu verwenden, erzeugt Interfaces für virtuelle Bibliotheken zur Laufzeit mit den
Methoden des .NET-Namespace System.Reflection.Emit ein Interface zur nicht verwalteten DLL.
Für die Verwendung von Interfaces für virtuelle Bibliotheken sind drei Schritte erforderlich:
• Fügen Sie Borland.Vcl.Win32 zur uses-Klausel hinzu.
• Deklarieren Sie ein Interface mit den exportierten, nicht verwalteten Funktionen, die aufgerufen werden sollen.
• Stellen Sie durch einen Aufruf der Funktion Supports sicher, dass die nicht verwaltete DLL vorhanden ist und dass die
Funktionen in der Interface-Deklaration tatsächlich exportiert wurden.
Wenn die Supports-Funktion True zurückgibt, unterstützt die DLL alle Funktionen in der Interface-Deklaration, d.h. die
Funktionen können problemlos aufgerufen werden. Innerhalb der Interface-Deklaration muss das DllImport-Attribut nicht
für die Prototypen verwendet werden.
Angenommen, die DLL MyFunctions.dll enthält die folgenden exportierten Funktionen:
56
1.2 Anwendungen mit nicht verwaltetem
RAD Studio für .NET
Interfaces für virtuelle Bibliotheken
function AFunction
: Boolean;
function AnotherFunction : Boolean;
Um diese Funktionen in verwalteten Code aufzurufen, fügen Sie die Unit Borland.Vcl.Win32 zur uses-Klausel hinzu und
deklarieren ein Interface in Delphi:
uses Borland.Vcl.Win32, ...;
...
type
IMyFunctions = interface
['Your GUID'] // Nicht unbedingt erforderlich, aber bewährte Programmierpraxis
function AFunction
: Boolean;
function AnotherFunction : Boolean;
end;
Die Signatur der Supports-Funktion lautet:
1
function Supports(ModuleName: string; Source: System.Type; var Instance) : Boolean;
Zum Aufrufen der nicht verwalteten Funktionen rufen Sie zunächst Supports auf, um die DLL zu laden, und erzeugen dann ein
Interface für die DLL:
var
MyFunctions : IMyFunctions;
begin
if Supports("MyFunctions.dll", IMyFunctions, MyFunctions) then
if MyFunctions.AFunction then
begin
...
end;
end;
end;
Für Interfaces für virtuelle Bibliotheken gelten die üblichen Einschränkungen bezüglich kompatibler programmeigener
Parametertypen und ihrer Zuordnung zu .NET-Typen. Außerdem müssen alle nicht verwalteten Funktionen die Aufrufkonvention
stdcall verwenden.
Siehe auch
COM Interop in verwalteten Anwendungen (
Platform Invoke mit Delphi verwenden (
see page 41)
see page 48)
57
Code-Visualisierung - Überblick
RAD Studio für .NET
1.3 Modellierung
1.3 Modellierung
Themen
Name
Code-Visualisierung - Überblick (
Beschreibung
see page 58)
Die Funktion der Code-Visualisierung ist sowohl in der Enterprise- als auch in der
Architect-Version von RAD Studio enthalten. Alle weiteren Modellierungstools
sind dagegen nur in der Architect-Version von RAD Studio verfügbar.
Entsprechende Informationen gelten deshalb nur für diese Version.
1
1.3.1 Code-Visualisierung - Überblick
Die Funktion der Code-Visualisierung ist sowohl in der Enterprise- als auch in der Architect-Version von RAD Studio enthalten.
Alle weiteren Modellierungstools sind dagegen nur in der Architect-Version von RAD Studio verfügbar. Entsprechende
Informationen gelten deshalb nur für diese Version.
Code-Visualisierung und statische UML-Strukturdiagramme
Das Diagramm Code-Visualisierung von RAD Studio bietet eine grafische Echtzeitdarstellung des Quelltexts. Wenn Sie also
Änderungen am Quelltext vornehmen, werden diese automatisch auch in die grafische Abbildung im Diagramm übernommen.
Das Diagramm Code-Visualisierung entspricht der statischen Struktur von UML-Diagrammen. Die strukturelle Ansicht eines
Projekts konzentriert sich auf UML-Packages, Datentypen wie Klassen und Interfaces sowie deren Attribute, Eigenschaften und
Operationen. Ein Diagramm mit statischer Struktur zeigt ferner auch die Beziehungen an, die zwischen diesen Einheiten
bestehen.
Dieser Abschnitt erläutert die Beziehung zwischen Quelltext und dem Diagramm Code-Visualisierung.
Anmerkung: Die Code-Visualisierung und die integrierten UML-Modellierungstools sind zwei getrennte Leistungsmerkmale von
RAD Studio. Code-Visualisierung bezieht sich auf die Fähigkeit, einen bestimmten Quelltext auszuwählen und die Deklarationen
in diesem Quelltext in die UML-Notation umzusetzen. Das resultierende "Live-Diagramm" enthält immer den aktuellen Status des
Quelltexts. Es ist aber nicht möglich, über das Diagramm Code-Visualisierung Änderungen vorzunehmen. Im Gegensatz dazu
kann mit den modellgesteuerten UML-Tools von RAD Studio die Anwendung über die Diagrammoberfläche entwickelt werden.
Obwohl beide Produktleistungsmerkmale auf den CodeGear Together-Technologien basieren, verwenden Sie unterschiedliche
Hintergrundmechanisme zum Erstellen und Manipulieren des Diagramms. Die integrierte Oberfläche zum Entwerfen von
Modellen basiert außerdem auf den Entwurfszeitfunktionen des ECO-Framework (Enterprise Core Objects) von CodeGear.
Dieses Thema befasst sich nur mit der Code-Visualisierung. Weitere Informationen über das Erstellen von Anwendungen mit
dem ECO-Framework und über die Verwendung der Experten und Modellierungstools mit ECO-fähigen Anwendungen finden
Sie in der ECO-Online-Hilfe.
Erläuterungen zur Beziehung zwischen Quelltext und Code-Visualisierung
Die in RAD Studio enthaltenen Tools zur Code-Visualisierung verwenden für die grafische Abbildung der im Quelltext
deklarierten Elemente die UML-Notation und die UML-Konventionen. Das Diagramm Code-Visualisierung zeigt die logischen
Beziehungen - in der UML-Terminologie als statische Struktur bezeichnet - der Klassen, Interfaces und anderer in einem Projekt
definierten Typen an. Dazu werden bestimmte Quelltext-Konstrukte (zum Beispiel Klassendeklarationen und
Interface-Implementierungen) in ihre UML-Gegenstücke umgewandelt, die sich dann in einem Diagramm anzeigen lassen.
Top-Level-Organisation: Projekte, UML-Packages und .NET-Namespaces
Die Code-Visualisierung wird durch zwei verschiedene Bereiche in der IDE möglich: Dem Fenster Modellansicht und dem
Diagramm zur Code-Visualisierung. Das Fenster Modellansicht zeigt die logische Struktur eines Projekts in hierarchisch
58
1.3 Modellierung
RAD Studio für .NET
Code-Visualisierung - Überblick
gegliederter Form an und hebt sich dadurch von der Projektverwaltung ab, deren Darstellungsform auf Dateien beschränkt ist.
Jedes Projekt in einer Projektgruppe ist im Fenster Modellansicht ein Top-Level-Knoten.
In den einzelnen Knoten der Projektstruktur finden Sie die UML-Packages verschachtelt. Jedes UML-Package entspricht der
Deklaration eines .NET-Namespace in Ihrem Quelltext (.NET-Namespaces können mehrere Quelldateien umfassen). Das
UML-Package lässt sich erweitern, um die darin deklarierten Typen einzublenden.
Vererbung und Interface-Implementierung
Die Beziehung, die entsteht, wenn eine Klasse von einer Superklasse erbt, wird in der UML-Terminologie als Generalisierung
bezeichnet. Ermittelt die IDE eine Vererbungsbeziehung im Quelltext, erstellt sie im Fenster Modellansicht einen
Generalisierungs-Link im Knoten der untergeordneten Klasse. Im Diagramm Code-Visualisierung wird der
Generalisierungs-Link in der Standard-UML-Notation in Form einer einfachen Linie und einem ungefüllten Pfeil dargestellt, der
auf die Superklasse zeigt.
Der UML-Begriff für eine Interface-Implementierung ist Realisierung. Ähnlich wie im Fall der Vererbung erstellt die IDE einen
Realisierungs-Link, wenn sie eine Klassendeklaration ermittelt, die ein Interface implementiert. Der Realisierungs-Link wird im
Fenster Modellansicht in der Implementor-Klasse und im Diagramm in Form einer gepunkteten Linie mit einem ungefüllten Pfeil
dargestellt, der auf das Interface zeigt. Für jedes von einer Klasse implementierte Interface wird ein solcher Realisierungs-Link
erstellt.
Assoziationen
In UML ist eine Assoziation ein Navigationslink, der erzeugt wird, wenn eine Klasse eine Referenz auf eine andere Klasse
enthält (zum Beispiel: ein Attribut oder eine Eigenschaft). Die Code-Visualisierung erstellt nur dann Assoziations-Links, wenn
eine Klasse ein Attribut oder eine Eigenschaft enthält, bei der es sich nicht um einen primitiven Datentyp handelt. Im Diagramm
besteht der Assoziations-Link zwischen der Klasse, die das nicht primitive Element enthält, und dem Datentyp dieses Elements.
Klassenelemente: Attribute, Operationen, Eigenschaften und verschachtelte Typen
Durch die Code-Visualisierung werden auch Deklarationen von Klassen- und Interface-Elementen ihren UML-Äquivalenten
zugeordnet. Im Diagramm Code-Visualisierung werden Elemente in vier verschiedene Kategorien unterteilt:
• Felder: Enthält Felddeklarationen. Typ und optionale Standardwertzuweisung werden im Diagramm angezeigt.
• Methoden: Enthält Methodendeklarationen. Sichtbarkeit, Bereich und Rückgabewert werden im Diagramm angezeigt.
• Eigenschaften: Enthält Delphi-Eigenschaftsdeklarationen. Der Typ der Eigenschaft wird angezeigt.
• Klassen: Enthält verschachtelte Klassentypdeklarationen.
Zur Darstellung der UML-Deklaration von Attributen, Operationen und Eigenschaften wird die Standard-UML-Syntax verwendet.
Jede der vier Kategorien kann unabhängig von den anderen ein- und ausgeblendet werden.
Siehe auch
UML-Features in Delphi für .NET (nur Architect SKU)
Überblick über die integrierten Modellierungstools (nur Architect SKU)
Importieren und Exportieren eines Modells mit XMI (nur Architect SKU) (
see page 153)
Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms (
Verwenden des Übersichtsfensters (
see page 154)
see page 155)
59
1
Rave Reports in RAD Studio verwenden
RAD Studio für .NET
1.4 Berichte für .NET-Anwendungen
1.4 Berichte für .NET-Anwendungen entwickeln
RAD Studio wird mit Rave Reports von Nevrona geliefert. Mit Hilfe dieser Tools können Sie Berichte für Ihre Anwendungen
erstellen und Lösungen für die Berichterstellung entwickeln, die von den Benutzern Ihrer Anwendung genutzt und angepasst
werden können.
Themen
Name
Rave Reports in RAD Studio verwenden (
1
Beschreibung
see page 60)
Die Entwicklungsumgebung von RAD Studio unterstützt die Integration von
Berichtobjekten in Ihre Anwendungen. Diese Integration ermöglicht es, einen
Bericht mit dem Designer von Rave Reports zu erstellen oder
ActiveX-Komponenten von Rave Reports direkt im RAD Studio-Designer in Web
Forms zu platzieren. Die Benutzer Ihrer Anwendung können ihre eigenen
Berichte erstellen und anzeigen oder bereits vorhandene Berichte öffnen. Die
Integration von Rave Reports in RAD Studio bietet folgende Möglichkeiten:
• Neue Berichtobjekte in Projekte einfügen
• Rave Reports ActiveX-Objekte zu Web Forms hinzufügen
1.4.1 Rave Reports in RAD Studio verwenden
Die Entwicklungsumgebung von RAD Studio unterstützt die Integration von Berichtobjekten in Ihre Anwendungen. Diese
Integration ermöglicht es, einen Bericht mit dem Designer von Rave Reports zu erstellen oder ActiveX-Komponenten von Rave
Reports direkt im RAD Studio-Designer in Web Forms zu platzieren. Die Benutzer Ihrer Anwendung können ihre eigenen
Berichte erstellen und anzeigen oder bereits vorhandene Berichte öffnen. Die Integration von Rave Reports in RAD Studio bietet
folgende Möglichkeiten:
• Neue Berichtobjekte in Projekte einfügen
• Rave Reports ActiveX-Objekte zu Web Forms hinzufügen
Neue Berichte in RAD Studio erstellen
Berichte von Rave Reports lassen sich in RAD Studio ebenso einfügen wie jede andere Komponente von Drittanbietern. Ein
Bericht wird als eigenständiges Rave Reports-Objekt gespeichert. Auf einen Bericht kann aus anderen Anwendungen Bezug
genommen werden, wenn diese einen Bericht aufrufen oder generieren müssen. Wenn Sie eine neue Anwendung erstellen,
können Sie das Berichtobjekt integrieren, indem Sie eine Referenz darauf in die Projektverwaltung einfügen. Rave Reports
bietet auch die Möglichkeit, ein Berichtobjekt mit einer Datenquelle zu verknüpfen. Dadurch lässt sich ein Bericht dynamisch auf
der Basis der aktuellen Daten in der Datenbank erstellen.
ActiveX-Komponenten von Rave Reports verwenden
Sie können ActiveX-Objekte von Rave Reports in Ihre Anwendungen einfügen. Die Tool-Palette von RAD Studio enthält eine
Liste der verfügbaren ActiveX-Objekte. Ziehen Sie die gewünschten Objekte zur Entwurfszeit einfach in ein Windows Form oder
Web Form. Setzen Sie die erforderlichen Eigenschaften, und ändern Sie den Quelltext nach Bedarf im Quelltext-Editor. Unter
Umständen ist es erforderlich, die .NET-Komponenten zurückzusetzen und die ActiveX-Komponenten im Dialogfeld Installierte
.NET-Komponenten auszuwählen.
Siehe auch
Berichte entwerfen
60
1.5 Anwendungen mit
RAD Studio für .NET
1.5 Anwendungen mit VCL.NET-Komponenten
entwickeln
VCL.NET ist eine erweiterte Sammlung der VCL-Komponenten, die dazu dienen, komplexe Anwendungen in Delphi schnell und
einfach zu erstellen. VCL.NET bietet Ihnen die Möglichkeit, Ihre Delphi VCL-Anwendungen und -Komponenten Benutzern des
Microsoft .NET Framework zur Verfügung zu stellen. Mit RAD Studio können Sie auf alle Vorteile des .NET Framework zugreifen
und sich gleichzeitig der benutzerfreundlichen und leistungsstarken komponentengesteuerten Entwicklungsumgebung von
Delphi bedienen.
Mit RAD Studio lassen sich folgende Anwendungstypen erstellen: Sie können VCL.NET-Formularanwendungen erstellen, die
sich auf dem .NET Framework ausführen lassen, aber dennoch die VCL.NET-Komponenten und -Steuerelemente verwenden.
Sie können .NET-Anwendungen erstellen, die das zugrunde liegende .NET Framework und die .NET-Steuerelemente nutzen,
während RAD Studio die Codebehind-Logik bereitstellt. Sie können leistungsstarke ASP.NET-Anwendungen erstellen, die das
zugrunde liegende .NET Framework, die ASP.NET-Steuerelemente und RAD Studio-Codebehind-Logik verwenden. Die
folgenden Themen bieten weiterführende Informationen zu den Vorteilen von VCL.NET in RAD Studio.
Themen
Name
Beschreibung
Änderungen aufgrund der Unterstützung von 64-Bit .NET 2.0 (
Portieren von VCL-Anwendungen nach RAD Studio (
VCL-Anwendungen portieren (
see page 75)
see page 63)
see page 64)
Für die Unterstützung von 64-Bit .NET 2.0 waren einige Änderungen erforderlich.
Wegen dieser Änderungen könnten kleinere Quelltextänderungen erforderlich
werden, damit vorhandene Anwendungen korrekt arbeiten. Detaillierte
Informationen zu den einzelnen Änderungen finden Sie unter Ausführen von
Änderungen ( see page 171).
Bei der Entwicklung der VCL für RAD Studio wurde großer Wert auf die
Abwärtskompatibilität gelegt. Dennoch sind einige Unterschiede in der
Funktionsweise von VCL-Anwendungen zu berücksichtigen, die durch die
verwaltete Umgebung von .NET bedingt sind. In vorliegenden Dokument werden
die meisten dieser Unterschiede beschrieben und einige Maßnahmen erläutert,
die beim Portieren einer VCL-Anwendung in die .NET-Umgebung ergriffen
werden sollten.
Die Neuerungen in Delphi selbst sind nicht Gegenstand dieses Dokuments. Hier
wird lediglich erläutert, wie vorhandener Delphi-Code der neuen RAD
Studio-Sprache und dem VCL-Framework zugeordnet wird. Das Dokument
enthält Links zu speziellen Themen in der Delphi-Sprachreferenz, in denen die
neuen Leistungsmerkmale... more ( see page 64)
Bei der Portierung von VCL-Anwendungen von Delphi 7 nach RAD Studio gibt es
einige Punkte zu bedenken. Neben grundlegenden Sprachelementen, die ersetzt
oder geändert werden müssen, gibt es einige Strategien, denen Sie folgen
sollten, um sicherzustellen, dass Ihre Anwendungen komplett und stabil portiert
werden.
Dieses Thema befasst sich mit folgenden Bereichen:
• Allgemeine sprachspezifische Probleme
• Packages umbenennen
• Neue Funktionen der Programmiersprache
• Web-Service-Client-Anwendungen portieren
61
1
Änderungen aufgrund der Unterstützung
Überblick zu VCL für .NET (
see page 77)
Web-Service-Clients portieren (
see page 80)
1
RAD Studio für .NET
1.5 Anwendungen mit
VCL für .NET ist die Programmierumgebung für die Erstellung von RAD
Studio-Anwendungen mit VCL-Komponenten. Mit Hilfe von RAD Studio und VCL
für .NET können Benutzer beim Schreiben neuer Anwendungen die
Leistungsstärke von Delphi weiterhin nutzen und Win32-Anwendungen in das
.NET Framework migrieren.
Diese Technologien erleichtern Delphi-Entwicklern den Wechsel zu .NET und
vereinfachen die Portierung vorhandener Delphi-Anwendungen. RAD Studio
unterstützt die Microsoft .NET Framework-Entwicklung mit der Sprache Delphi
und VCL für .NET-Steuerelementen. RAD Studio-ASP.NET unterstützt außerdem
die Entwicklung von Web Forms- und SOAP-/XML-Web-Services-Anwendungen.
VCL für .NET umfasst einen Großteil der gebräuchlichsten Klassen der VCL für
Win32. Das .NET Framework ist für... more ( see page 77)
RAD Studio-Web-Services verwenden das .NET Framework als Service-Schicht.
Web-Service-Client-Anwendungen, die mit Delphi 7 oder einer früheren Version
erstellt wurden, müssen folglich geändert werden, wenn sie das .NET Framework
verwenden sollen.
In diesem Thema wird Folgendes behandelt:
• Vorhandene Anwendungen ändern und ergänzen
• Hinweise zur Implementierung
1.5.1 Änderungen aufgrund der Unterstützung von 64-Bit
.NET 2.0
Für die Unterstützung von 64-Bit .NET 2.0 waren einige Änderungen erforderlich. Wegen dieser Änderungen könnten kleinere
Quelltextänderungen erforderlich werden, damit vorhandene Anwendungen korrekt arbeiten. Detaillierte Informationen zu den
einzelnen Änderungen finden Sie unter Ausführen von Änderungen ( see page 171).
Änderungen zur Unterstützung von 64-Bit
Dieses Thema beschreibt, wie vorhandene VCL.NET-Anwendungen geändert werden sollten, damit sie mit den zur
Unterstützung von 64-Bit .NET 2.0 vorgenommenen Änderungen korrekt arbeiten.
Zur Unterstützung von einzelnen ausführbaren Single Source-Dateien für 32- und 64-Bit-Plattformen wurden Handle-Typen von
LongWord in IntPtr geändert. IntPtr ist ein Integer-Typ, der die Größe eines Zeigers auf der zugrunde liegenden Plattform
angibt, die in .NET als eine Struktur implementiert ist. IntPtr unterstützt keine Zuweisungen, Vergleiche und arithmetische
Operationen, die häufig mit Handles in der VCL ausgeführt werden. Zur Bereitstellung der Abwärtskompatibilität wurde ein
Record-Hilfstyp angelegt, der häufig verwendete Operationen durch das Überladen von Operatoren unterstützt.
Für den überwiegenden Teil Ihres Quelltextes sind keine Modifikationen erforderlich, um ihn auf beiden (x86 und x64)
Plattformen auszuführen, aber es gibt einige Fälle, für die kleinere Änderungen nötig sind..
Warnung: Diese Modifikationen sind wegen der Änderungen zur Unterstützung von 64-Bit-Systemen erforderlich. Sie müssen
für Anwendungen vorgenommen werden, die sowohl auf 32-Bit- als auch auf 64-Bit-Systemen ausgeführt werden sollen.
Geänderte Quelltext-Pattern
Die folgenden Bereiche von Quelltext-Pattern müssen evtl. geändert werden:
• Case-Anweisungen
• Typumwandlungen von Aufzählungen
• Verwendung von Handles mit Mengen
• Array-Indizierungen
• Annahme einer bestimmten Handle-Größe
62
1.5 Anwendungen mit
RAD Studio für .NET
Portieren von VCL-Anwendungen nach
Windows API-Deklarationen
Es wurde eine Reihe von Deklarationen geändert, um einzelne ausführbare Dateien für x86- und x64-Plattformen korrekt zu
unterstützen. In den meisten Fällen wurde der Typ eines Funktionsparameters oder Strukturfeldes geändert. Der Compiler stellt
Informationen über einfache Korrekturmöglichkeiten von betroffenem Quelltext bereit. Zu den Änderungen, bei denen die
Korrektur weniger offensichtlich ist, zählen Callback-Funktionen und Modifikationen an Variant-Records. Eine Liste der fraglichen
Callbacks und Records finden Sie in dem Thema Ausführen von Änderungen ( see page 171).
Modifizierte Callback-Funktionen
Bei ein paar wenigen Callback-Funktionen wurden die Parameter geändert, daher muss jedes Vorkommen dieser Funktionen
geändert werden.
1
Modifizierte Variant-Records
Variant-Records sind in Delphi.NET als Records mit expliziten Feld-Layouts implementiert (im Gegensatz zu sequenziellen
Layouts, die der Standard im.NET Framework sind). Dadurch können mehrere Felder am selben Feld-Offset “überlagert”
werden, was zu inkorrekten Deklarationen auf 64-Bit-Plattformen führt, wenn die Struktur Felder mit variabler Größe (wie z.B.
IntPtr) enthält. Variant-Records mit solchen Feldern wurden so geändert, dass sie nur noch einen “varianten” Fall enthalten.
Die übrigen Felder wurden in Eigenschaften geändert, um die Abwärtskompatibilität beizubehalten. In den meisten Fällen ist der
Quelltext von diesen Änderungen nicht betroffen. Wenn Sie jedoch ein Feld als einen var-Parameter übergeben, der jetzt als
einen Eigenschaft deklariert ist, müssen Sie den Quelltext verändern.
Siehe auch
Ausführen von Änderungen (
see page 171)
1.5.2 Portieren von VCL-Anwendungen nach RAD Studio
Bei der Entwicklung der VCL für RAD Studio wurde großer Wert auf die Abwärtskompatibilität gelegt. Dennoch sind einige
Unterschiede in der Funktionsweise von VCL-Anwendungen zu berücksichtigen, die durch die verwaltete Umgebung von .NET
bedingt sind. In vorliegenden Dokument werden die meisten dieser Unterschiede beschrieben und einige Maßnahmen erläutert,
die beim Portieren einer VCL-Anwendung in die .NET-Umgebung ergriffen werden sollten.
Die Neuerungen in Delphi selbst sind nicht Gegenstand dieses Dokuments. Hier wird lediglich erläutert, wie vorhandener
Delphi-Code der neuen RAD Studio-Sprache und dem VCL-Framework zugeordnet wird. Das Dokument enthält Links zu
speziellen Themen in der Delphi-Sprachreferenz, in denen die neuen Leistungsmerkmale der Sprache detailliert beschrieben
sind.
In diesem Thema werden folgende Bereiche erläutert:
• Migrieren von Zeigertypen
• Migrieren von Char- und String-Typen
• Erstellen und Freigeben von Objekten
• Aufrufen der Win32-API
• Migrieren von Varianten
• Arbeiten mit Ressourcen
• Das Ereignis OnCompare
Zeigertypen migrieren
Zeigertypen sind nicht CLS-kompatibel und gelten im Kontext der allgemeinen .NET-Laufzeitumgebung (.NET Common
63
Portieren von VCL-Anwendungen nach
RAD Studio für .NET
1.5 Anwendungen mit
Language Runtime) nicht als sicher. Aus diesem Grund wurden die Zeiger bei der Migration der VCL eliminiert und durch
entsprechende Alternativen, wie dynamische Arrays, Indizes in Arrays oder Strings, Klassenreferenzen usw. ersetzt. Wenn Sie
eine VCL-Anwendung portieren, müssen Sie zunächst feststellen, wo Zeiger verwendet werden, und diese nach Bedarf ersetzen.
Untypisierte Zeiger
Untypisierte Zeiger gelten als unsicherer Code. Wenn der Quelltext untypisierte Zeiger enthält, schlägt seine Überprüfung durch
das .NET-Dienstprogramm PEVerify fehl. Code, der sich nicht auf Typsicherheit prüfen lässt, kann aber in einer sicheren
Umgebung (etwa auf einem Webserver, einem SQL-Datenbankserver, einem Web-Browser-Client oder einem Computer mit
strengen Sicherheitsrichtlinien) nicht ausgeführt werden.
In der VCL wurden untypisierte Zeiger durch strenger typisierte Werte ersetzt. An Stellen, an denen üblicherweise untypisierte
Zeiger verwendet wurden, finden Sie nun TObject-Objekte. Beispielsweise sind die Elemente der Klasse TList jetzt vom Typ
TObject und nicht mehr vom Typ Pointer. Jeder Typ kann in ein Objekt konvertiert, und ein TObject kann in jeden anderen Typ
umgewandelt werden (sogar Werttypen wie Integer, Double usw.). Bei der Umwandlung von TObject in einen anderen Typ wird
ein Laufzeitfehler generiert, wenn das Objekt keine Instanz des Typs ist, in den es konvertiert wird. Die Semantik für diese
Umwandlung entspricht also derjenigen des Operators as.
1
In einigen Fällen wurde der Typ Pointer durch einen präziseren Typ ersetzt. Beispielsweise gibt die Funktion ClassInfo für
TObject einen Wert vom Typ Type und nicht einen untypisierten Zeiger zurück.
Untypisierte Zeiger für Parameter, deren Typ sich in Abhängigkeit vom Kontext ändert, wurden durch Überladen der Routine und
Verwendung von var-Parametern mit geeigneten Typen ersetzt. Untypisierte Zeiger, die in API-Aufrufen für nicht verwaltetem
Code (wie in Aufrufen der Windows-API oder einer Datenzugriffsschicht wie der BDE) Anwendung finden, werden durch
System.IntPtr ersetzt. So wird beispielsweise dem Typ TBookmark, der in der Unit Db definiert ist, nun der Typ IntPtr zugewiesen.
Code, in dem mit Hilfe des Adressoperators (@) ein Wert in einen untypisierten Zeiger umgewandelt wird, muss geändert
werden. Wenn der untypisierte Zeiger durch den Typ TObject ersetzt wurde, müssen Sie normalerweise nur den Operator @
entfernen. Bei Werttypen müssen Sie unter Umständen den Operator @ durch eine Typumwandlung zu TObject ersetzen, um
den Wert "abzugrenzen". Der Code
var
P: Pointer;
I: Integer;
begin
I := 5;
P := @I;
könnte wie folgt konvertiert werden:
var
P: TObject;
I: Integer;
begin
I := 5;
P := TObject(I);
Wenn der untypisierte Zeiger zu IntPtr geändert wurde, müssen Sie mit Hilfe der Klasse Marshal nicht verwalteten Speicher
zuweisen und dort einen Wert speichern, anstatt den Operator @ zu verwenden. Der Code
var
P: Pointer;
R: TRect;
begin
R := Rect(0, 0, 100, 100);
P := @R;
CallSomeAPI(P);
könnte wie folgt konvertiert werden:
var
P: IntPtr;
64
1.5 Anwendungen mit
RAD Studio für .NET
Portieren von VCL-Anwendungen nach
R: TRect;
begin
R := Rect(0, 0, 100, 100);
P := Marshal.AllocHGlobal(Marshal.SizeOf(TypeOf(TRect)));
try
Marshal.StructureToPtr(TObject(R), P, False);
CallSomeAPI(P);
finally
Marshal.FreeHGlobal(P);
end;
Anmerkung: Nicht verwalteter Speicher, den Sie mit Hilfe der Klasse Marshal zugewiesen haben, muss explizit freigegeben
werden. Der Garbage Collector von .NET führt keine Bereinigung von nicht verwaltetem Speicher durch.
Prozedurzeiger
Eine spezielle Form von untypisierten Zeigern sind die Prozedurzeiger. In verwaltetem Code werden Prozedurzeiger durch
.NET-Delegates ersetzt, die strenger typisiert sind. Deklarationen von prozeduralen Typen entsprechen in RAD Studio
Delegate-Deklarationen. Mit dem Operator @ können Sie einen Delegate für eine Methode oder eine globale Routine
bereitstellen. Der entsprechende Code sieht in etwa so aus, wie Code zur Bereitstellung eines prozeduralen Zeigers auf der
Win32-Plattform. Aus diesem Grund sind für die Portierung oft keine Änderungen erforderlich. Sie müssen aber beachten, dass
Sie bei Verwendung des @-Operators keinen Zeiger, sondern einen neuen Delegate erhalten.
Wenn Sie zum Beispiel einen Prozedurzeiger mit dem Operator @ an eine nicht verwaltete API übergeben, wie in
Handle := SetTimer(0, 0, 1, @TimerProc);
ist die einzige Referenz auf den Delegate diejenige, die im API-Aufruf übergeben wurde, da der Delegate ad hoc erzeugt wird.
Das bedeutet, dass der Garbage Collector den Delegate nach der Rückkehr des API-Aufrufs löscht. Wenn der nicht verwaltete
Code wie im vorliegenden Fall die Prozedur nach der Rückkehr des API-Aufrufs aufruft, tritt eine Laufzeit-Exception auf, da der
Delegate nicht mehr vorhanden ist. Sie können diese Situation umgehen, indem Sie den Delegate einer globalen Variable
zuweisen und diese an die nicht verwaltete API übergeben.
Wird ein Prozedurzeiger über einen Aufruf der Windows-API-Funktion GetProcAddress bereitgestellt, wird er als IntPtr
zurückgegeben. Dieser Wert ist kein Delegate. Er kann nicht in einen Delegate umgewandelt und aufgerufen werden. Für die
Übersetzung eines derartigen Codes wird normalerweise mit Platform Invoke eine nicht verwaltete API aufgerufen wird. Mit der
Funktion GetProcAddress lässt sich feststellen, ob die API verfügbar ist, damit bei der Verwendung von Platform Invoke keine
Laufzeit-Exception auftritt. Der Code
type
TAnimateWindowProc = function(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): BOOL; stdcall;
var
AnimateWindowProc: TAnimateWindowProc = nil;
UserHandle: HMODULE;
begin
UserHandle := GetModuleHandle('USER32');
if UserHandle <> 0 then
@AnimateWindowProc := GetProcAddress(UserHandle, 'AnimateWindow');
...
if AnimateWindowProc <> nil then
AnimateWindowProc(Handle, 100, AW_BLEND or AW_SLIDE);
würde für die .NET-Plattform folgendermaßen konvertiert:
[DllImport('user32.dll', CharSet = CharSet.Ansi, SetLastError = True, EntryPoint =
'AnimateWindow')]
function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): BOOL; external;
var
UserHandle: HMODULE;
CanAnimate: Boolean;
begin
UserHandle := GetModuleHandle('USER32');
if UserHandle <> 0 then
65
1
Portieren von VCL-Anwendungen nach
RAD Studio für .NET
1.5 Anwendungen mit
CanAnimate := GetProcAddress(UserHandle, 'AnimateWindow') <> nil
else
CanAnimate := False;
...
if CanAnimate then
AnimateWindow(Handle, 100, AW_BLEND or AW_SLIDE);
Anmerkung: Das obige .NET-Beispiel zeigt noch eine späte Bindung mit der AnimateWindow-API. Beim Laden dieses Codes
wird keine Exception ausgelöst, wenn die DLL oder die Funktion nicht verfügbar ist. Der Funktionsaufruf wird nur bei der ersten
Ausführung des Codes aufgelöst.
String-Zeiger
Code mit dem Typ PChar wird in folgenden Situationen verwendet:
1
• Der Typ referenziert einen nullterminierten String (speziell bei Verwendung mit einem Windows-API-Aufruf oder mit einer
älteren RTL-Funktion).
• Der Typ dient zum Navigieren durch einen String, wenn dessen Wert verarbeitet wird.
• Der Typ referenziert einen Byte-Block (in Delphi für Win32 umfasst der Typ Char ein Byte, auf der .NET-Plattform besteht er
aus zwei Bytes).
Im ersten Fall können Sie den Typ PChar in der Regel durch den Typ string ersetzen. Bei Windows-API-Aufrufen verwenden
die verwalteten Versionen der APIs nun einen String oder die Klasse StringBuilder anstelle eines PChar-Typs, wobei die
Umwandlungen implizit auf der Marshaling-Schicht durchgeführt werden. Beachten Sie, dass viele RTL-Funktionen, die den
Typ PChar unterstützt haben, aus der RTL entfernt wurden. Sie müssen diese Funktionen nun durch die entsprechenden
Versionen vom Typ string ersetzen. Die folgende Tabelle enthält die Funktionen der SysUtils-Units, die entfernt wurden,
weil sie auf dem Typ PChar basierten, sowie die entsprechenden Versionen des Typs string:
PChar-Version
String-Version
AnsiExtractQuotedStr
AnsiDequotedStr oder DequotedStr
AnsiLastChar, AnsiStrLastChar
(Verwendung des Indexoperators und der String-Länge)
AnsiStrComp, StrComp
CompareStr, AnsiCompareStr, WideCompareStr
AnsiStrIComp, StrIComp
CompareText, AnsiCompareText, WideCompareText
AnsiStrLComp, StrLComp
System.String.Compare (StartsStr)
AnsiStrLIComp, StrLIComp
System.String.Compare (StartsText)
AnsiStrLower, StrLower
AnsiLowerCase, WideLowerCase,
AnsiStrUpper, StrUpper
UpCase, AnsiUpperCase, WideUpperCase
AnsiStrPos, StrPos, AnsiStrScan, StrScan
Pos
AnsiStrRScan, StrRScan
LastDelimiter
StrLen
Length
StrEnd, StrECopy
(keine Entsprechung vorhanden)
StrMove, StrCopy, StrLCopy, StrPCopy, StrPLCopy
Copy
StrCat, StrLCat
Operator +, Verkettung
StrFmt
Format, FmtStr
StrLFmt
FormatBuf
FloatToText
FloatToStrF
FloatToTextFmt
FormatFloat
TextToFloat
FloatToStr
Wenn ein PChar-Typ zur Navigation durch einen String verwendet wird, müssen Sie den Code neu schreiben und PChar durch
66
1.5 Anwendungen mit
RAD Studio für .NET
Portieren von VCL-Anwendungen nach
einen Integer-Typ ersetzen, der als Index für den String fungiert. Dabei müssen Sie feststellen können, wann das Ende des
Strings erreicht ist. Bei Verwendung des Typs PChar befindet sich am Ende des Strings ein Null-Zeichen, an dem der Code das
String-Ende erkennt. Da Sie nun mit String und Index arbeiten, ist kein Null-Zeichen vorhanden. Sie müssen deshalb das Ende
des Strings anhand der String-Länge feststellen. Vor dem Lesen eines Zeichens muss sichergestellt werden, dass der Index
nicht hinter dem String-Ende steht, da ansonsten ein Laufzeitfehler auftritt.
Anmerkung: String-Daten können nicht geädert werden. Deshalb ist es nicht möglich, mit Hilfe eines PChar
-Typs ein Zeichen in einen vorhandenen String einzufügen. Mit Hilfe einer String-Indizierung (z.B. s[5]) ist dies jedoch möglich.
Wird ein PChar-Typ zur Referenzierung eines Byte-Blocks verwendet, wird er entweder durch einen IntPtr-Typ oder ein
dynamisches Array von Bytes (TBytes) ersetzt. Wenn ein Austausch gegen einen IntPtr-Typ durchgeführt wurde, treten
dieselben Probleme wie beim Ersetzen eines untypisierten Zeigers auf. Bei einem Austausch gegen TBytes müssen Sie unter
Umständen PChar-Werte durch einen Index im Byte-Array ersetzen, wenn in Byte-Blöcken navigiert werden soll. Dies ähnelt in
etwa dem Ersetzen von PChar durch Integerwerte zum Navigieren in Strings. Der Unterschied besteht jedoch darin, dass
Indizes in TBytes auf 0, Indizes in Strings jedoch auf 1 basieren.
Strings in Streams schreiben
In Delphi für Win32 treffen Sie häufig auf Code folgender Art:
S1 := 'Dies ist ein Test-String';
Stream.WriteBuffer(S1[1], Length(S1));
Auf der Win32-Plattform wird aufgrund dieses Codes der gesamte String in den Stream geschrieben. Derselbe Code führt auf
der .NET-Plattform aber zu einem ganz anderen Ergebnis. Auf der .NET-Plattform erzeugt der Compiler einen Aufruf der mit
Char überladenen Version von WriteBuffer. Als Folge davon wird nur ein Zeichen (S1[1]) in den Stream geschrieben.
Andere Zeigertypen
Aus der VCL wurden noch weitere typisierte Zeiger entfernt. Sie wurden in der Regel durch den Typ ersetzt, auf den sie
ursprünglich gezeigt haben. Wenn der Zeigertyp der Parameter für einen Prozeduraufruf war, wird er in einen var-Parameter
umgewandelt, sodass immer noch eine Referenz anstatt einer Kopie des Arguments übergeben wird. In bestimmten Fällen ist es
sinnvoll, einen Werttyp in einen Klassentyp zu konvertieren, damit der Code eine Objektreferenz anstelle eines typisierten
Zeigers übergibt.
Char- und String-Typen migrieren
In RAD Studio wird der Typ string dem String-Typ von .NET zugeordnet. Sie können ungehindert auf die Elemente der Klasse
String zugreifen und zu diesem Zweck einen string-Typ von Delphi verwenden. Sehen Sie sich dazu das folgende Beispiel an:
var
S: string;
begin
S := 'Dies ist ein String';
// Die Umwandlung ist nicht erforderlich.
// S := System.String(S).PadRight(25);
// Direkter Zugriff auf die Elemente der String-Klasse
S := S.PadRight(25);
S := ('Dies ist ein neuer String').PadRight(25);
ANSI-Strings und Wide-Strings
Der größte Unterschied zwischen Delphi- und RAD Studio-Strings besteht darin, dass der String-Typ nun ein Unicode
Wide-String und nicht kein AnsiString ist. Dies vereinfacht den Code für bestimmte Sprachen, da Sie sich nicht mehr um
Multibyte-Zeichensätze kümmern müssen. Dennoch muss der Code bei der Übernahme auf die Char-Größe überprüft werden,
67
1
Portieren von VCL-Anwendungen nach
RAD Studio für .NET
1.5 Anwendungen mit
da es sich nun nicht mehr um Ein-Byte-Zeichen sondern um Zwei-Byte-Zeichen handelt. Sie können weiterhin Strings mit
Ein-Byte-Zeichen verwenden, müssen diese aber nun als AnsiString anstatt als string deklarieren. Der Compiler führt eine
Konvertierung zwischen diesen Strings durch, wenn Sie eine explizite Typumwandlung verwenden oder wenn Sie die Strings
implizit umwandeln, indem Sie sie einer Variablen oder einem Parameter des jeweils anderen Typs zuweisen.
Wenn Ihr Code Aufrufe für AnsiXXX-Routinen zur Bearbeitung von Strings enthält, kann es sinnvoll sein, diese in die
entsprechende Wide String-Version zu konvertieren. Die AnsiXXX-Routinen besitzen Varianten, die den Wide-Versionen
entsprechen, und die überladenen Routinen akzeptieren Wide Strings als Parameter. Aus diesem Grund muss keine implizite
Umwandlung in Wide- und Ein-Byte-Strings (und umgekehrt) durchgeführt werden.
Anmerkung: Bei der Umwandlung von Wide-Zeichen in Ein-Byte-Zeichen können Informationen verloren gehen. Deshalb
sollten Sie diese Umwandlung vermeiden.
1
String-Operationen
Gemäß der CLR-Werttyp-Semantik geben Operationen mit Strings eine Kopie des Strings zurück, anstatt den vorhandenen
String zu ändern. Aufgrund des Mehraufwands für das Kopieren kann Code etwas von seiner Effizienz verlieren. Sehen Sie sich
das folgende Beispiel an:
var
S: string;
begin
S := 'Dies ist ein String';
S[3] := 'a';
S[4] := 't';
Nach einer Compilierung auf der Win32-Plattform ist für Zeichenersetzungen nur ein Byte Speicherplatz pro Änderung
erforderlich. In RAD Studio besteht das Ergebnis jeder Ersetzung in einer Kopie des gesamten Strings. Aus diesem Grund
sollten Sie bei der Änderung von String-Werten eine StringBuilder-Instanz verwenden. StringBuilder weist nicht verwalteten
Speicher zu und verarbeitet den String erwartungsgemäß. Nach Abschluss des Vorgangs können Sie das Ergebnis durch den
Aufruf der Methode ToString in einen String umwandeln.
Anmerkung: Die Konvertierung von StringBuilder in einen string
-Typ ist eine einfache Operation. Die String-Daten werden nicht noch einmal kopiert.
Nicht initialisierte Strings
In RAD Studio hat ein nicht initialisierter String den Wert nil. Der Compiler berücksichtigt diese Tatsache, wenn Sie einen nicht
initialisierten String mit einem leeren String vergleichen. Für die Code-Zeile
if S <> '' then ...
führt der Compiler beispielsweise den Vergleich durch und behandelt den nicht initialisierten String als leeren String. Bei anderen
String-Operationen wird ein nicht initialisierter String nicht automatisch als leerer String behandelt (darin besteht ein Unterschied
zu Code, der auf der Win32-Plattform compiliert wurde). Dies kann zu einer Laufzeit-Exception aufgrund eines leeren Objekts
führen.
Typumwandlungen
Anders als bei Delphi für Win32 besteht in RAD Studio kein Unterschied zwischen einer expliziten Typumwandlung und dem
Operator as. In beiden Fällen ist die Umwandlung nur dann erfolgreich, wenn die zu konvertierende Variable eine Instanz des
Typs ist, in den sie umgewandelt werden soll. Dies bedeutet, dass Code, der vorher problemlos ausgeführt wurde (durch
Umwandlungen zwischen nicht kompatiblen Datentypen), nun unter Umständen eine Laufzeit-Exception generiert.
Botschafts-Cracker
Die meisten Probleme im Zusammenhang mit der Typumwandlung treten bei Botschafts-Cracker-Typen auf. In der VCL für
Win32 enthielt die Unit Messages verschiedene Record-Typen, mit denen die Parameter einer Windows-Botschaft repräsentiert
werden. Diese Records hatten alle dieselbe Größe, und ihre Felder waren für das Extrahieren der Informationen aus der
68
1.5 Anwendungen mit
RAD Studio für .NET
Portieren von VCL-Anwendungen nach
Windows-Botschaft ausgelegt. So konnten Sie Botschaftsparameter, die beispielsweise als TMessage-Typ vorlagen, in den Typ
TWMMouse konvertieren, und anschließend die gewünschten Informationen extrahieren. Dieses Vorgehen funktionierte
problemlos, da die beiden Typen dieselbe Größe hatten und eine explizite Umwandlung keine Exception erzeugte, wenn der Typ
mit der Umwandlung wieder rückinterpretiert wurde. In .NET ist eine derartige Rückinterpretation einer Umwandlung nicht
erlaubt, und derselbe Code würde deshalb in RAD Studio eine Exception aufgrund einer unzulässigen Umwandlung generieren.
Um diese Situation zu umgehen, sind die Botschafts-Cracker-Typen in RAD Studio keine Records sondern Klassen. Anstatt den
TMessage-Wert in einen anderen Typ wie TWMMouse umzuwandeln, müssen Sie den anderen Typ instantiieren und den
Originaltyp TMessage als Parameter übergeben. Anstelle von
procedure MyFunction(Msg: TMessage);
var
MouseMsg: TWMMouse;
begin
if Msg.Msg = WM_MOUSE then
with Msg as TWMMouse do
...
end;
1
würden Sie etwa folgenden Code verwenden:
procedure MyFunction(Msg: TMessage);
var
MouseMsg: TWMMouse;
begin
if Msg.Msg = WM_MOUSE then
with TWMMouse.Create(Msg) do
...
end;
Für eine Umwandlung in die andere Richtung (von einem spezialisierten Botschaftstyp in den Typ TMessage) steht die neue
Funktion UnwrapMessage zur Verfügung, die in der Unit Messages deklariert ist.
Auf Protected-Elemente einer Klasse in anderen Units zugreifen
Eine andere Technik, die nun als unzulässige Typumwandlung gilt, ist der Zugriff auf die Protected-Elemente einer Klasse, die in
einer anderen Unit deklariert ist. In Delphi für Win32 können Sie einen Nachkommen der Klasse deklarieren, auf deren Elemente
Sie zugreifen möchten:
type
TPeekAtWinControl = class(TWinControl);
Dann können Sie durch Umwandlung eines beliebigen TWinControl-Nachkommens in TPeekAtWinControl auf die
Protected-Methoden der Klasse TWinControl zugreifen, da TPeekAtWinControl in derselben Unit definiert ist.
In RAD Studio kann diese Technik normalerweise nicht erfolgreich angewendet werden, da der TWinControl-Nachkomme keine
Instanz von TPeekAtWinControl ist. Durch die unzulässige Umwandlung wird zur Laufzeit eine Exception ausgelöst.
Da diese Technik in Win32-Umgebungen häufig verwendet wird, erkennt der Compiler dieses Muster und lässt die Umwandlung
zu. Der Compiler hat aber keine Informationen darüber, in welche Assemblierung eine Unit eingebunden wird, wenn er den
Quelltext compiliert. Wenn die Units in Assemblierungen eingebunden werden, tritt zur Laufzeit eine Typ-Exception auf.
Probleme beim Überschreiten von Assemblierungsgrenzen lassen sich durch Interfaces vermeiden, die den Zugriff auf die
fraglichen Protected-Elemente ermöglichen. Einige Klassen der VCL (TControl, TWinControl, TCustomForm) verwenden nun
diese Technik. Sie werden deshalb zusätzliche Interfaces für den Zugriff auf Protected-Elemente vorfinden (IControl,
IWinControl, IMDIForm).
Objekte erstellen und freigeben
Eine Beschreibung spezieller Probleme bei der Programmierung in Delphi auf der speicherverwalteten Plattform .NET finden Sie
im Thema Speicherverwaltung auf der .NET-Plattform.
Aufgrund der Unterschiede bei der Instantiierung und Freigabe von Objekten steht für RAD Studio-Klassen keine
69
Portieren von VCL-Anwendungen nach
RAD Studio für .NET
1.5 Anwendungen mit
BeforeDestruction- oder AfterConstruction-Methode zur Verfügung. Alle Klassen, die diese Methoden überschreiben,
müssen neu geschrieben werden.
Die Tatsache, dass diese Methoden und die Eigenschaft OldCreateOrder in der VCL auf der .NET-Plattform nicht vorhanden
sind, hat Auswirkungen auf Formulare und Datenmodule, die darauf angewiesen sind, dass OldCreateOrder den Wert False
hat. Die Ereignisse OnCreate und OnDestroy reagieren nun so, als wäre die Eigenschaft OldCreateOrder auf den Wert
True gesetzt. Diese Ereignisse werden jetzt nur vom Konstruktor oder vom Destruktor aufgerufen.
Anmerkung: Da das Ereignis OnDestroy von einem Destruktor aufgerufen wird, ist nicht sichergestellt, dass dieser Aufruf
tatsächlich erfolgt. Wird in der Anwendung nicht die Methode Free aufgerufen, erfolgt auch kein Aufruf des Objekt-Destruktors
(auch dann nicht, wenn eine Garbage Collection stattfindet).
Mit der nicht verwalteten Win32-API arbeiten
1
Die VCL ist vom Grundsatz her für eine Zusammenarbeit mit der Windows-API konzipiert. Dieses Zusammenspiel ist ähnlich
geregelt wie bei Systems.Windows.Forms: Die VCL ist eine verwaltete API, die Aufrufe an die Windows-API tätigt und dabei
ein Marshaling zwischen den verwalteten Strukturen der VCL und den nicht verwalteten Typen der Windows-API ausführt.
Einige Units, allen voran die RTL, wurden portiert, sodass sie sich am Beginn der CLR und nicht der Windows-API befinden.
Diese Units sind flexibler, da sie in jeder .NET-Umgebung funktionieren. Dies gilt auch für Umgebungen, die das
Windows-Betriebssystem nicht unterstützen (Compact Framework, Mono usw.). Units, die das Windows-Betriebssystem
benötigen, sind mit der Direktive platform gekennzeichnet. In Units, die nicht mit der Direktive platform markiert sind, sind die
einzelnen Methoden oder Klassen, für die Windows erforderlich ist, mit dieser Direktive gekennzeichnet.
Windows-Abhängigkeiten isolieren
Um eine relative Plattformunabhängigkeit in RTL-Units zu erreichen, wurden einige Methodenfunktionen, die auf Windows
basieren, in die Unit WinUtils verlagert. Zusätzlich wurden einige Klassen so geändert, dass sie eher auf CLR als auf
Windows basieren.
TObject, Exception, TPersistent und TComponent sind Klassen zugeordnet, die in .NET Framework implementiert sind. Auf
diese Weise können sie relativ problemlos in andere .NET-Anwendungen integriert werden. Da die entsprechenden
CLR-Klassen (System.Object, System.Exception, System.Marshal und System.Component) nicht alle von der VCL benötigten
Methoden enthalten, werden die fehlenden Methoden über Delphi-Deklarationen von unterstützenden Klassen zur Verfügung
gestellt. Dieser Mechanismus ist in den meisten Fällen transparent. Es gibt jedoch einige wenige Klassen, für die Sie kleinere
Änderungen im Code vornehmen müssen. Bei TComponent ist beispielsweise FComponentState nun eine Eigenschaft von
TComponentHelper und nicht mehr ein Feld von TComponent. Das bedeutet, dass Sie die Methoden Include und Exclude für
FComponentState nicht verwenden können, da diese bei Übergabe einer Eigenschaft mit einer Kopie des Eigenschaftswerts
arbeiten, wodurch FComponentState nicht geändert wird. Der Code
Exclude(FComponentState, csUpdating);
muss deshalb folgendermaßen neu geschrieben werden:
FComponentState := FComponentState – [csUpdating];
TThread wurde ebenfalls geändert und dem CLR-Thread-Objekt zugeordnet. Das heißt, dass das Thread-Handle nun kein
Ordinaltyp mehr ist, sondern eine Referenz auf das zugrunde liegende CLR-Thread-Objekt darstellt. Das bedeutet weiterhin,
dass TThread keine ThreadID mehr unterstützt, da das CLR-Thread-Objekt die entsprechende Unterstützung nicht bereitstellt.
Wenn eine Thread-Klasse eine ThreadID benötigt, sollten Sie diese von TWin32Thread ableiten.
Die Win32-API aufrufen
Viele Windows-APIs wurden geändert und verfügen nun über eine verwaltete Schnittstelle. Oft wurden Parametertypen
geändert, vor allem, um Zeiger zu eliminieren. PChar-Typen wurde durch string- oder StringBuilder-Typen ersetzt.
Wenn Ihre Anwendung eine Windows-API aufruft, erfolgt ein Aufruf für eine nicht verwaltete DLL. Aus diesem Grund müssen die
Parameterwerte durch Marshaling in nicht verwalteten Speicher eingefügt werden, in dem Windows sie verarbeiten kann. Die
Ergebnisse werden danach mittels Marshaling wieder in verwalteten Speicher transferiert. In den meisten Fällen wird das
70
1.5 Anwendungen mit
RAD Studio für .NET
Portieren von VCL-Anwendungen nach
Marshaling automatisch durchgeführt, basierend auf den Attributen, die den API- oder Typdeklarationen hinzugefügt wurden. Es
gibt jedoch auch Situationen, in denen ein explizites Marshaling erforderlich ist. Dies betrifft vor allem den Umgang mit Zeigern
auf eine Struktur. Verwenden Sie zu diesem Marshaling die Klasse System.Marshal. Eine weitere Klasse, die beim Marshaling
von Daten in und aus nicht verwaltetem Speicher sehr hilfreich ist, ist BitConverter. Beispielsweise enthält die Klasse Marshal
keine Methode, mit der ein Double-Wert gelesen oder geschrieben werden kann. Dafür ist aber das Lesen und Schreiben von
Int64-Werten möglich, die dieselbe Größe haben. Mit der Klasse BitConverter können letztere in und aus Double-Werten
umgewandelt werden:
// Double in nicht verwalteten Speicher kopieren:
Mem := Marshal.AllocHGlobal(SizeOf(Int64));
Marshal.WriteInt64(Mem, BitConverter.DoubleToInt64Bits(DoubleVariable));
...
// Double aus nicht verwaltetem Speicher kopieren:
DoubleVariable := BitConverter.Int64BitsToDouble(Marshal.ReadInt64(Mem));
Bei Verwendung der Marshal-Klasse dürfen Sie nicht vergessen, dass nicht verwalteter Speicher explizit freigegeben werden
muss. Die Freigabe erfolgt nicht automatisch durch den Garbage Collector.
Mit Windows-Botschaften arbeiten
Eine Änderung bei der Zusammenarbeit von RAD Studio-Anwendungen und Windows betrifft die Funktionsweise von
Botschaftsbehandlungsroutinen. Deklaration und Verwendung von Botschaftsbehandlungsroutinen sind größtenteils identisch,
die Botschafts-Cracker-Typen wurden aber von Records in Klassen geändert. Typumwandlungen zwischen
Botschafts-Cracker-Typen sind nun nicht mehr möglich. Die meisten Änderungen wurden bereits im Abschnitt über
Typumwandlungen erläutert. Im Folgenden finden Sie noch einige zusätzliche Punkte, die beachtet werden müssen.
• Beim Portieren von Code, der eine Botschaft sendet, reicht es nun nicht mehr aus, den Botschafts-Cracker auf dem Stack zu
deklarieren, die Felder auszufüllen und ihn in einem Aufruf von SendMessage zu übergeben. Sie müssen zusätzlich einen
Aufruf zur Erstellung des Botschafts-Crackers hinzufügen, da es sich bei ihm nun um eine Klasse handelt.
• Innerhalb einer Botschaftsbehandlungsroutine können Sie mit dem Schlüsselwort inherited weiterhin eine geerbte
Botschaftsbehandlungsroutine aufrufen. Dabei müssen Sie jetzt jedoch sicherstellen, dass der Botschafts-Cracker-Typ mit
demjenigen in der geerbten Botschaftsbehandlungsroutine identisch ist. Übernimmt die geerbte
Botschaftsbehandlungsroutine beispielsweise einen Parameter vom Typ TWMMouse und benötigt Ihre
Botschaftsbehandlungsroutine nur TMessage, wird zur Laufzeit eine Exception aufgrund einer ungültigen Umwandlung
ausgelöst, wenn Sie Ihre Botschaftsbehandlungsroutine für die Verwendung von TMessage deklarieren und die geerbte
Routine aufrufen. Aus diesem Grund müssen Sie beim Aufruf der geerbten Botschaftsbehandlungsroutine sicherstellen, dass
der Botschaftsparameter mit dem der geerbten Routine übereinstimmt.
• Wenn eine Botschaft Parameter hat, die als Zeiger auf Records (oder ganz allgemein als Zeiger auf eine beliebe
Komponente) fungieren, hat der entsprechende Botschafts-Cracker Eigenschaften, die diese Records repräsentieren. Wichtig
dabei ist die Tatsache, dass es sich um Eigenschaften und nicht um Felder handelt. Deshalb können Sie zwar die Felder des
Record direkt aus der Eigenschaft laden, wenn die Behandlungsroutine aber Feldwerte ändern muss, können Sie keine
direkten Zuweisungen an die Felder des Record durchführen. Stattdessen müssen Sie den Record in eine lokale Variable
kopieren, die Änderungen vornehmen und das Ergebnis wieder der Eigenschaft zuweisen.
Die Verwendung von Windows-Botschaften ist in RAD Studio etwas aufwändiger, da neben der Arbeitsbelastung durch die
Botschaftswarteschlange noch zusätzlich das Marshaling von Werten in und aus nicht verwaltetem Speicher hinzukommt. Der
Mehraufwand ist vor allem dann spürbar, wenn ein Parameter einen Zeiger darstellt (eine Objektreferenz oder einen Zeiger
auf eine Struktur). Diese Parameter werden letzten Endes in WPARAM oder LPARAM umgewandelt. Dazu wird der Typ IntPtr
verwendet, der als Handle für einen Block mit nicht verwaltetem Speicher agiert, in dem sich eine Kopie der Struktur befindet.
Objektreferenzen werden mit Hilfe der Klasse GCHandle umgewandelt. In den meisten Fällen wird das Marshaling dieser
Parameter (in und aus dem Typ IntPtr) von den vordefinierten Botschafts-Cracker-Typen durchgeführt. Wenn Sie jedoch
eigene Botschaften definieren, müssen Sie das Marshaling eventuell selbst ausführen. Die in der Unit Controls definierten
Botschafts-Cracker-Klassen demonstrieren, wie das Marshaling zu erfolgen hat.
Die VCL definiert und verwendet verschiedene private-Botschaftstypen. Die meisten dieser Botschaftstypen befinden sich in der
Unit Controls und besitzen Bezeichner der Form CM_XXX oder CN_XXX. Aufgrund des zusätzlichen Aufwands durch das
Marshaling von Botschaften wurden einige der CM_XXX-Botschaftstypen geändert oder eliminiert und durch einen
Mechanismus ersetzt, der in der .NET-Umgebung weniger aufwändig ist. In der folgenden Tabelle sind die Botschaftstypen
aufgeführt, die geändert wurden. Außerdem wird kurz beschrieben, wie die entsprechende Aufgabe in RAD Studio
durchgeführt wird:
71
1
Portieren von VCL-Anwendungen nach
1
RAD Studio für .NET
1.5 Anwendungen mit
Botschaftstyp
Änderung
CM_FOCUSCHANGED
Ersetzt
durch
eine
Protected-Methode
(FocusChanged)
für
TWinControl.
Botschaftsbehandlungsroutinen werden durch eine Variante der Methode FocusChanged
ersetzt. Anstatt Botschaften zu senden, wird FocusChanged unter Verwendung des
IWinControl-Interface aufgerufen.
CM_MOUSEENTER
Die Bedeutung von LPARAM hat sich geändert. Früher übergab LPARAM eine Objektreferenz
auf das untergeordnete Steuerelement, in das die Maus bewegt wurde. Nun übergibt LPARAM
den Index des untergeordneten Steuerelements in der Liste FWinControls oder FControls.
CM_MOUSELEAVE
Die Bedeutung von LPARAM hat sich geändert. Früher übergab LPARAM eine Objektreferenz
auf das untergeordnete Steuerelement, aus dem die Maus bewegt wurde. Nun übergibt
LPARAM den Index des untergeordneten Steuerelements in der Liste FWinControls oder
FControls.
CM_BUTTONPRESSED
Ersetzt durch eine Protected-Methode (ButtonPressed) für TSpeedButton. Diese Botschaft
wurde nur von TSpeedButton verwendet. Die Botschaftsbehandlungsroutine CMButtonPressed
wurde durch ButtonPressed ersetzt, die direkt aufgerufen wird.
CM_WINDOWHOOK
Veraltet.
TApplication.HookMainWindow
und
TApplication.UnhookMainWindow
public-Methoden, die direkt aufgerufen werden können.
sind
CM_CONTROLLISTCHANGE Ersetzt
durch
eine
Protected-Methode
(ControlListChange)
für
TWinControl.
Botschaftsbehandlungsroutinen werden durch eine Variante der Methode ControlListChange
ersetzt.
CM_GETDATALINK
Ersetzt durch eine Protected-Methode (GetDataLink) für verschiedene datensensitive
Steuerelemente. Der Aufruf erfolgt über das neue Interface IDataControl. Bei der Erstellung
eigener datensensitiver Steuerelemente (die nicht von einer in DBCtrls vorhandenen Klasse
abgeleitet sind) muss IDataControl implementiert werden, wenn das Steuerelement in einer
DBCGrid-Klasse eingesetzt werden soll.
CM_CONTROLCHANGE
Ersetzt durch eine Protected-Methode (GetDataLink) für verschiedene datensensitive
Steuerelemente. Der Aufruf erfolgt über das neue Interface IDataControl. Bei der Erstellung
eigener datensensitiver Steuerelemente (die nicht von einer in DBCtrls vorhandenen Klasse
abgeleitet sind) muss IDataControl implementiert werden, wenn das Steuerelement in einer
DBCGrid-Klasse eingesetzt werden soll.
CM_CHANGED
Die Bedeutung von LPARAM hat sich geändert. Früher übergab LPARAM eine Objektreferenz,
nun wird ein Hash-Code für das geänderte Objekt übergeben.
CM_DOCKCLIENT
Ersetzt
durch
eine
Protected-Methode
(DockClient)
für
TWinControl.
Botschaftsbehandlungsroutinen werden durch eine Variante der Methode DockClient ersetzt.
CM_UNDOCKCLIENT
Ersetzt
durch
eine
Protected-Methode
(UndockClient)
für
TWinControl.
Botschaftsbehandlungsroutinen werden durch eine Variante der Methode UndockClient
ersetzt.
CM_FLOAT
Ersetzt
durch
eine
Protected-Methode
(FloatControl)
für
TWinControl.
Botschaftsbehandlungsroutinen werden durch eine Variante der Methode FloatControl ersetzt.
CM_ACTIONUPDATE
Veraltet. TApplication.DispatchAction ist nun public und wird anstatt über eine Botschaft direkt
aufgerufen.
CM_ACTIONEXECUTE
Veraltet. TApplication.DispatchAction ist nun public und wird anstatt über eine Botschaft direkt
aufgerufen.
Änderungen am Threading-Modell
Damit Windows-API-Aufrufe auf bestimmten Betriebssystemen ordnungsgemäß funktionieren, muss manchmal das Single
Threaded Apartment-Modell (STA) verwendet werden. Beispielsweise funktionieren in einigen Versionen von Windows 98 die
Dialogfelder zum Öffnen und Speichern nur dann, wenn die RAD Studio-Anwendung auf dem Single Threaded
72
1.5 Anwendungen mit
RAD Studio für .NET
Portieren von VCL-Anwendungen nach
Apartment-Modell basiert. Für alle Bereiche der VCL, die COM verwenden, ist dieses Modell erforderlich.
Das Threading-Modell wird bei der ersten Ausführung des Prozesses eingerichtet. Wenn Sie eine ausführbare Datei erstellen, ist
die Einrichtung sehr einfach: Fügen Sie das Attribut [STAThread] in die Zeile ein, die unmittelbar vor der Anweisung begin in
der dpr-Datei steht. Bei der Erstellung einer DLL kann das Threading-Modell nicht auf diese Weise aktiviert werden. Sie können
aber die Prozedur CheckThreadingModel in der Unit SysUtils aufrufen, um eine Exception auszulösen, wenn die Anwendung
eine Methode aufruft, für die ein bestimmtes Threading-Modell erforderlich ist.
Diese Einschränkung ist in .NET bekannt. Microsoft Visual Studio fügt standardmäßig das Attribut STAThreadAttribute in die von
ihm erzeugten Anwendungen ein.
Migrieren von Varianten
Der Typ Variant spielt in RAD Studio eine andere Rolle als in Win32. Der Win32-Compiler ordnet den Typ Variant dem
Record-Typ zu, den COM für Varianten verwendet. In RAD Studio ist dieser Typ allgemeinerer Natur. Jedes Objekt (in RAD
Studio ist dies jeder Typ) kann nach entsprechender Bearbeitung als Variante agieren. So könnten Sie in RAD Studio einer
Variante beispielsweise ein Steuerelement zuweisen.
Der Delphi-Typ Variant ist eine Sprachnotation, die nicht mit CLS kompatibel ist. Wenn Sie in RAD Studio-Code Varianten
verwenden, die nach außen sichtbar sind, werden diese nur als System.Object zugeordnet. Aus diesem Grund steht für Code in
anderen Sprachen nicht die Flexibilität bei der Typumwandlung zur Verfügung, wie sie von Delphi-Varianten unterstützt wird.
Änderungen an TVarRec
Wenn Ihr Code Varianten verwendet, besteht durchaus die Möglichkeit, dass er trotzdem ausgeführt werden kann. Da Varianten
jedoch nicht mehr auf dem Typ TVarRec basieren, muss Code neu geschrieben werden, der mittels einer Win32-Variante auf
den zugrunde liegenden TVarRec-Record zugreift.
Anmerkung: Fast alle Funktionen der Unit Variants sind in RAD Studio implementiert. Wenn Sie den VarType einer Variante
abrufen müssen, können Sie dies tun, wobei der Code weiterhin in plattform-portierbarer Form erhalten bleibt.
Änderungen bei OLE-Varianten
Die COM Interop-Schicht führt automatisch ein Marshaling von Objekten (und somit auch von Varianten) durch. Sie können RAD
Studio-Varianten deshalb zusammen mit COM verwenden. Wenn Sie RAD Studio-Varianten mit COM nutzen, sollten Sie der
Variante aber nur COM-kompatible Typen zuweisen.
In Delphi für Win32 erzwingt der Compiler COM-Restriktionen für Daten, die einem OleVariant zugewiesen werden können. In
RAD Studio ist OleVariant einfach ein Synonym für Variante. Es wird nicht dafür gesorgt, dass der Variantenwert ein
COM-kompatibler Typ ist.
Änderungen bei benutzerdefinierten Varianten
Benutzerdefinierte Varianten verhalten sich in RAD Studio völlig anders als in Delphi. Da Varianten Objekte sind, müssen Sie
nichts unternehmen, um eine benutzerdefinierte Variante zu erstellen – jede Klasse, die Sie definieren, ist bereits ein
Variant-Typ. Damit benutzerdefinierte Varianten auch erwartungsgemäß funktionieren, sollten Sie folgende CLR-Interfaces
implementieren: IComparable, IConvertible und ICloneable. Der Delphi-Compiler kann mit Hilfe dieser Interfaces
Variant-Operationen implementieren. Dennoch lassen sich andere Variant-Typen (auch bei Verwendung dieser Interfaces) nur
mit Hilfe einer FromObject-Methode in eine benutzerdefinierte Variante (Klasse) umwandeln:
class function FromObject(AObject: System.Object): TObject; static;
FromObject übernimmt ein beliebiges Quellobjekt (die Variante, die in den benutzerdefinierten Klassentyp umgewandelt werden
soll) und gibt die entsprechende Instanz als TObject zurück.
Arbeiten mit Ressourcen
RAD Studio kann Windows-Ressourcen (res-Dateien) in Ihre Assemblierungen linken. Das bedeutet, dass Sie bei der ersten
Migration einer Anwendung die Deklaration und die Verwendung der Ressourcen nicht ändern müssen (der Code funktioniert
73
1
VCL-Anwendungen portieren
RAD Studio für .NET
1.5 Anwendungen mit
weiterhin). In einigen Fällen hätten Sie Änderungen aber wahrscheinlich sowieso vorgenommen. Wenn Sie beispielsweise
benutzerdefinierte Cursor verwenden, ist es einfacher, mit der Funktion LoadCursor der Windows-API den Cursor zu
TScreen.Cursors hinzuzufügen, als die Klasse Cursor zu verwenden und dann ein Handle auf den zugrunde liegenden Cursor
abzurufen. Für Ressourcen, die nicht Windows-spezifisch sind (wie Bitmaps, Symbole und Strings) werden Sie möglicherweise
doch auf eine .NET-Ressourcendatei zurückgreifen.
Ressourcenstrings
Wenn Sie das Schlüsselwort resourcestring verwenden, erstellt RAD Studio die Stringressourcen als .NET- und nicht als
Windows-Ressourcen. Die Erstellung erfolgt automatisch. Sie dürfen nur nicht vergessen, dass der Typ PResStringRec nicht
mehr verwendet werden kann.
1
Bitmaps
Mit Hilfe der Klasse ResourceWriter können Sie Bitmaps in .NET-Ressourcen umwandeln. Die dabei angelegte
resources-Datei kann mit Ihrer RAD Studio-Anwendung verknüpft oder als Satellite-Assemblierung weitergegeben werden.
Damit die umgewandelten Bitmaps verwendet werden können, verfügt die Methode LoadFromResourceName über neue
Varianten für die Arbeit mit .NET-Ressourcen (die alte Version von LoadFromResourceName und Methode
LoadFromResourceID werden nicht mehr unterstützt). Wenn sich Ihre Bitmaps beispielsweise in einer resources-Datei
namens MyResources.en-US.resources befinden, können Sie die Bitmaps wie folgt laden:
MyBitmap.LoadFromResourceName('MyFirstBitmap', 'MyResources',
System.Assembly.GetCallingAssembly);
In diesem Beispiel wird davon ausgegangen, dass die Ressourcen in der Assemblierung compiliert sind, die den Methodenaufruf
mit dieser Zeile enthält. Wenn die Ressourcen in eine andere Assemblierung compiliert wurden, können Sie entweder
System.Assembly.GetAssembly verwenden und dabei einen Typ angeben, der in der entsprechenden Assemblierung definiert
ist, oder mit System.Assembly.GetExecutingAssembly die Assemblierung ermitteln, die aktuell ausgeführt wird.
Änderungen an TTreeView.OnCompare
Die Signatur für das Ereignis OnCompare in der Klasse TTreeView wurde in der VCL für .NET geändert. Vorhandener Code
verursacht eine Exception zur Laufzeit, wenn die Ereignisbehandlungsroutine aufgerufen wird.
In Delphi 7 lautete die Signatur:
TTVCompareEvent = procedure(Sender: TObject; Node1, Node2: TTreeNode; Data: Integer; var
Compare: Integer) of object;
In Delphi für .NET lautet die Signatur:
TTCompareEvent = procedure(Sender: TObject; Node1, Node2: TTreeNode; Data: TTag; var Compare:
Integer) of object;
Siehe auch
Web-Services nach Delphi für .NET portieren (
Platform Invoke mit Delphi für .NET verwenden (
see page 80)
see page 48)
1.5.3 VCL-Anwendungen portieren
Bei der Portierung von VCL-Anwendungen von Delphi 7 nach RAD Studio gibt es einige Punkte zu bedenken. Neben
grundlegenden Sprachelementen, die ersetzt oder geändert werden müssen, gibt es einige Strategien, denen Sie folgen sollten,
um sicherzustellen, dass Ihre Anwendungen komplett und stabil portiert werden.
Dieses Thema befasst sich mit folgenden Bereichen:
74
1.5 Anwendungen mit
RAD Studio für .NET
VCL-Anwendungen portieren
• Allgemeine sprachspezifische Probleme
• Packages umbenennen
• Neue Funktionen der Programmiersprache
• Web-Service-Client-Anwendungen portieren
Allgemeine sprachspezifische Probleme
Beim Portieren von Delphi 7-Anwendungen nach RAD Studio müssen spezielle Eigenschaften des .NET Framework beachtet
werden. Im .NET Framework gelten Zeiger beispielsweise als unsicher, weshalb Anwendungen, die Zeiger verwenden, nicht in
die Kategorie verwalteter Code fallen. Um in diesem Punkt eine Kompatibilität zum .NET Framework zu erreichen, müssen Sie
Ihre Anwendungen anpassen und die Verwendung von Zeigern, des Typs pChar und anderer sprachspezifischer Elemente
vermeiden oder umgehen.
Darüber hinaus gibt es bezüglich der Win32-API einige kritische Punkte bei der Verwendung von Crackern, der Migration von
Char-Datentypen und anderem.
Packages umbenennen
Beim Portieren eines Delphi 7-Package nach RAD Studio müssen die Packages in der Liste "Erfordert" umbenannt werden. In
der folgenden Tabelle sind die alten und neuen Package-Namen aufgeführt.
Alter Name
Neuer Name
rtl
Borland.Delphi und Borland.VclRtl
vcl
Borland.Vcl
vclx
Borland.VclX
dbrtl
Borland.VclDbRtl
bdertl
Borland.VclBdeRtl
vcldb
Borland.VclDbCtrls
dbexpress
Borland.VclDbExpress
dbxcds
Borland.VclDbxCds
dsnap
Borland.VclDSnap
dsnapcon
Borland.VclDSnapCon
vclactnband
Borland.VclActnBand
Borland.VclActnBand-Packages werden nun durch Auswahl von Komponenten Installierte .NET-Komponenten NET
VCL-Komponenten installiert.
Neue Funktionen der Programmiersprache
In die Programmiersprache Delphi sind einige neue Funktionen eingefügt worden, um die Programmierkonzepte und -funktionen
der .NET-Plattform und der CLS (Common Language Specification) abzudecken:
• Unterteilung von Code in Namespaces
• Neue Sichtbarkeitsbezeichner für Klassenelemente
• Klassenstatische Methoden, Eigenschaften und Felder
• Klassenkonstruktoren
• Verschachtelte Typdeklarationen in Klassen
• Versiegelte (sealed) Klassen
• Finale virtuelleMethoden
• Überladene Operatoren in Klassen
75
1
Überblick zu VCL für .NET
RAD Studio für .NET
1.5 Anwendungen mit
• .NET-Attribute
• Unterstützende Klassen (Syntax)
Die Programmierung in der Speicher freigebenden Umgebung von .NET (Garbage Collection) wirft bei der Zuweisung und
Freigabe von Objekten einige neue Probleme auf. Diese Probleme werden im Abschnitt Speicherverwaltung auf der
.NET-Plattform erläutert.
Web-Service-Client-Anwendungen portieren
Das .NET Framework sorgt auch bei der Behandlung von Web-Services und Web-Service-Clients für eine veränderte
Architektur. Ihre vorhandenen Web-Service-Client-Anwendungen müssen deshalb geändert werden, damit sie im .NET
Framework ausführbar sind. RAD Studio unterstützt die RIO-Komponenten nicht, sondern verwendet für die Verwaltung von
Web-Service-Client-Anwendungen einen klareren Ansatz. Sie müssen die RIO-Komponenten entfernen und die Zugriffsmethode
auf WSDL-Dokumente ändern.
1
Siehe auch
Überblick zu VCL.NET (
see page 77)
Sprachspezifische bei der Portierung von VCL-Anwendungen nach Delphi für .NET (
Platform Invoke mit Delphi 2005 verwenden (
Web-Services nach Delphi für .NET portieren (
see page 64)
see page 48)
see page 80)
Web-Services-Client-Anwendung von Delphi für Win32 nach Delphi für .NET portieren (
see page 223)
1.5.4 Überblick zu VCL für .NET
VCL für .NET ist die Programmierumgebung für die Erstellung von RAD Studio-Anwendungen mit VCL-Komponenten. Mit Hilfe
von RAD Studio und VCL für .NET können Benutzer beim Schreiben neuer Anwendungen die Leistungsstärke von Delphi
weiterhin nutzen und Win32-Anwendungen in das .NET Framework migrieren.
Diese Technologien erleichtern Delphi-Entwicklern den Wechsel zu .NET und vereinfachen die Portierung vorhandener
Delphi-Anwendungen. RAD Studio unterstützt die Microsoft .NET Framework-Entwicklung mit der Sprache Delphi und VCL für
.NET-Steuerelementen. RAD Studio-ASP.NET unterstützt außerdem die Entwicklung von Web Forms- und
SOAP-/XML-Web-Services-Anwendungen.
VCL für .NET umfasst einen Großteil der gebräuchlichsten Klassen der VCL für Win32. Das .NET Framework ist für die
Verwendung .NET-konformer Sprachen konzipiert. In vielen Fällen kann daher Delphi-Quelltext, der auf Klassen und Funktionen
der Win32-VCL basiert, relativ problemlos auf die .NET-Umgebung portiert werden. Häufig sind vor der erneuten Compilierung in
.NET nur geringfügige Änderungen erforderlich. Manchmal ist die erneute Compilierung sogar ohne jede Änderung möglich. VCL
für .NET ist eine Untermenge der VCL und unterstützt deshalb viele der vorhandenen VCL-Klassen. Quelltext mit direkten
Aufrufen der Win32-API muss jedoch geändert werden. Für Win32-VCL-Steuerelemente von Fremdherstellern müssen
entsprechende .NET-Versionen verfügbar sein.
Dieser Abschnitt bietet eine Einführung in folgende Themen:
• Architektur von VCL für .NET
• VCL für .NET und das .NET Framework
• Komponenten von VCL für .NET
• Borland.VCL-Namespace
• Delphi-Anwendungen nach RAD Studio portieren
• .NET-Komponenten für die Verwendung in VCL für .NET-Anwendungen importieren
76
1.5 Anwendungen mit
RAD Studio für .NET
Überblick zu VCL für .NET
Architektur von VCL für .NET
1
VCL ist ein Satz visueller Komponenten für die Erstellung von Windows-Anwendungen in Delphi. VCL für .NET enthält
identische Komponenten, die jedoch für die Verwendung im .NET Framework aktualisiert wurden. VCL für .NET und das .NET
Framework existieren in RAD Studio nebeneinander. Beide stellen Komponenten und Funktionen bereit, mit denen Sie
.NET-Anwendungen erstellen können:
• VCL für .NET enthält Komponenten für die Erstellung von VCL-Formularanwendungen, die .NET-fähige Delphi-Formulare
sind.
• VCL für .NET stellt nicht-visuelle, .NET-fähige VCL-Komponenten für den Zugriff auf Datenbanken bereit. Außerdem kann
über ADO.NET- und BDP.NET-Provider auf Datenbanken zugegriffen werden.
• .NET ermöglicht die Erstellung von .NET Web Forms- und Konsolenanwendungen unter Verwendung von
.NET-Komponenten und basierend auf Delphi-Code.
Sie können VCL-Formularanwendungen mit den VCL für .NET-Komponenten entwickeln. ASP.NET-Web-Forms-Anwendungen
lassen sich entweder mit VCL für .NET- oder mit .NET-Komponenten erzeugen.
VCL für .NET und das .NET Framework
Das .NET Framework stellt eine Bibliothek mit Komponenten, Klassen und Low-Level-Funktionen bereit und übernimmt den
überwiegenden Teil der allgemeinen Funktionalität, von der Anzeige der Schaltflächen bis hin zu Remote-Funktionen, und zwar
unabhängig von der Programmiersprache, die für die Implementierung verwendet wird. VCL für .NET und das .NET Framework
stehen hinsichtlich ihrer Funktionalität auf derselben Stufe. Ebenso wie das .NET Framework stellt auch VCL für .NET
Bibliotheken mit Komponenten, Steuerelementen, Klassen und Low-Level-Funktionen für die Erstellung von Web Forms- und
Konsolenanwendungen zur Verfügung, die auf der aktuellen Windows .NET Framework-Plattform ausgeführt werden können.
VCL für .NET ist kein Ersatz für das .NET Framework.
Zur Verwendung von VCL für .NET ist immer noch die .NET-Laufzeitumgebung erforderlich. Sie können aber komplette
Anwendungen mit VCL für .NET-Komponenten erstellen, die sich auf der .NET-Plattform ausführen lassen.
Es ist möglich, RAD Studio-Anwendungen ohne Verwendung von VCL für .NET zu entwickeln, indem Sie Web Forms- und
Konsolenanwendungen in RAD Studio-Code erstellen.
Sie können mit RAD Studio leistungsstarke .NET-Anwendungen mit Hilfe von .NET-Komponenten erzeugen oder VCL für
.NET-Komponenten nutzen, die aus der Delphi-VCL migriert wurden. Vorhandene Delphi-VCL-Anwendungen, die unter
Windows XP ausgeführt werden sollen, lassen sich problemlos unter Verwendung von RAD Studio portieren.
Komponenten von VCL für .NET
VCL für .NET besteht aus einem Satz von visuellen und nicht-visuellen Komponenten und basiert auf dem Konzept der visuellen
Erstellung von Anwendungen, um den manuellen Codier-Aufwand möglichst gering zu halten.
77
Überblick zu VCL für .NET
RAD Studio für .NET
1.5 Anwendungen mit
Visuelle Komponenten
RAD Studio bietet zahlreiche visuelle Komponenten (Steuerelemente), die Sie bei der Erstellung Ihrer Anwendungen nutzen
können. Neben gängigen Steuerelementen wie Schaltflächen, Eingabefeldern, Optionsfeldern und Kontrollkästchen stehen z.B.
auch Gitter, Bildlaufleisten, Kalenderobjekte und ein leistungsstarker Menü-Designer zur Verfügung. Diese Steuerelemente
werden in RAD Studio aber anders dargestellt als in Frameworks, etwa dem .NET Framework.
Die IDEs anderer Sprachen (wie C# oder Java) unterstützen in der Regel eine codebasierte Darstellung von Formularen und
anderen visuellen Komponenten. Hierzu gehören physische Definitionen (wie Größe, Höhe und andere Eigenschaften) sowie
Konstruktoren und Destruktoren für diese Komponenten. Der Quelltext-Editor von RAD Studio enthält jedoch keine
Code-Darstellung der visuellen Komponenten.
RAD Studio ist ein ressourcenbezogenes System, bei dem die Codebehind-Darstellung primär mittels
Ereignisbehandlungsroutinen erfolgt, in die Sie die Programmlogik integrieren. Visuelle Komponenten werden in Textdateien
deklariert und definiert, die die Namenserweiterung .dfm (Delphi-Formulare) bzw. .nfm (RAD Studio-Formulare) haben. Die
Dateien mit der Erweiterung .nfm werden von RAD Studio angelegt, wenn Sie Ihre VCL-Formulare im Formular-Designer
erstellen, und in der Ressourcenliste der Projektverwaltung des Projekts angezeigt.
1
Nicht-visuelle Komponenten
Nicht-visuelle Komponenten werden zur Implementierung von Funktionen verwendet, deren visuelle Darstellung nicht
erforderlich ist. So können Sie zum Beispiel den Zugriff auf Datenbanken und Datenmengen mittels nicht-visueller
BDP.NET-Komponenten implementieren. Diese Komponenten, die zur Laufzeit nicht sichtbar sind, werden zur Entwurfszeit
durch Komponenten der Tool-Palette dargestellt. VCL für .NET stellt eine Vielzahl nicht-visueller Komponenten für den
Datenzugriff, für Serverfunktionen usw. bereit.
Borland.VCL-Namespace
VCL für .NET-Klassen sind unter dem Namespace Borland.Vcl zu finden, datenbankbezogene Klassen unter dem
Namespace Borland.Vcl.DB und Klassen der Laufzeitbibliothek unter dem Namespace Borland.Vcl.Rtl.
Unit-Dateien wurden in entsprechenden Borland.Vcl-Namespaces zusammengefasst. In einigen Fällen wurden Units
verlagert. Es wurden aber aussagekräftige Bezeichnungen für die Namespaces verwendet, damit Sie die gewünschte
Funktionalität problemlos auffinden können.
Das Unterverzeichnis c:\Programme\CodeGear\RAD
Studio-Objekte.
Studio\5.0\Source enthält Quelltextdateien für alle RAD
Delphi-Anwendungen nach RAD Studio portieren
Bei Bedarf können Sie Anwendungen, die mit einer früheren Version von Delphi geschrieben wurden, nach .NET portieren. In
den meisten Fällen ist die Migration einfacher als die komplette Neuerstellung der Anwendung. Da RAD Studio die Vorteile der
strukturellen Elemente das .NET Framework nutzt, müssen Sie einige Aufgaben manuell durchführen, um eine lauffähige
Anwendung zu erhalten. Beispielsweise unterstützt das .NET Framework in sicherem Code keine Zeiger. Folglich müssen
Instanzen von pChar oder Zeigervariablen in einen entsprechenden .NET-Typ konvertiert werden. Viele Delphi-Objekte wurden
bereits an diese Typrestriktionen angepasst. Ihr Code könnte aber noch Referenzen auf Zeiger oder nicht unterstützte Typen
enthalten. Weitere Informationen finden Sie in der Sprachreferenz dieses Hilfesystems.
.NET-Komponenten für die Verwendung in VCL für .NET-Anwendungen importieren
RAD Studio enthält den .NET-Import-Experten, der Sie dabei unterstützt, .NET-Steuerelemente in VCL für .NET-Units und
-Packages zu importieren. Sie können zum Beispiel alle .NET-Komponenten, etwa diejenigen aus der
System.Windows.Forms-Assemblierung, in ActiveX-Wrapper einfügen und diese mit VCL für .NET-Anwendungen
weitergeben. Nach dem Import der gewünschten .NET-Komponenten können Sie der Tool-Palette eine Package-Datei
hinzufügen, in der die Units für jede Komponente enthalten sind. Es ist auch möglich, einzelne Unit-Dateien anzuzeigen und zu
ändern. Diese Dateien sind als Referenzmaterial sehr hilfreich, wenn Sie eigene Komponenten erstellen.
78
1.5 Anwendungen mit
RAD Studio für .NET
Web-Service-Clients portieren
Siehe auch
Sprachreferenz
VCL-Anwendungen portieren (
Daten-Provider für .NET (
see page 75)
see page 28)
.NET-Steuerelemente in VCL für .NET importieren (
see page 180)
Deployment von Anwendungen
VCL für .NET-Formularanwendung erstellen (
see page 163)
1
1.5.5 Web-Service-Clients portieren
RAD Studio-Web-Services verwenden das .NET Framework als Service-Schicht. Web-Service-Client-Anwendungen, die mit
Delphi 7 oder einer früheren Version erstellt wurden, müssen folglich geändert werden, wenn sie das .NET Framework
verwenden sollen.
In diesem Thema wird Folgendes behandelt:
• Vorhandene Anwendungen ändern und ergänzen
• Hinweise zur Implementierung
Vorhandene Anwendungen ändern und ergänzen
Nehmen Sie die folgenden Änderungen und Ergänzungen an Ihren Anwendungen vor:
• Entfernen Sie RIO-Komponenten. Sie werden im .NET Framework nicht mehr funktionieren. Bevor Sie Komponenten löschen,
sollten Sie jedoch die Eigenschaftsinformationen für diese Komponenten, z.B. URLs, sichern.
• Entfernen Sie SOAP-Units von Delphi 7 aus der uses-Klausel. Außerdem muss die uses-Referenz auf die
Interface-Proxy-Unit entfernt werden, die durch den Delphi 7 WSDL-Import generiert wurde.
• Fügen Sie eine Webreferenz hinzu. Verwenden Sie hierzu den Befehl Webreferenz hinzufügen im Kontextmenü der
Projektverwaltung.
Hinweise zur Implementierung
Die folgenden Hinweise beziehen sich auf Probleme, die beim Portieren von Web-Service-Client-Anwendungen auftreten
können.
Web-Service-Server-Interoperabilität
Die SOAP-Implementierungen von Delphi 7 und .NET weisen geringfügige Unterschiede auf. Auf dem Server müssen
verschiedene Optionen (Eigenschaft TSOAPDomConv.Options) eingestellt werden, damit mehrere Clients erfolgreich ausgeführt
werden können. Folgende Optionen müssen eingestellt sein, damit beide Client-Anwendungen die SOAP-Packages verarbeiten
und die korrekte Codierung übertragen:
[soTryAllSchema, soRootRefNodesToBody, soUTF8InHeader, soUTF8EncodeXML]
Exceptions behandeln
Die folgende Tabelle führt auf, welche Exceptions sich in Delphi 7 und dem .NET Framework entsprechen:
Exception in Delphi 7
Exception im .NET Framework
ERemotableException
System.Web.Services.Protocols. SoapException
79
Web-Service-Clients portieren
ESOAPHTTPException
RAD Studio für .NET
1.5 Anwendungen mit
System.Net.WebException
Faultcodes
In Delphi 7 gibt die Eigenschaft ERemotableException.FaultCode vollständige Namen, wie zum Beispiel
SOAP-ENV:Client.Login zurück. Sie müssen den Code dann mit der Funktion ExtractLocalName extrahieren. Die .NET
Framework-Klasse SoapException enthält die Eigenschaft SoapException.Code.Name unmittelbar.
SOAP-Pakete überwachen
In Delphi 7 enthält die Komponente THTTPRIO die Ereignisse OnBeforeExecute und OnAfterExecute, mit deren Hilfe Sie
Anfragen und Antworten überwachen können. Eine ähnliche Funktionalität lässt sich mit der Klasse SoapExtension des .NET
Framework implementieren. Im Folgenden sehen Sie ein Fragment eines Beispiels, das diese Funktionalität implementiert. Das
vollständige Beispiel finden Sie in der CodeCentral von Borland. Der Link hierzu ist in der Link-Liste am Ende dieses Themas
enthalten.
1
uses
System.Xml, System.Web.Services, System.Web.Services.Protocols, System.IO;
type
TSoapMessageEvent = procedure (Sender: TObject; const Xml: string) of object;
TSoapMonitor = class(TObject)
private
FOnRequest: TSoapMessageEvent;
FOnResponse: TSoapMessageEvent;
protected
procedure DoRequest(const Xml: string);
procedure DoResponse(const Xml: string);
public
class function FormatXmlData(const Xml: string): string; static;
property OnRequest: TSoapMessageEvent add FOnRequest remove FOnRequest;
property OnResponse: TSoapMessageEvent add FOnResponse remove FOnResponse;
end;
.
.
.
{ TSoapMonitor }
procedure TSoapMonitor.DoRequest(const Xml: string);
begin
if Assigned(FOnRequest) then
FOnRequest(Self, Xml);
end;
procedure TSoapMonitor.DoResponse(const Xml: string);
begin
if Assigned(FOnResponse) then
FOnResponse(Self, Xml);
end;
class function TSoapMonitor.FormatXmlData(const Xml: string): string;
var
Doc: XmlDocument;
Sw: StringWriter;
Xw: XmlTextWriter;
begin
Doc := XmlDocument.Create;
Doc.LoadXml(Xml);
Sw := StringWriter.Create;
80
1.5 Anwendungen mit
RAD Studio für .NET
Web-Service-Clients portieren
Xw := XmlTextWriter.Create(sw);
Xw.Formatting := Formatting.Indented;
Xw.Indentation := 2;
Xw.IndentChar := ' ';
doc.Save(xw);
Result := sw.ToString;
Xw.Close;
Sw.Close;
end;
Mit SOAP-Headern arbeiten
In Delphi 7 muss vor dem Aufruf einer Methode der Header gesendet werden. Das Header-Objekt wird nach dem
Methodenaufruf freigegeben. Im .NET Framework besteht die Header-Klasse nach dem Aufruf einer Methode so lange fort, bis
mit new eine neue Instanz zugewiesen oder die Header-Klasse durch die Zuweisung von nil entfernt wird.
SOAP-Anlagen
Das .NET Framework unterstützt keine MIME-Anlagen. Delphi 7 SOAP unterstützt keine DIME-Anlagen.
Siehe auch
Überblick zu den ASP.NET-Web-Services (
see page 106)
Web-Services-Client-Anwendung von Delphi für Win32 nach Delphi für .NET portieren (
see page 223)
CodeCentral-Beispiel zur Überwachung von SOAP-Paketen
81
1
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
1.6 Webanwendungen mit ASP.NET entwickeln
ASP.NET ist das Programmiermodell für das Erstellen von Webanwendungen auf der Basis des .NET Framework. Dieser
Abschnitt erläutert den konzeptionellen Hintergrund für das Erstellen von ASP.NET-Anwendungen in RAD Studio. Neben der
Unterstützung der Datenzugriffskomponenten im .NET Framework enthält RAD Studio DB Web Controls. Die DB Web Controls
verwenden die .NET Framework-Provider und die Borland-Datenprovider für .NET (BDP.NET) um die Entwicklung von
Webanwendungen zu beschleunigen.
1
Themen
Name
Überblick zu ASP.NET (
Beschreibung
see page 85)
ASP.NET ist die .NET-Programmierumgebung für die Erstellung von
Anwendungen in HTML, die sich im Web ausführen lassen. Dieses Thema
enthält grundlegende Informationen zu den wichtigsten Komponenten der
ASP.NET-Architektur und erläutert, wie ASP.NET mit anderen
Programmiermodellen des .NET Framework kooperiert. Folgende Bereiche
werden behandelt:
• Architektur von ASP.NET
• Web Forms
• Datenzugriff
• Web-Services
• Entwurfszeitfunktionen
• Unterstützte Webserver
• Beispielanwendungen
Überblick zu CodeGear DB Web Controls (
see page 88)
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
CodeGear DB Web Controls vereinfachen die Datenbankentwicklung mit
BDP.NET- und .NET Framework-Datenzugriffskomponenten. DB Web Controls
stellen leistungsstarke Steuerelemente wie datensensitive Gitter, Navigatoren,
Kalender, Kombinationsfelder usw. bereit, die Sie in Ihre Anwendungen
integrieren können.
Dieser Abschnitt bietet eine Einführung in folgende Themen:
• Architektur von DB Web Controls
• Vorteile der datensensitiven Komponenten
• Unterstützte Datenzugriffskomponenten
• DB Web Controls Namespace
• Deployment von ASP.NET-Anwendungen mit DB Web
Controls
DB Web Controls in Haupt-/Detail-Anwendungen verwenden (
see page 90)
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
DB Web Controls unterstützen die Erstellung echter Haupt-/Detail-Anwendungen
mit den Controls DBWebDataSource, DBWebGrid und DBWebNavigator Für
Haupt-/Detail-Anwendungen müssen diese Controls einen Mechanismus
bereitstellen, mit dem mehrstufige Operationen implementiert werden können.
Dieses Thema enthält Informationen zu folgenden Bereichen:
• Mehrstufige Löschvorgänge definieren
• Mehrstufige Aktualisierungen definieren
82
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Überblick zur Navigations-API der DB Web Controls (
Überblick zum DB Web Control-Experten (
see page 92)
see page 93)
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
In der Regel kann das Standardsteuerelement DBWebNavigator verwendet
werden, um Navigationsfunktionen für eine Anwendung bereitzustellen. Es gibt
aber Situationen, in denen eine weitergehende Kontrolle über die
Navigationsmöglichkeiten erforderlich ist. Die DB Web Controls stellen nun eine
API für die Feinabstimmung der Navigation bereit. Sie können mit Hilfe dieser
API zum Beispiel eine Schaltfläche für die direkte Navigation erstellen, anstatt
das DBWebNavigator-Steuerelement zu verwenden. Es ist zwar möglich,
Schaltflächen von DBWebNavigator zu verbergen, die Position der
Steuerelemente auf dem Formular kann aber nicht geändert... more ( see page
92)
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
CodeGear DB Web Controls sind datensensitive Web-Komponenten. Mit Hilfe
von DB Web Controls können Sie datensensitive Funktionen in Standard-Web
Controls kapseln. Dies hat den Vorteil, dass die Datenbindung durch das Control
selbst erfolgt und kein Aufruf der Methode DataBind erforderlich ist.
Die Erstellung von DB Web Controls basiert auf folgenden Grundkonzepten:
• ASP.NET Control-Lebenszyklus (Control Execution
Lifecycle, CEL)
• Datenbindung
• Überschreiben von ASP.NET-Methoden
• Implementieren von Borland DB Web-Interfaces
• Wichtige Änderungen am Quelltext
XML-Dateien und DB Web Controls verwenden (
see page 99)
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
Die DBWebDataSource-Komponente bietet die Möglichkeit, XML- und
XSD-Dateien zu erstellen und als Datenquelle für eine ASP.NET-Anwendung zu
verwenden. Normalerweise verwenden Sie diese Dateitypen im Zusammenhang
mit DB Web Controls lediglich, um einen Prototyp der Anwendung zu erhalten.
Sie können aber während der Design- und Entwicklungsphase des Projekts
XML-Dateien als Datenquelle nutzen, um den (eventuell kostspieligen) Zugriff auf
Datenbankressourcen zu umgehen.
In diesem Thema werden folgende Bereiche behandelt:
• XML-Dateien als Datenquellen
• Empfohlene Workflow-Strategie
• Authentifizierung und Zwischenspeicherung
Mit DataView-Objekten arbeiten (
see page 101)
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
DataView-Objekte (Datenansichten) ermöglichen es Ihnen, ein
DataTable-Objekt unter Verwendung der Eigenschaft RowFilter zu filtern oder die
Anordnung der Daten zu ändern. Die DataView-Komponenten befindet sich unter
dem Bereich Datenkomponenten der Tool-Palette. In diesem Thema wird
Folgendes behandelt:
• Laufzeiteigenschaften
• Haupt/Detail-Beziehungen
• Die Methode ClearSessionChanges
• Einschränkungen für DataView-Objekte
83
1
Überblick zu ASP.NET
RAD Studio für .NET
Deployment von ASP.NET-Anwendungen (
see page 102)
1.6 Webanwendungen mit ASP.NET
Dieses Thema enthält Informationen über:
• Anforderungen an den Webserver
• Vorbereiten der Weitergabe
• Der ASP.NET-Deploymentmanager von RAD Studio
Weitere Informationen über das Deployment enthält die
Datei deploy.htm im Verzeichnis
C:\Programme\CodeGear\RAD Studio\5.0.
WebDataLink-Interfaces verwenden (
see page 103)
1
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
DB Web Controls unterscheiden sich von herkömmlichen Web Controls vor
allem dadurch, dass sie die Datenbindung automatisch durchführen. Während
des Entwurfs müssen Sie zwar weiterhin die Verbindungen zwischen
Datenquellen und Controls konfigurieren, zur Laufzeit erfolgt die Datenbindung
jedoch automatisch, d.h. es muss kein entsprechender Befehl in den Quelltext
aufgenommen werden. Wenn Sie ein DB Web Control mit Hilfe des DB Web
Control-Experten erweitern, implementieren Sie verschiedene Interfaces, die
die Funktionalität für die Datenbindung bereitstellen. Diese Interfaces werden im
vorliegenden Thema beschrieben.
• IDBWebDataLink
• IDBWebColumnLink:... more (
see page 103)
1.6.1 Überblick zu ASP.NET
ASP.NET ist die .NET-Programmierumgebung für die Erstellung von Anwendungen in HTML, die sich im Web ausführen lassen.
Dieses Thema enthält grundlegende Informationen zu den wichtigsten Komponenten der ASP.NET-Architektur und erläutert, wie
ASP.NET mit anderen Programmiermodellen des .NET Framework kooperiert. Folgende Bereiche werden behandelt:
• Architektur von ASP.NET
• Web Forms
• Datenzugriff
• Web-Services
• Entwurfszeitfunktionen
• Unterstützte Webserver
• Beispielanwendungen
Architektur von ASP.NET
Die wesentlichen Bestandteile der Architektur von ASP.NET sind Web Forms, die Server Controls von ASP.NET, die Dateien mit
der Codebehind-Logik und die compilierten DLL-Dateien. Web Forms-Seiten enthalten HTML-Elemente, Text und Server
Controls. Codebehind-Dateien enthalten die Anwendungslogik für die Forms-Seite. Compilierte DLL-Dateien übergeben
84
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Überblick zu ASP.NET
dynamisches HTML an den Webserver.
CodeGear bietet verschiedene Tools, um die Entwicklung unter ASP.NET zu vereinfachen. Wenn Sie mit dem Konzept des
Rapid Application Development (RAD) bereits vertraut sind und die objektorientierte Programmierung (OOP) mit Eigenschaften,
Methoden und Ereignissen kennen, werden Sie sich auch schnell in das ASP.NET-Modell einarbeiten, auf dessen Basis sich
Webanwendungen erstellen lassen.
Web Forms, Server Controls und HTML-Elemente
Mit Web Forms definieren Sie die Benutzeroberfläche für Ihre Webanwendung. Ein Web Form besteht aus einer
Auszeichnungsdatei (.aspx) für die visuelle Darstellung und einer Codebehind-Datei (.pas oder .cs) mit der Programmlogik.
Die Codebehind-Datei wird in eine .dll-Datei compiliert und mit der .aspx-Datei an den Server weitergegeben. Zur Laufzeit
wird die .aspx-Datei compiliert und mit der Codebehind-Datei (.dll) gelinkt. Dadurch ist es möglich, die .aspx-Datei zu
ändern, ohne die Codebehind-Datei erneut zu compilieren.
Die Web Forms .aspx-Datei enthält ASP.NET-Server Controls und statische HTML-Elemente. Server Controls werden im
Quelltext deklariert. Der programmseitige Zugriff auf Server Controls erfolgt über Eigenschaften, Methoden und
Ereignisbehandlungsroutinen. Server Controls werden auf dem Webserver ausgeführt und sorgen für das Rendern der
HTML-Elemente, die an den Client gesendet werden.
HTML-Elemente sind statische, client-seitige Controls. Standardmäßig ist kein programmseitiger Zugriff auf HTML-Elemente
möglich. Sie eignen sich jedoch sehr gut für statischen Text und statische Bilder in einem Web Form.
Datenzugriff
Web Forms können auf Daten über ADO.NET zugreifen. Eine ASP.NET-Anwendung kann mit einer ADO.NET-Datenquelle über
die im .NET-Framework enthaltenen Datenkomponenten, die AdoDbx Client-, die Blackfish SQL-,oder die Borland Data
Provider- (BDP.NET) Komponenten verbunden werden.
Web-Services
Web-Services stellen Anwendungskomponenten für zahlreiche verteilte Systeme zur Verfügung, deren Messaging auf XML
basiert. Web-Services können sehr einfach sein, z.B. eine XML-Botschaft zur Aktualisierung von Werten in einer externen
Anwendung, aber auch sehr komplex und als integraler Bestandteil einer anspruchsvollen ASP.NET- oder
ADO.NET-Anwendung fungieren. Web-Services und ASP.NET verwenden dieselbe allgemeine .NET-Infrastruktur, wodurch eine
problemlose Integration möglich ist.
Unterstützte Webserver
RAD Studio unterstützt zwei Server für die Entwicklung von ASP.NET-Anwendungen: Internet Information Services 6.0 (IIS) und
Cassini. Sie können IIS und Cassini auf demselben Computer betreiben, sofern sie für unterschiedliche Ports konfiguriert sind.
• Der leistungsstarke, skalierbare Webserver IIS ist Bestandteil von Windows Server 2003. Sie können Ihre Anwendung an
Computer weitergeben, auf denen IIS ausgeführt wird.
• Cassini ist ein Webserver, der während des Entwicklungsprozesses verwendet wird, der aber nicht für das Deployment von
Anwendungen gedacht ist. Es ist einfacher zu verwenden als IIS, weil es keine Konfiguration gibt. Cassini wurde von
Microsoft entwickelt und steht samt Quelltext zum kostenlosen Herunterladen zur Verfügung. RAD Studio wird mit einer leicht
angepassten Version von Cassini ausgeliefert. Cassini ist in den ASP.NET-Support von CodeGear integriert.
Wenn Sie mit der Erstellung einer ASP.NET-Anwendung beginnen, werden Sie von RAD Studio zur Angabe des Webservers
und des Speicherorts für die Anwendung aufgefordert. Sie können den Standardserver und das Standardverzeichnis für neue
Anwendungen verwenden oder zum Cassini-Server (und dem entsprechenden Port) wechseln. Wählen Sie hierzu
Tools Optionen ASP.NET.
Entwurfszeitfunktionen
RAD Studio verfügt über zahlreiche Entwurfszeitfunktionen, die Sie bei der Entwicklung von Web Forms und HTML- bzw.
CSS-Dateien unterstützen.
85
1
Überblick zu ASP.NET
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
HTML- und CSS-Dateien bearbeiten
Sie können bei der Bearbeitung von HTML- und CSS-Dateien viele Leistungsmerkmale des Quelltext-Editors nutzen. Die
Code-Vervollständigung (STRG+LEERTASTE) und die Syntaxhervorhebung sind sowohl für HTML- als auch für CSS-Dateien
verfügbar. Während der Bearbeitung einer HTML-Datei können Sie die Fehlermarkierung aktivieren. Ungültiger HTML-Code wird
dann mit einer roten Wellenlinie unterstrichen. Wenn Sie den Mauszeiger auf den betreffenden Code bewegen, wird die
wahrscheinliche Fehlerursache in einem Hinweisfenster angezeigt.
Wenn Sie eine HTML-Seite anzeigen, rückt die interne HTML-Formatierfunktion den HTML-Code ein, damit er einfacher zu
lesen ist. Sie können stattdessen auch das Standardformatierungs-Tool HTML Tidy von www.w3c.org verwenden. Wählen Sie
Bearbeiten HTML Tidy, um die Datei mit HTML Tidy zu formatieren und auf Fehler zu überprüfen. Es ist auch möglich,
anstelle der internen Formatierung HTML Tidy als Standardformatierungsfunktion zu nutzen. Sie können Tags definieren, die
HTML Tidy normalerweise als ungültig kennzeichnet, z.B. Tags mit dem Präfix asp:. Um auf die Optionen von HTML Tidy
zuzugreifen, wählen Sie Tools Optionen HTML Tidy-Optionen.
1
Die Strukturansicht zeigt die HTML-Tags der aktiven HTML-Seite in einem hierarchisch gegliederten Baumdiagramm. Sie
erleichtert die Navigation in großen Dateien. Wenn Sie auf einen Knoten im Baumdiagramm doppelklicken, wird der Cursor auf
das entsprechende Tag in der HTML-Datei gesetzt.
Fluss-Layout und Gitter-Layout
Während des Web Form-Entwurfs können Sie im Designer entweder das Gitter-Layout oder das Fluss-Layout verwenden. Im
Gitter-Layout sind die Controls entsprechend ihrer absoluten Position angeordnet und können durch Ziehen mit der Maus anders
platziert werden. Zur einfacheren Positionierung der Controls kann ein Gitter angezeigt werden. Wenn Sie ein Control aus der
Tool-Palette in das Web Form ziehen bzw. zuerst in der Tool-Palette auf das Control und dann in das Web Form klicken, wird
das Control an seiner absoluten Position in das Formular eingefügt.
Im Fluss-Layout-Modus sind die Controls im Web Form von oben nach unten angeordnet. Ihre Position kann mit den Pfeiltasten
geändert werden. Wenn Sie in der Tool-Palette auf ein Control doppelklicken, wird es entsprechend des Fluss-Layouts in das
Web Form eingefügt.
Um das Layout eines bestimmten Control zu ändern, verwenden Sie die Schaltfläche Absolutes Layout
HTML-Design am oberen Rand des Designers.
in der Symbolleiste
Um das Layout für neue Dateien, die mit RAD Studio erstellt werden, dauerhaft zu ändern, bearbeiten Sie die Template-Datei
page.aspx. Sie befindet sich standardmäßig in CodeGear\RAD Studio\5.0\ObjRepos\DelphiDotNet.
Beispielanwendungen
RAD Studio enthält verschiedene ASP.NET-Beispielanwendungen im Verzeichnis Demos. Viele dieser Anwendungen beinhalten
eine readme-Datei mit einer Beschreibung der Anwendung und einer Liste der Anforderungen. Treffen Sie folgende
Vorkehrungen, bevor Sie eine Beispielanwendung in der IDE öffnen:
• Prüfen Sie, ob das Verzeichnis der Anwendung eine readme-Datei enthält, und folgen Sie den Installationsanweisungen.
• Erstellen Sie ein virtuelles Verzeichnis für die Beispielanwendung, um zur Laufzeit Fehlermeldungen des Browser bezüglich
fehlender Ressourcen zu vermeiden (siehe den Link zur entsprechenden Anleitung am Ende dieses Themas).
Siehe auch
Überblick zu ADO.NET (
see page 15)
Überblick zu Web-Services (
see page 106)
ASP.NET-Anwendungen erstellen (
DB Web Controls für ASP.NET (
see page 186)
see page 88)
Deployment von ASP.NET-Anwendungen (
86
see page 102)
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Virtuelles Verzeichnis für Demo-Anwendungen erstellen (
Überblick zu CodeGear DB Web Controls
see page 204)
Der Namespace System.Web
.NET Framework Developer's Guide ASP.NET Web Applications (MSDN)
1.6.2 Überblick zu CodeGear DB Web Controls
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
CodeGear
DB
Web
Controls
vereinfachen
die
Datenbankentwicklung
mit
BDP.NETund
.NET
Framework-Datenzugriffskomponenten. DB Web Controls stellen leistungsstarke Steuerelemente wie datensensitive Gitter,
Navigatoren, Kalender, Kombinationsfelder usw. bereit, die Sie in Ihre Anwendungen integrieren können.
Dieser Abschnitt bietet eine Einführung in folgende Themen:
• Architektur von DB Web Controls
• Vorteile der datensensitiven Komponenten
• Unterstützte Datenzugriffskomponenten
• DB Web Controls Namespace
• Deployment von ASP.NET-Anwendungen mit DB Web Controls
Architektur von DB Web Controls
DB Web Controls sind visuelle und nicht-visuelle Komponenten, die Drag&Drop-Funktionen und einen leistungsstarken
Mechanismus für das Abrufen von Daten bereitstellen. Die Entwicklung von ASP.NET-Anwendungen wird dadurch wesentlich
beschleunigt. Die meisten DB Web Controls sind GUI-Web-Steuerelemente, die in ASP.NET-Anwendungen häufig benötigt
werden. Ein Beispiel hierfür ist die Komponente DBWebDataSource, die als datensensitives Verbindungsglied zwischen den
visuellen Steuerelementen und der zugrunde liegenden Datenquelle fungiert. DBWebDataSource übermittelt die von der Quelle
abgerufenen Daten an die Anzeigesteuerelemente des ASP.NET-Formulars. Die DBWebDataSource-Komponente kann sowohl
.NET Framework ADO.NET-Komponenten als auch BDP.NET-Komponenten referenzieren, etwa die im Speicher befindliche
Datenmenge, die entweder von einem ADO.NET-Adapter (wie SQLDataAdapter) oder von einem BDP.NET-Adapter (wie
BDPDataAdapter) generiert wird. Über die DBWebDataSource-Komponente kann auch eine Verbindung zu anderen
Datenquellen wie Textdateien, Arrays und Kollektionen hergestellt werden.
Vorteile von datensensitiven Komponenten
Während der Entwicklung einer ASP.NET-Anwendung mit Steuerelementen, die Daten aus einer zugrunde liegenden
Datenquelle (z.B. einer Datenbank) anzeigen, müssen Sie die Bindung zwischen der Datenquelle und den Steuerelementen
manuell konfigurieren. Für jedes Steuerelement, das mit der Datenquelle verbunden wird, müssen Syntax und Parameter
bereitgestellt werden.
Die Verwendung von DB Web Controls hat den Vorteil, dass nur eine DBWebDataSource-Komponente mit der Datenquelle
verknüpft werden muss. Danach werden alle DB Web Controls auf der ASP.NET-Seite, die die DBWebDataSource-Komponente
referenzieren, automatisch an die Quelle gebunden. Es ist kein weiterer Code für die Datenbindung erforderlich.
DB Web Controls bieten gegenüber anderen Standard-Web Controls verschiedene Vorteile:
• Der Aufruf der Methode WebControl.DataBind kann entfallen. Normalerweise muss ein derartiger Aufruf für jedes ASP.NET
Control auf dem Web Form vorhanden sein (in der Page_Load-Routine), da das Steuerelement sonst zur Laufzeit nicht
angezeigt wird.
• Sie ermöglichen eine Anzeige der Daten zur Entwurfszeit.
• Änderungen werden automatisch in die Datenmenge (DataSet) eingetragen. ASP.NET Controls erfordern hierfür speziellen
87
1
Überblick zu CodeGear DB Web Controls
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
Code.
• Sie behalten ihre aktuelle Zeilenposition bei.
• Der Änderungs- und Zeilenstatus wird automatisch verwaltet. Clients an unterschiedlichen Standorten können daher ohne
Berücksichtigung des Serverstatus unabhängig voneinander bedient werden.
Neben diesen Vorteilen allgemeiner Art bieten DB Web Controls noch weitere, spezielle Vorzüge:
• Die Klasse DBWebDataSource verwaltet eine sortierte Liste der Änderungen. Dadurch kann der Benutzer Änderungen in der
Reihenfolge zurücknehmen, in der sie erfolgt sind.
• Die DBWebNavigator-Komponente bietet Navigationsfunktionen für Gitter und Mehrfachsteuerelemente und kann auf
Standard-Web Controls erweitert werden.
• Die DBWebDataGrid-Komponente bietet integrierte Funktionen zur Bildlaufsteuerung (per Seitennummer oder Symbol), für
das Hinzufügen von Bearbeitet- und Gelöscht-Spalten uvm. Sie müssen diese Funktionen für Ihre Gitter-Steuerelemente nun
nicht mehr selbst programmieren.
1
Unterstützte Datenzugriffskomponenten
DB Web Controls sind kompatibel mit Datenzugriffskomponenten von .NET Framework ADO.NET und CodeGear BDP.NET.
Jede Datenquelle, auf die über einen dieser Provider zugegriffen werden kann, lässt sich als Datenlieferant für DB Web Controls
verwenden. Außerdem können zahlreiche DB Web Controls (wie viele andere .NET Web Controls) Objekte wie Arrays,
Kollektionen und Dateien als Datenquellen nutzen.
DB Web Controls Namespace
Der Namespace von DB Web Controls ist Borland.Data.Web. Mittels Reflexion lässt sich viel über die Struktur des Namespace
und der Controls lernen. Sie können den Namespace zu Ihrem Projekt hinzufügen und ihn anschließend im Quelltext-Editor
öffnen. Dadurch gelangen Sie in den Reflexions-Editor mit einer hierarchischen Ansicht aller Controls und ihrer Elemente.
88
Steuerelement
Beschreibung
DBWebDataSource
Fungiert als Bindeglied zwischen der Datenquelle und den DB Web Controls.
DBWebAggregateControl
Ein Textfeld-Steuerelement, in dem Aggregatwerte für eine Spalte angezeigt werden.
DBWebCalendar
Ein Kalender-Steuerelement.
DBWebCheckBox
Ein Kontrollkästchen.
DBWebDropDownList
Ein Kombinationsfeld.
DBWebGrid
Ein Datengitter.
DBWebImage
Ein Bild-Steuerelement.
DBWebLabel
Eine Beschriftung.
DBWebLabeledTextBox
Ein Textfeld mit Beschriftung.
DBWebListBox
Ein Listenfeld.
DBWebMemo
Ein Memofeld.
DBWebNavigationExtender
Eine nicht-visuelle Komponente, mit der Standard-Web Control-Schaltflächen als
Navigationssteuerelemente definiert werden können.
DBWebNavigator
Eine Navigationsleiste.
DBWebRadioButtonList
Eine Optionsfeldgruppe.
DBWebSound
Ein Audio-Steuerelement, das das Standard-Mediengerät des Systems nutzt.
DBWebTextBox
Ein Textfeld.
DBWebVideo
Ein Video-Steuerelement, das das Standard-Mediengerät des Systems nutzt.
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
DB Web Controls in
Deployment von ASP.NET-Anwendungen mit DB Web Controls
Wenn die Erstellung eines ASP.NET-Projekts mit DB Web Controls abgeschlossen ist, können Sie das Deployment wie gewohnt
durchführen. Es gibt keine besonderen Einschränkungen, die beachtet werden müssen.
Siehe auch
Daten-Provider für .NET (
see page 28)
Anwendung mit DB Web Controls erstellen (
ASP.NET-Anwendungen erstellen (
see page 199)
see page 186)
XML-Dateien und DB Web Controls verwenden (
Mit DataView-Objekten arbeiten (
WebDataLink-Interfaces (
see page 99)
see page 101)
1
see page 103)
Deployment von ASP.NET-Anwendungen (
see page 102)
1.6.3 DB Web Controls in Haupt-/Detail-Anwendungen
verwenden
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
DB Web Controls unterstützen die Erstellung echter Haupt-/Detail-Anwendungen mit den Controls DBWebDataSource,
DBWebGrid und DBWebNavigator Für Haupt-/Detail-Anwendungen müssen diese Controls einen Mechanismus bereitstellen,
mit dem mehrstufige Operationen implementiert werden können.
Dieses Thema enthält Informationen zu folgenden Bereichen:
• Mehrstufige Löschvorgänge definieren
• Mehrstufige Aktualisierungen definieren
Mehrstufige Löschvorgänge
In einer Haupt-/Detail-Anwendung wird normalerweise das Ereignis OnApplyChanges verwendet, um Änderungen an der
Datenmenge an den Server zu übergeben. Die Aktualisierungsmethode des Haupt-Datenadapters (in BDP.NET die
AutoUpdate-Ereignisbehandlungsroutine) muss vor derjenigen des Detail-Datenadapters aufgerufen werden. Andernfalls würde
das Einfügen von Detailzeilen fehlschlagen, solange die Hauptzeile noch nicht eingefügt ist. Wird die Hauptzeile vor der
Detailzeile gelöscht, gibt der Server möglicherweise einen Fehler zurück.
Das Control DBWebDataSource besitzt eine neue Eigenschaft namens CascadingDeletes. Mit ihr kann festgelegt werden, wie
der Server Zeilen in Haupt-/Detail-Anwendungen löscht. Die Eigenschaft CascadingDeletes kann auf die folgenden Werte
gesetzt werden:
• NoMasterDelete (Voreinstellung)
• ServerCascadeDelete
• ServerNoForeignKey
Anmerkung: Wenn DB Web Controls mit einem DataTable-Objekt verbunden werden, das in einer Beziehung als
Detailtabelle fungiert, entspricht die maximale Anzahl der Control-Zeilen der Zahl der Zeilen, die von der aktuellen
übergeordneten Zeile der Haupttabelle gesteuert werden.
89
DB Web Controls in
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
NoMasterDelete
Diese Einstellung verhindert das Löschen einer Hauptzeile, die Detailzeilen enthält. Verwenden Sie diese Einstellung, wenn der
Server eine Fremdschlüsselbeschränkung zwischen Haupt- und Detailtabellen erzwingt, aber keine mehrstufigen
Löschvorgänge verwaltet. Folgende Aktionen sind erforderlich:
1. Löschen der Detailzeilen.
2. Eintragen der Änderungen mittels eines entsprechenden Ereignisses (z.B. BdpDataAdapter. AutoUpdate).
3. Löschen der Hauptzeile.
4. Aufrufen der Behandlungsroutine für das Ereignis (z.B. BdpDataAdapter. AutoUpdate).
Dies ist der Vorgabewert für die Eigenschaft CascadingDeletes.
1
ServerCascadeDelete
Bei dieser Einstellung kann die Hauptzeile gelöscht werden. Verwenden Sie diesen Wert, wenn der Server mehrstufige
Löschvorgänge automatisch verwaltet. Wenn eine Hauptzeile gelöscht wird, werden die Detailzeilen automatisch aus der Ansicht
entfernt. Vor dem Eintragen der Änderung kann die Löschung der übergeordneten Zeile rückgängig gemacht werden. Die
Detailzeilen werden dann wieder angezeigt. Unterstützt der Server keine automatische Verwaltung mehrstufiger Löschvorgänge,
kann beim Übertragen der Änderungen an den Server ein Fehler auftreten.
ServerNoForeignKey
Bei dieser Einstellung werden beim Löschen einer Hauptzeile alle Detailzeilen automatisch gelöscht. Weisen Sie diesen Wert zu,
wenn keine Fremdschlüsselbeschränkungen zwischen den Haupt-/Detailtabellen auf dem Server existieren. Wie bei der
Einstellung ServerCascadeDelete werden die Detailzeilen nicht mehr angezeigt, wenn eine Hauptzeile gelöscht wird. Vor dem
Eintragen der Änderung kann die Löschung der Hauptzeile rückgängig gemacht werden. Die Detailzeilen werden dann wieder
angezeigt. Wenn Sie diese Einstellung verwenden und Fremdschlüsselbeschränkungen zwischen Haupt- und Detailtabellen
vorhanden sind, gibt der Server beim Versuch, die Haupttabelle zu löschen, einen Fehler aus.
Mehrstufige Aktualisierungen
In einer Haupt-/Detail-Anwendung wird normalerweise das Ereignis OnApplyChanges verwendet, um Änderungen an der
Datenmenge an den Server zu übergeben. Die Aktualisierungsmethode des Haupt-Datenadapters (in BDP.NET die
AutoUpdate-Ereignisbehandlungsroutine) muss vor derjenigen des Detail-Datenadapters aufgerufen werden. Andernfalls würde
das Einfügen von Detailzeilen fehlschlagen, solange die Hauptzeile noch nicht eingefügt ist. Wird die Hauptzeile vor der
Detailzeile gelöscht, gibt der Server möglicherweise einen Fehler zurück.
Das Control DBWebDataSource besitzt eine neue Eigenschaft namens CascadingUpdates. Mit ihr kann festgelegt werden, wie
der Server Fremdschlüsselwerte in Haupt-/Detail-Anwendungen aktualisiert. Die Eigenschaft CascadingUpdates kann auf die
folgenden Werte gesetzt werden:
• NoMasterUpdate (Voreinstellung)
• ServerCascadeUpdate
• ServerNoForeignKey
Anmerkung: Wenn DB Web Controls mit einem DataTable-Objekt verbunden werden, das in einer Beziehung als
Detailtabelle fungiert, entspricht die maximale Anzahl der Control-Zeilen der Zahl der Zeilen, die von der aktuellen
übergeordneten Zeile der Haupttabelle gesteuert werden.
NoMasterUpdate
Bei dieser Einstellung sind keine Änderungen am Fremdschlüsselwert einer Hauptzeile möglich, wenn diese Detailzeilen besitzt.
Dies ist der Vorgabewert für die Eigenschaft CascadingUpdates.
90
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Überblick zur Navigations-API der DB Web
ServerCascadeUpdate
Bei dieser Einstellung kann der Fremdschlüsselwert der Hauptzeile geändert werden. Verwenden Sie diese Einstellung, wenn
der Server mehrstufige Aktualisierungen automatisch verwaltet. Bei einer Änderung des Fremdschlüsselwerts der Hauptzeile
werden die Schlüsselwerte der Detailzeilen automatisch angepasst. Vor dem Eintragen der Änderung kann die Änderung an der
Hauptzeile rückgängig gemacht werden. Alle Änderungen an den Schlüsselwerten der Detailzeilen werden dann ebenfalls
rückgängig gemacht. Unterstützt der Server keine automatische Verwaltung mehrstufiger Aktualisierungen, kann beim
Übertragen der Änderungen an den Server ein Fehler auftreten.
ServerNoForeignKey
Bei dieser Einstellung kann der Fremdschlüsselwert der Hauptzeile ebenfalls geändert werden. Sie ist für Fälle vorgesehen, in
denen zwischen Haupt- und Detailtabellen auf den Server kein Fremdschlüssel existiert.
Siehe auch
Mit DataView-Objekten arbeiten (
see page 101)
Anwendungen mit DBWeb Controls erstellen (
see page 199)
1.6.4 Überblick zur Navigations-API der DB Web Controls
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
In der Regel kann das Standardsteuerelement DBWebNavigator verwendet werden, um Navigationsfunktionen für eine
Anwendung bereitzustellen. Es gibt aber Situationen, in denen eine weitergehende Kontrolle über die Navigationsmöglichkeiten
erforderlich ist. Die DB Web Controls stellen nun eine API für die Feinabstimmung der Navigation bereit. Sie können mit Hilfe
dieser API zum Beispiel eine Schaltfläche für die direkte Navigation erstellen, anstatt das DBWebNavigator-Steuerelement zu
verwenden. Es ist zwar möglich, Schaltflächen von DBWebNavigator zu verbergen, die Position der Steuerelemente auf dem
Formular kann aber nicht geändert werden. Wenn Sie zum Beispiel bei DBWebNavigator alle Schaltflächen außer Zurück und
Weiter verbergen, werden diese weiterhin nebeneinander angezeigt. Um ihre Position im Formular zu ändern, können Sie die
Methoden der Navigations-API oder das DBWebNavigationExtender-Steuerelement verwenden. Mit beiden Verfahren können
Sie die Web Controls-Standardschaltflächen in Steuerelemente für die Navigation konvertieren.
Zur Bereitstellung dieser Möglichkeiten implementiert DBWebDataSource neue IDBDataSource-Methoden, die jeweils eine
bestimmte Navigationsaufgabe übernehmen. Der Aufruf dieser Methoden werden erfolgt in einer Behandlungsroutine für das
Ereignis Form_Load. Es ist nicht erforderlich, Klickereignisse zu implementieren.
Die folgenden Methoden stehen zur Verfügung:
• RegisterNextControl
• RegisterPreviousControl
• RegisterFirstControl
• RegisterLastControl
• RegisterInsertControl
• RegisterDeleteControl
• RegisterUpdateControl
• RegisterCancelControl
• RegisterUndoControl
91
1
Überblick zum DB Web Control-Experten
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
• RegisterUndoAllControl
• RegisterApplyControl
• RegisterRefreshControl
• RegisterGoToControl
Siehe auch
CodeGear DBWeb Controls (
see page 88)
Anwendung mit DBWeb Controls erstellen (
1
see page 199)
1.6.5 Überblick zum DB Web Control-Experten
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
CodeGear DB Web Controls sind datensensitive Web-Komponenten. Mit Hilfe von DB Web Controls können Sie datensensitive
Funktionen in Standard-Web Controls kapseln. Dies hat den Vorteil, dass die Datenbindung durch das Control selbst erfolgt und
kein Aufruf der Methode DataBind erforderlich ist.
Die Erstellung von DB Web Controls basiert auf folgenden Grundkonzepten:
• ASP.NET Control-Lebenszyklus (Control Execution Lifecycle, CEL)
• Datenbindung
• Überschreiben von ASP.NET-Methoden
• Implementieren von Borland DB Web-Interfaces
• Wichtige Änderungen am Quelltext
Der ASP.NET Control-Lebenszyklus (CEL)
Jedesmal, wenn eine ASP.NET Web Forms-Seite angezeigt wird, läuft ein Prozess ab, der von Microsoft als "Control Execution
Lifecycle", kurz CEL, bezeichnet wird. Er umfasst folgende Schritte, die jeweils von einer Methode repräsentiert werden:
1. Initialisieren
2. Anzeigestatus laden
3. Postback-Informationen verarbeiten
4. Laden
5. Änderungen der Postback-Informationen senden
6. Postback-Ereignisse behandeln
7. Seitenaufbau vorbereiten
8. Zustand speichern
9. Seite aufbauen
10. Seite freigeben
11. Entladen
Sie können für jeden dieser Schritte Programmlogik hinzufügen, indem Sie die entsprechenden Methoden, etwa Page_Load
oder OnInit, mit Quelltext ergänzen. Das Überschreiben der Methode Render (für den Seitenaufbau) ist fast immer
erforderlich.
92
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Überblick zum DB Web Control-Experten
Datenbindung
In ASP.NET kann eine Bindung zu unterschiedlichen Datenquellen hergestellt werden (z.B. zu Datenbanken, Text- und
XML-Dateien, Arrays und Kollektionen). In RAD Studio bieten Controls eine einfache, eigenschaftsbasierte Schnittstelle zu
Datenquellen. Sie können ein Control im Objektinspektor an eine Datenquelle binden, die das Projekt anhand eines
BDP.NET-Control, eines SQL-Client-Control oder eines anderen Daten- bzw. Datei-Control identifizieren kann. Die
verschiedenen Arten von Daten-Controls stellen jeweils unterschiedliche Anforderungen an die Datenbindung. Kollektionen
(Listenfelder, Datengitter oder Listenansichten) müssen beispielsweise an eine Datenquelle gebunden werden, die das
ICollection-Interface implementiert. Bei anderen Controls, wie Schaltflächen und Eingabefeldern, ist dies nicht erforderlich.
Wenn Sie mit Web Controls programmieren, müssen Sie den Code für die Datenbindung selbst hinzufügen. Für die Instanz
eines Datengitters könnte die entsprechende Anweisung wie folgt aussehen:
1
dataGrid1.DataBind();
Bei DB Web Controls ist dies nicht mehr erforderlich, da diese die Datenbindung automatisch vornehmen. Die
DBWebDataSource-Komponente fungiert als Verbindungsglied zwischen der Datenquelle und dem DB Web Control. Sie erzeugt
und verwaltet die Datenbindung zwischen der Datenquelle und dem Control. Sie können den Code für die Instantiierung eines
DB Web Control und die Durchführung der Datenbindung auch manuell hinzufügen. Erforderlich ist dies aber nicht. Sie können
Komponenten in ein Web Form einfügen und die gewünschten Verbindungen aus den Eigenschaftslisten des Objektinspektors
auswählen.
Anmerkung: Wenn Sie ein neues DB Web Control erstellen oder ein vorhandenes erweitern, müssen Sie eventuell Code für
die Bindung bestimmter Eigenschaften hinzufügen.
Überschreiben von ASP.NET-Methoden
Render (bzw. RenderContents) ist die Methode, die fast immer überschrieben werden muss. Diese Methode sorgt für die
Anzeige der Controls auf der Webseite. Wenn Sie die Methode Render nach ihrer Definition an eine Instanz der Klasse
HtmlTextWriter übergeben, wird ihr Inhalt im HTML-Format an die ASP.NET-Seite gesendet. Die Methode Write der Klasse
HtmlTextWriter schreibt einen String von HTML-Zeichen auf eine Web Forms-Seite.
Nachstehend sehen Sie die Deklaration des Control in der vom DB Web Control-Experten erzeugten Datei. Es handelt sich
dabei um ein sehr kurzes Codefragment.
/// TWebControl1 ist von der WebControl-Klasse von System.Web.UI.WebControls abgeleitet.
TWebControl1 = class(System.Web.UI.WebControls.WebControl)
Wenn Sie eigene Controls erstellen oder vorhandene erweitern, müssen Sie die Methode Render überschreiben, um das Control
anzuzeigen. Render sorgt dafür, dass die Ausgabe an eine Instanz der Klasse HtmlTextWriter gesendet wird. HtmlTextWriter
sendet eine Folge von HTML-Zeichen an die Web Forms-Seite. Die HTML-Zeichen stellen das Control in HTML dar. Ein
Datengitter wird auf einer Web Forms-Seite beispielsweise als HTML-Tabelle dargestellt. Jedes Control besitzt seine eigene
HTML-Darstellung. Wenn Sie ein Control erweitern, müssen Sie die HTML-Ausgabe modifizieren, damit das neue Control richtig
dargestellt wird.
///
///
///
///
In den folgenden Zeilen wird die Methode Render deklariert.
Output ist eine Instanz der Klasse HtmlTextWriter.
HtmlTextWriter ist die Klasse, die HTML-Zeichen an die
ASP.NET Web Forms-Seite sendet.
strict protected
procedure Render(Output: HtmlTextWriter); override;
implementation
{$REGION 'Control.Render override'}
/// Im Anschluss sehen Sie die überschriebene Render-Methode.
/// Sie können zusätzliche Logik zu dieser Prozedur hinzufügen,
93
Überblick zum DB Web Control-Experten
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
/// um das Verhalten des Control zu steuern. Die vorliegende Methode schreibt lediglich
/// eine Folge von HTML-Zeichen, die
/// TWebControl1 definieren.
procedure TWebControl1.Render(Output: HtmlTextWriter);
begin
Output.Write(Text);
end;
Der vorangehende Code muss auch dann implementiert werden, wenn die Funktionalität eines Standard-Web Control erweitert
werden soll. Um ein DB Web Controls mit zusätzlicher Funktionalität zu versehen, müssen Sie weitere Anpassungen an diesem
Code vornehmen.
Implementieren von Borland DB Web-Interfaces
Wenn Sie den DB Web Control-Experten starten, erzeugt dieser automatisch eine Datei mit dem Codegerüst, dass Sie für die
Erweiterung eines DB Web Control benötigen. Die Datei ist ähnlich strukturiert wie die Datei, die Sie bei der Erweiterung eines
Standard-Web Control erzeugen. Der DB Web Control-Experte fügt jedoch Implementierungen für spezielle DB Web-Interfaces
hinzu, die den automatischen Zugriff auf eine Datenquelle, Tabellen, Spalten und die entsprechenden Eigenschaften
ermöglichen. Da DB Web Controls einen großen Teil der Postback-Verarbeitung und Datenbindung automatisch durchführen,
müssen Sie verschiedene Interfaces implementieren, um die betreffende Funktionalität für Ihre Controls bereitzustellen.
1
Wichtige Änderungen am Quelltext
Wenn Sie eine neue DB Web Control-Bibliothek erstellen, generiert der DB Web Control-Experte automatisch eine
Template-Datei. Diese enthält die wichtigsten Elemente, die Sie im Projekt benötigten, um ein Control zu erstellen oder zu
erweitern. Sie müssen zusätzlich die folgenden Elemente hinzufügen oder ändern:
• Geben Sie bei Bedarf über das Attribut ToolboxBitmap ein eigenes Symbol für die Tool-Palette an.
• Bearbeiten Sie die Control-Deklaration, und geben Sie das Control an, das Sie ableiten möchten.
• Deklarieren Sie die Render-Methode.
• Implementieren Sie das IDBWebDataLink-Interface.
• Implementieren Sie bei Bedarf die Interfaces IDBWebColumnLink und IDBWebLookupColumnLink.
• Ändern oder erweitern Sie die Methode Render.
• Ändern Sie bei Bedarf die Registrierung verborgener Felder.
• Weisen Sie gegebenenfalls bestimmten Eigenschaften eine Datenbindung zu.
Ändern des Attributs ToolboxBitmap
Wenn Sie über ein Bitmap-Symbol für die Anzeige in der Tool-Palette verfügen, geben Sie den Pfad zu diesem Symbol in der
DB Web Control-Bibliotheksdatei im Attribut ToolboxBitmap an. Der entsprechende Code könnte wie folgt aussehen:
[ToolboxBitmap(typeof(WebControl1)]
['WebControl1.bmp')]
Stellen Sie sicher, dass die Bitmap-Datei für das Projekt zur Verfügung steht.
Ändern der Control-Deklaration
Sie können den Vorfahr expliziter angeben. Für eine erweiterte Version des DBWebGrid-Control könnte der Code
folgendermaßen aussehen:
MyDataGrid = class(Borland.Data.Web.DBWebGrid, IPostBackDataHandler, IDBWebDataLink)
94
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Überblick zum DB Web Control-Experten
Deklarieren der Render-Methode
Das Control kann entweder vom Namespace Control oder vom Namespace WebControls abgeleitet werden. WebControls
selbst ist auch vom Namespace Control abgeleitet.
In WebControls sind jedoch alle Standard-Web Controls definiert, sodass Sie Ihr Control von diesem Namespace ableiten
müssen, wenn Sie die Funktionalität eines Web Control (z.B. eines Textfelds oder Datengitters) erweitern möchten.
Durch die Ableitung von WebControls stehen Ihnen alle Eigenschaften zur Verfügung, die das Erscheinungsbild des Control
bestimmen. Controls, die über eine Benutzeroberfläche verfügen, werden in der Regel von System.Web.UI.WebControls
abgeleitet. In der DB Web Control-Bibliotheksdatei muss dann die Methode RenderContents überschrieben werden.
Wenn Sie ein Control vom Namespace Control ableiten, müssen Sie die Definition für die Benutzeroberfläche in der
überschriebenen Render-Methode bereitstellen. Controls, die über eine Benutzeroberfläche verfügen, werden normalerweise
von System.Web.UI.Control abgeleitet. In der DB Web Control-Bibliotheksdatei wird dann die Methode Render
überschrieben.
Implementieren des IDBWebDataLink-Interface
Über dieses Interface wird auf eine Datenquelle zugegriffen. Es muss für jedes DB Web Control implementiert werden, das Sie
erweitern. Die Implementierung wird in der DB Web Control-Bibliotheksdatei bereitgestellt.
Ändern oder erweitern der Render-Methode
In der Methode Render bzw. RenderContents (je nach Namespace) können Sie die Eigenschaften der Basisklasse
überschreiben. Der folgende Code wird automatisch zur DB Web Control-Bibliotheksdatei hinzugefügt:
procedure TWebControl1.Render(Output: HtmlTextWriter);
begin
Output.Write(Text);
end;
Diese Methode übergibt die Definition Ihres Control an eine Instanz von HtmlTextWriter mit dem Namen Output. Die Eigenschaft
Text enthält den anzuzeigenden HTML-Text. Der entsprechende Quelltext innerhalb der Methode könnte wie folgt aussehen:
procedure TWebControl1.Render(Output: HtmlTextWriter);
begin
Output.WriteFullBeginTag("html");
Output.WriteLine();
Output.WriteFullBeginTag("body");
Output.WriteLine();
Output.WriteEndTag("body");
Output.WriteLine();
Output.WriteEndTag("html");
Output.WriteLine();
end;
Das Ergebnis ist eine ASP.NET-Webseite mit folgendem HTML-Code:
<html>
<body>
</body>
</html>
Die Arbeit lässt sich durch die Verwendung der Eigenschaft Text wesentlich vereinfachen. Nachdem Sie Ihr Control und seine
Eigenschaften definiert haben, können Sie die gesamte Struktur zusammen mit verschiedenen HTML-Tags an die Eigenschaft
Text übergeben. Danach können sämtliche Aktionen für das Control über die Text-Eigenschaft gesteuert werden. Sie definieren
die Eigenschaften des Control und übergeben sie mittels einer Text-Eigenschaft, welche die Control-Definition enthält, an die
HtmlTextWriter-Komponente. Sehen Sie sich den Quelltext einiger vorhandener DB Web Controls an. Nachstehend sehen Sie
95
1
Überblick zum DB Web Control-Experten
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
z.B. die Definition der Eigenschaft Text für das DBWebNavigator-Control.
protected string Text{
get
{
// Neue Instanz von StringWriter erstellen.
StringWriter sw = new StringWriter();
// Neue Instanz von HtmlTextWriter erstellen.
HtmlTextWriter tw = new HtmlTextWriter(sw);
// DataBind-Prozedur aufrufen.
DataBind();
// AddButtons-Prozedur aufrufen.
AddButtons();
1
// SetButtonsWidth-Prozedur aufrufen.
SetButtonsWidth();
// Stil für Panel-Komponente hinzufügen.
ClassUtils.AddStyleToWebControl(FPanel, this.Style);
// HTML-Start-Tag für ein Panel-Control rendern.
FPanel.RenderBeginTag(tw);
// HtmlTextWriter.Write-Methode aufrufen und die Tabellen// und Tabellenzeilen-Tags an die Web Forms-Seite übergeben
tw.Write("<table><tr>");
// Wenn ButtonType den Wert ButtonIcons hat, Schaltflächen iterativ erstellen und
// an die Web Forms-Seite übergeben:
if( ButtonType == NavigatorButtonType.ButtonIcons )
{
for( int i = 0; i < IconNavButtons.Count; i++ )
{
// Start-Tag für Tabellenzelle schreiben.
tw.Write("<td>");
// Bildschaltfläche instantiieren.
ImageButton b = (IconNavButtons[i] as ImageButton);
// Schaltfläche auf der Webseite anzeigen.
b.RenderControl(tw);
// End-Tag für Tabellenzelle schreiben.
tw.Write("</td>");
}
}
else
// Wenn ButtonType nicht den Wert ButtonIcons hat, Schaltflächen iterativ erstellen
und
// Standard-Navigationsschaltflächen auf der Web Forms-Seite anzeigen:
{
for( int i = 0; i < NavButtons.Count; i++ )
{
// Start-Tag für Tabellenzelle schreiben.
tw.Write("<td>");
96
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Überblick zum DB Web Control-Experten
// Eine Schaltfläche instantiieren.
Button b = (NavButtons[i] as Button);
// Schaltfläche auf der Webseite anzeigen.
b.RenderControl(tw);
// End-Tag für Tabellenzelle schreiben.
tw.Write("</td>");
}
}
// End-Tags für Zeile und Tabelle schreiben.
tw.Write("</tr></table>");
// End-Tag für Panel-Komponente rendern.
FPanel.RenderEndTag(tw);
return sw.ToString();
}
}
1
Ändern der Registrierung verborgener Felder
Die DB Web Control-Bibliotheksdatei enthält einen Aufruf zum Registrieren eines verborgenen Feldes, das den Schlüssel für ein
Lesen-Schreiben-Control enthält. Wenn Sie ein schreibgeschütztes Control erstellen, können Sie diesen Aufruf entfernen oder
auskommentieren. Der Aufruf in der Bibliotheksdatei sieht folgendermaßen aus:
Page.RegisterHiddenField(DBWebDataSource.IdentPrefix +
DBWebConst.Splitter + IDataLink.TableName, self.ID);
Zuweisen der Datenbindung für bestimmte Eigenschaften
Wenn zusätzlich zur Eigenschaft Text weitere Eigenschaften mit einer Datenbindung versehen werden sollen, fügen Sie den
entsprechenden Code an derselben Stelle wie bei der Text-Eigenschaft hinzu. Normalerweise enthält die Methode PreRender
einen Aufruf von DataBind. Die DataBind-Prozedur selbst sieht in etwa so aus wie im folgenden Beispiel (es stammt aus dem
Quelltext für das DBWebLabeledTextBox-Control). In diesem Codebeispiel werden verschiedene Eigenschaften gesetzt,
nachdem überprüft wurde, ob FColumnLink (aus dem IDBWebDataColumnLink-Interface) mit einer Datenquelle verbunden ist.
public override void DataBind()
{
try
{
FTextBox.ReadOnly = FReadOnly;
FTextBox.ID = this.ID;
base.DataBind();
ClassUtils.SetBehaviorProperties(FPanel, this);
ClassUtils.SetOuterAppearanceProperties(FPanel, this);
ClassUtils.SetSizeProperties(FPanel, this);
if( !ClassUtils.IsEmpty(FLabel.Text) )
{
ClassUtils.SetInnerAppearanceProperties(FLabel, this);
SetProportionalSize();
SetLabelFont();
FTextBox.Text = null;
}
// Wenn eine Datenquelle vorhanden ist...
if( IColumnLink.DBDataSource != null )
{
// ...und Daten mit ihr verbunden sind...
97
XML-Dateien und DB Web Controls
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
if( FColumnLink.IsDataBound )
{
// Eigenschaften für Verhalten zuweisen.
ClassUtils.SetBehaviorProperties(FTextBox, this);
// Eigenschaften für Aussehen zuweisen.
ClassUtils.SetAppearanceProperties(FTextBox, this);
// Eigenschaften für Größe zuweisen.
ClassUtils.SetSizeProperties(FTextBox, this);
object o = IColumnLink.DBDataSource.GetColumnValue(Page,
IColumnLink.TableName, IColumnLink.ColumnName);
// Haben Seiten-, Tabellen- und Spaltenname einen Wert ungleich Null,
// sind verbundene Daten vorhanden.
// In diesem Fall String-Darstellungen der Namen
// im Textfeld anzeigen.
if( o != null )
1
FTextBox.Text = Convert.ToString(o);
else
// Andernfalls Textfeld leeren und das Feld und
// seine Eigenschaften an angegebene Spalte
binden.
FTextBox.Text = "";
FTextBox.DataBind();
}
}
Siehe auch
Überblick zu CodeGear DB Web Controls (
WebDataLink-Interfaces verwenden (
see page 88)
see page 103)
Den DB Web Control-Experten verwenden (
see page 211)
1.6.6 XML-Dateien und DB Web Controls verwenden
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
Die DBWebDataSource-Komponente bietet die Möglichkeit, XML- und XSD-Dateien zu erstellen und als Datenquelle für eine
ASP.NET-Anwendung zu verwenden. Normalerweise verwenden Sie diese Dateitypen im Zusammenhang mit DB Web Controls
lediglich, um einen Prototyp der Anwendung zu erhalten. Sie können aber während der Design- und Entwicklungsphase des
Projekts XML-Dateien als Datenquelle nutzen, um den (eventuell kostspieligen) Zugriff auf Datenbankressourcen zu umgehen.
In diesem Thema werden folgende Bereiche behandelt:
• XML-Dateien als Datenquellen
• Empfohlene Workflow-Strategie
• Authentifizierung und Zwischenspeicherung
XML-Dateien als Datenquellen
XML-Dateien werden von vielen Anwendungen als Datenquellen genutzt. Dies gilt insbesondere für ASP.NET-Anwendungen.
Vor allem wenn die Sicherheit keine herausragende Rolle spielt und die Daten daher als Text über HTTP gesendet werden
98
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
XML-Dateien und DB Web Controls
können, stellen XML-Dateien ein einfache Lösung dar. Die Dateien enthalten lediglich Text und sind daher einfach zu lesen. Die
Beschreibung der Daten erfolgt mittels XML-Tags, sodass sich Datenstrukturen problemlos erkennen und verarbeiten lassen.
Trotz ihrer vielen Vorzüge gegenüber anderen, komplexeren Datenstrukturen haben XML-Dateien aber auch einige Nachteile.
Da die Sicherheit nicht in ausreichendem Maß gewährleistet ist, sollten wichtige Daten (wie Kreditkarten- oder PIN-Nummern)
nicht per XML-Dateien über das Internet übertragen werden. Ein weiterer Nachteil ist, dass XML-Datensätze im Gegensatz zu
Datensätzen aus Datenbanken keine Steuerung des parallelen Zugriffs ermöglichen.
Trotz dieser Nachteile eignen sich XML-Dateien aufgrund ihrer selbstbeschreibenden Struktur und ihres kompakten
Datenformats ideal als Datenquellen für ASP.NET-Anwendungen. Das DBWebDataSource-Control wurde so konzipiert, dass
neben anderen Ressourcen auch XML-Dateien als Datenquelle verwendet werden können. Dabei sind keine besonderen
Anforderungen zu beachten, sondern es können die gewohnten Treiber und Kommunikationsschichten von RAD Studio genutzt
werden. Die Verwendung von XML-Dateien als Datenquelle gestaltet sich somit völlig problemlos.
1
Empfohlene Workflow-Strategie
Die Erstellung der XML-Datei für die Anwendung erfolgt mit dem DBWebDataSource-Control. Danach muss die Datei mit einem
DataSet-Objekt verbunden werden. Der Vorgang läuft folgendermaßen ab:
• Erstellen Sie eine ASP.NET-Anwendung mit einer Verbindung zur Zieldatenbank. Verweisen Sie dann mit Hilfe von DB Web
Controls auf eine nicht vorhandene XML-Datei. Bei diesem Vorgang muss ein DBWebDataSource-Control verwendet werden.
Wenn die Anwendung ausgeführt wird, übernimmt das DataSet-Objekt die Ergebnismenge von der Zieldatenbank bzw. dem
DBWebDataSource-Control und füllt die XML-Datei mit Tag-Daten, die die Datenmenge darstellen.
• Nun können Datenadapter und Datenverbindung eliminiert werden. Beibehalten werden lediglich ein DataSet-Objekt, das
DBWebDataSource-Control und die Referenz auf die XML-Datei. Die DB Web Controls rufen ihre Daten dann nicht von der
Datenbank, sondern von der XML-Datei und dem DataSet-Objekt ab. Weitere Informationen erhalten Sie über die Links zu
den Anleitungen, in denen die Erstellung von XML-Dateien und ihre Verwendung mit DB Web Controls beschrieben wird.
Authentifizierung und Zwischenspeicherung
DB Web Controls unterstützen das automatische Lesen einer XML-Datei durch die DBWebDataSource-Komponente zur
Entwurfs- und zur Laufzeit. Die DBWebDataSource-Komponente besitzt Eigenschaften für die Zwischenspeicherung von
XML-Daten. Wenn Sie die XML-Zwischenspeicherung verwenden, werden die Daten der XML-Datei beim Laden einer
Datenquelle automatisch in das DataSet-Objekt eingelesen.
Wenn Sie in Ihrer Anwendung keine Benutzerauthentifizierung implementieren, werden Sie dieses Leistungsmerkmal
wahrscheinlich nur bei der Erstellung von Prototypen verwenden. Das Fehlen einer Benutzerauthentifizierung kann zu
Zugriffsproblemen führen, wenn mehrere Benutzer gleichzeitig auf dieselbe XML-Datei zugreifen. Wenn mehrere Clients die
Anwendung verwenden, wird die XML-Datei aufgrund der Aktionen verschiedener Benutzer ständig überschrieben. Um dies zu
verhindern, können Sie der Serveranwendung Programmlogik hinzufügen, die Zeilenaktualisierungen überprüft und die Clients
gegebenenfalls auf einen Konflikt hinweist. Dies entspricht in etwa den Sperren auf Tabellen- oder Zeilenebene, die von einem
Datenbanksystem gesetzt werden. Da eine XML-Datei eine Textdatei ist, lässt sich aber ein derartiger Kontrollmechanismus nur
mit einigem Aufwand implementieren.
Sie können das Problem umgehen, indem Sie durch Zuweisung der Eigenschaft UseUniqueFileName eine
Benutzerauthentifizierung implementieren. Diese Eigenschaft veranlasst, dass das DBWebDataSource-Control für jeden Client,
der auf die in der XMLFileName-Eigenschaft des DBWebDataSource-Control angegebene XML-Datei zugreift, eine eigene
XML-Datei mit einem eindeutigen Namen erstellt. Auf diese Weise lassen sich Datenkollisionen in Mehrbenutzeranwendungen
vermeiden. Dieses Verfahren hat allerdings den Nachteil, dass die einzelnen Client-XML-Dateien unterschiedliche Daten
enthalten, die von der Serveranwendung (durch entsprechende Programmlogik) zusammengeführt werden müssen.
Wenn die Eigenschaft XMLFileName in Lese-Schreib-Anwendungen verwendet wird, benötigen alle Web-Clients Schreibzugriff
auf die XML-Dateien, in denen sie Daten speichern. Auf Clients, die keinen Schreibzugriff haben, tritt beim Versuch, die
XML-Datei zu aktualisieren, ein Zugriffsfehler auf. Sie müssen daher allen Clients, die die Anwendung nutzen, Schreibrechte
gewähren.
99
Mit DataView-Objekten arbeiten
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
Siehe auch
Überblick zu CodeGear DB Web Controls (
DB Web-XML-Datei erstellen (
see page 88)
see page 201)
Aktenkoffermodell-Anwendung mit DB Web Controls erstellen (
see page 198)
1.6.7 Mit DataView-Objekten arbeiten
1
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
DataView-Objekte (Datenansichten) ermöglichen es Ihnen, ein DataTable-Objekt unter Verwendung der Eigenschaft RowFilter
zu filtern oder die Anordnung der Daten zu ändern. Die DataView-Komponenten befindet sich unter dem Bereich
Datenkomponenten der Tool-Palette. In diesem Thema wird Folgendes behandelt:
• Laufzeiteigenschaften
• Haupt/Detail-Beziehungen
• Die Methode ClearSessionChanges
• Einschränkungen für DataView-Objekte
Laufzeiteigenschaften
Zur Entwurfszeit wird ein DBWeb Control, das ein DataView-Objekt referenziert, automatisch aktualisiert, wenn sich eine
DataView-Eigenschaft ändert, die die Anzeige der Zeilen in der Datenansicht steuert. Wird eine DataView-Eigenschaft zur
Laufzeit geändert, muss die Änderung bereits in Kraft sein, bevor DB Web Controls dargestellt werden.
Wenn Sie beispielsweise zur Definition des Filters ein Listenfeld (ListBox) verwenden, müssen Sie folgende Aktionen ausführen:
• Setzen Sie die AutoPostback-Eigenschaft des Listenfeldes auf True.
• Fügen Sie Code für die Page_Load-Ereignisbehandlungsroutine hinzu, um den Zuweisung der Eigenschaft RowFilter zu
steuern.
• Fügen Sie der Page_Load-Ereignisbehandlungsroutine Code hinzu, der nach der Änderung von RowFilter die Methode
ClearSessionChanges aufruft.
Angenommen, ein Formular enthält zwei Tabellen. Sie binden ein ASP.NET-Listenfeld an eine der Tabellen, die
Nachschlagewerte enthält. Diese Werte fungieren als Filter für die zweite Tabelle, deren Werte in einem DBWebGrid-Objekt
angezeigt werden. Sie müssten in diesem Fall die Eigenschaft AutoPostback für das Listenfeld auf True setzen, den Wert von
RowFilter in einer Behandlungsroutine für Page_Load zuweisen und nach der Änderung von RowFilter die Methode
ClearSessionChanges aufrufen.
Tip: Wenn Sie für die Eigenschaft AutoRefresh die Standardeinstellung False beibehalten, werden zwischengespeicherte
Daten unter Umständen nicht gelöscht. Das WorldTravel-Demo in \Demos\DBWeb zeigt die korrekte Vorgehensweise.
Haupt/Detail-Beziehungen
Ein DataView-Objekt kann durch Hinzufügen eines Zeilenfilters als Haupttabelle einer Haupt/Detail-Beziehung verwendet
werden. Dazu definieren Sie eine Haupt/Detail-Beziehung mit zwei oder mehr DataTable-Objekten in einem einzelnen
DataSet-Objekt und verbinden das DataView-Objekt mit dem DataTable-Objekt, das die Hauptdatentabelle darstellt. Wenn das
DBWebDataSource-Objekt die Verbindung zum DataView-Objekt herstellt, können die DB Web Controls entweder die
übergeordnete Tabelle (also das DataView-Objekt) oder die Detailtabelle auswählen.
Die Methode ClearSessionChanges
Die Methode ClearSessionChanges setzt das DBWebDataSource-Objekt davon in Kenntnis, dass die Datenmenge (DataSet)
geändert wurde und die Informationen zu Zeilen, Spalten und geänderten Daten nicht mehr gültig sind. Alle anstehenden
100
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
Deployment von ASP.NET-Anwendungen
Änderungen werden gelöscht. Wenn Sie versuchen, diese Methode in einer Behandlungsroutine für das Klickereignis einer
DBWebNavigator-Schaltfläche aufzurufen, funktioniert die DBWebNavigator-Schaltfläche nicht.
Einschränkungen für DataView-Objekte
Bei der Arbeit mit Datenansichten sind verschiedene Einschränkungen zu beachten:
• Eingefügte Zeilen verhalten sich in einem DataView-Objekt anders als in einem DataTable-Objekt.
• In ein DataView-Objekt können nicht mehrere leere Datensätze eingefügt werden. Deshalb muss eine Zeile nach dem
Einfügen erst mit Daten gefüllt werden, bevor eine weitere Zeile eingefügt werden kann.
• Wird eine eingefügte Zeile gelöscht, wird sie aus der Datenansicht entfernt und kann nicht mit der Rückgängig-Funktion
wiederhergestellt werden.
• Enthält eine eingefügte Zeile einen einzelnen Wert, der nicht Null ist, und wird dieser Wert auf Null gesetzt, kann die Zeile
eventuell gelöscht werden. Eine Wiederherstellung ist dann nicht möglich.
1
• DB Web Controls bieten keine vollständige Unterstützung für die Eigenschaft Sort von DataView-Objekten. Bei der
Verarbeitung eines Sortierfeldes können die Werte für die in der Eigenschaft Sort angegebenen Felder nicht geändert
werden. Die Taste EINFG ist daher für das DBWebNavigator-Objekt deaktiviert.
Siehe auch
Daten-Provider für .NET (
see page 28)
ASP.NET-Anwendungen erstellen (
see page 186)
1.6.8 Deployment von ASP.NET-Anwendungen
Dieses Thema enthält Informationen über:
• Anforderungen an den Webserver
• Vorbereiten der Weitergabe
• Der ASP.NET-Deploymentmanager von RAD Studio
Weitere Informationen über das Deployment enthält die Datei deploy.htm im Verzeichnis C:\Programme\CodeGear\RAD
Studio\5.0.
Anforderungen an den Webserver
Der Webserver, an den die Anwendung weitergegeben werden soll, muss folgende Voraussetzungen erfüllen:
• Auf dem Webserver muss Internet Information Services (IIS) 6.0 installiert und betriebsbereit sein.
• Auf dem Webserver muss das .NET Framework installiert sein.
• Auf dem Webserver muss ASP.NET aktiviert sein.
• Das ASP.NET-Konto auf dem Webserver muss mit den richtigen Berechtigungen konfiguriert sein.
Informationen zum Installieren von IIS finden Sie in der Dokumentation des Windows-Betriebssystems. Informationen zu den
anderen oben beschriebenen Aufgaben erhalten Sie über den Link zu den Anforderungen der ASP.NET-Plattform am Ende
dieses Themas.
Vorbereiten der Weitergabe
Vor dem Deployment der Anwendung sollten Sie das Debuggen deaktivieren und die Anwendung neu compilieren, da sie
dadurch kompakter und effizienter wird:
• Bei einer Delphi ASP.NET- oder C#-Anwendung deaktivieren Sie das Debuggen in der zugehörigen web.config-Datei.
Weitere Informationen erhalten Sie über den Link zur Verwendung des Deploymentmanagers am Ende dieses Themas.
• Bei einer C#-Anwendung wählen Sie Projekt Optionen, ändern die Einstellungen Fehlersuche/Ausgabe zu Ausgabe und
101
WebDataLink-Interfaces verwenden
RAD Studio für .NET
1.6 Webanwendungen mit ASP.NET
compilieren die Anwendung erneut.
Der ASP.NET-Deploymentmanager von RAD Studio
Sie könnten zwar auch mit dem Befehlszeilen-Tool XCOPY das gesamte Projektverzeichnis auf einen Webserver kopieren, für
das Deployment wird aber nur ein Teil dieser Dateien benötigt. Hierzu gehören z.B. die Dateien mit der Erweiterung .aspx,
.config und .dll. Delphi-spezifische Dateien wie .bdsproj-, .dcuil- und .pas-Dateien sind dagegen nicht erforderlich.
Zu RAD Studio gehört der ASP.NET-Deploymentmanager, der Sie beim Deployment Ihrer ASP.NET-Anwendungen unterstützt.
Mit seiner Hilfe können Sie das Deployment auf einem externen Computer (mittels einer Freigabe oder einer FTP-Verbindung)
oder auf Ihrem lokalen Computer durchführen.
1
Wenn Sie für Ihr Projekt einen Deploymentmanager bereitstellen, wird eine XML-Datei (.bdsdeploy) in das Projektverzeichnis
eingefügt, und in der IDE wird eine eigene Registerkarte für das Deployment angezeigt. Auf dieser Registerkarte geben Sie die
erforderlichen Informationen für das Ziel und die Verbindung ein. Sie können bei Bedarf die Liste der zu kopierenden Dateien
modifizieren. Der Deploymentmanager kopiert die Dateien dann zum angegebenen Ziel.
Siehe auch
Anforderungen der ASP.NET-Plattform
Überblick zum Deployment von Anwendungen
Den ASP.NET-Deploymentmanager verwenden (
see page 212)
1.6.9 WebDataLink-Interfaces verwenden
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
DB Web Controls unterscheiden sich von herkömmlichen Web Controls vor allem dadurch, dass sie die Datenbindung
automatisch durchführen. Während des Entwurfs müssen Sie zwar weiterhin die Verbindungen zwischen Datenquellen und
Controls konfigurieren, zur Laufzeit erfolgt die Datenbindung jedoch automatisch, d.h. es muss kein entsprechender Befehl in
den Quelltext aufgenommen werden. Wenn Sie ein DB Web Control mit Hilfe des DB Web Control-Experten erweitern,
implementieren Sie verschiedene Interfaces, die die Funktionalität für die Datenbindung bereitstellen. Diese Interfaces werden
im vorliegenden Thema beschrieben.
• IDBWebDataLink
• IDBWebColumnLink: IDBWebDataLink
• IDBWebLookupColumnLink: IDBWebColumnLink
IDBWebDataLink
Dieses Interface wird von allen DB Web Controls implementiert. Es definiert eine Datenquelle und eine Datentabelle und
ermöglicht es Ihnen, Daten aus einer Vielzahl verschiedener Ressourcen wie Datenbanken, Textdateien, Arrays und
Kollektionen abzurufen. Sie implementieren dieses Interface für Controls, die nur Daten auf Tabellenebene abrufen.
IDBWebColumnLink:IDBWebDataLink
Dieses Interface wird von DB Web Controls für die Anzeige von Spalten implementiert. Hierzu gehören z.B.DBWebImage,
DBWebTextBox und DBWebCalendar. Das Interface definiert einen Spaltennamen, mit dem ein Spalten-Control verbunden
werden kann. Zusammen mit dem Interface IDBWebDataLink ermöglicht es den Zugriff auf Standardtabellen- und -spaltendaten.
IDBWebLookupColumnLink:IDBWebColumnLink
Dieses Interface wird von DB Web Controls für Nachschlagezwecke implementiert (z.B. von DBWebListBox, DBWebRadioGroup
und DBWebDropDownList). Es definiert einen Tabellennamen (TableName) in einem DataSet-Objekt, einen Spaltennamen
102
1.6 Webanwendungen mit ASP.NET
RAD Studio für .NET
WebDataLink-Interfaces verwenden
(ColumnName), der die Tabelle der anzuzeigenden Daten repräsentiert, sowie die Spalte für die Werte, die bei Auswahl eines
Werts in das mit dem Control verbundenen ColumnName-Feld eingefügt werden. Per Vorgabe ist ColumnName mit
DataTextField identisch. Controls für Nachschlagezwecke besitzen zusätzlich zu einer Texteigenschaft (normalerweise das
Element, das im Control, z.B. einer Liste, angezeigt wird) auch eine Werteigenschaft. Die Werteigenschaft kann mit der
Texteigenschaft identisch sein, aber auch völlig andere Daten (etwa eine ID) enthalten. So könnten Sie z.B. in einer Liste bzw.
Dropdown-Liste Produktnamen anzeigen, die Werte für die angezeigten Elemente aber auf die zugehörigen Produktnummern
setzen. Wenn der Benutzer einen Produktnamen auswählt, wird an die Anwendung nicht der Name, sondern die
Produktnummer übergeben. Dieses Verfahren hat den Vorteil, dass bei der Verarbeitung keine Konflikte aufgrund ähnlicher
Namen auftreten können.
Siehe auch
DB Web Controls (
see page 88)
Anwendung mit DB Web Controls erstellen (
ASP.NET-Anwendungen erstellen (
1
see page 199)
see page 186)
103
Überblick zu den ASP.NET-Web-Services
RAD Studio für .NET
1.7 Web-Services mit ASP.NET entwickeln
1.7 Web-Services mit ASP.NET entwickeln
1
Web-Services sind eine programmierbare Entität, die eine bestimmte Funktionalität bereitstellt, zum Beispiel eine
Anwendungslogik. Auf Web-Services kann von jedem beliebigen System mit Hilfe der Internetstandards (z.B. XML und HTTP)
zugegriffen werden. Bei Anwendungen, die mit ASP.NET-Web-Services erstellt wurden, kann es sich entweder um
eigenständige Anwendungen handeln oder um Teilkomponenten einer größeren Webanwendung. Mit Hilfe des XML-basierten
Messaging können diese Anwendungen für eine beliebige Anzahl verteilter Systeme Anwendungskomponenten bereitstellen.
RAD Studio enthält verschiedene Methoden, die Sie beim Erstellen, Deployment und Verwenden von
ASP.NET-Web-Services-Anwendungen unterstützen. Weitere grundlegende Informationen über Web-Services finden Sie in der
Dokumentation zum Microsoft .NET SDK.
Themen
Name
Beschreibung
Überblick zu den ASP.NET-Web-Services (
Protokoll-Stack von Web-Services (
ASP.NET-Web-Services-Support (
see page 106)
see page 108)
see page 110)
Web-Services ist eine Internet-basierte Integrationstechnik, die es ermöglicht,
Anwendungen unabhängig von ihrer Plattform oder Programmiersprache
miteinander zu verbinden und Informationen auszutauschen. Web-Services sind
in das ASP.NET-Modell integriert, das für das .NET Framework verwendet wird.
Im Gegensatz zu den traditionellen Windows-Anwendungen enthalten
ASP.NET-Web-Services-Anwendungen Objekte und Methoden, die mit Hilfe
einfacher Messaging-Protokoll-Stacks über das Web bereitgestellt werden. Jeder
Client kann eine Web-Services-Anwendung über HTTP mit einer Webmethode
aufrufen. Wie jede andere Methode, auf die sich über eine einfache Windows
Forms-Anwendung zugreifen lässt, so enthalten auch Webmethoden eine
definierte Funktionalität. Der wesentliche Unterschied besteht darin, dass auf
Webmethoden über einen Web-Browser zugegriffen wird.... more ( see page
106)
Um die Infrastruktur von Web-Services zu verstehen, benötigen Sie
Vorkenntnisse in XML (Extensible Markup Language), SOAP (Simple Object
Access Protocol), WSDL (Web Services Description Language) und UDDI
(Universal Description, Discovery, and Integration). Da die Infrastruktur bereits
besteht, können Sie als Entwickler von XML-Web-Services die vorhandene
Technologie der Standard-Web-Protokolle wie XML und HTTP nutzen.
CodeGear bietet eine Möglichkeit zum Erstellen, Deployment und Verwenden
von Web-Services, bei der die Backend-Verarbeitung kein Problem darstellt, d.h.
Sie können sich auf den Entwurf Ihrer Services konzentrieren.
In diesem Thema wird erläutert, welche Rolle Protokoll-Stacks für die
Funktionalität von Web-Services spielen. Dabei wird auf folgende Aspekte...
more ( see page 108)
ASP.NET-Web-Services unterstützen VCL.NET-Formulare, .NET Windows
Forms und ASP.NET Web Forms. Mit Hilfe dieser Formulare lassen sich
Client-Anwendungen erstellen, die auf Web-Services-Anwendungen zugreifen.
Mit der Funktion Webreferenz hinzufügen können Sie diesen
Client-Anwendungen dann die erforderliche ASP.NET-Web-Services-Anwendung
hinzufügen. Mit dem UDDI-Browser lassen sich Web-Services-Anwendungen
lokalisieren.
RAD Studio stellt einige einfache Tools zur Entwicklung und für das Deployment
von ASP.NET-Web-Services bereit. Ferner unterstützt RAD Studio den Import
von WSDL-Dokumenten, die eine bestimmte Web-Services-Anwendung
beschreiben und ihre Funktionalität der Client-Anwendung mitteilen. Sie können
die Beispiel-WebMethod von RAD Studio dazu verwenden, eine
ASP.NET-Web-Services-Anwendung zu erstellen und darauf zuzugreifen.
In diesem Thema wird Folgendes behandelt:
• ASP.NET-Web-Services-Client-Support... more (
page 110)
104
see
1.7 Web-Services mit ASP.NET entwickeln
RAD Studio für .NET
Überblick zu den ASP.NET-Web-Services
1.7.1 Überblick zu den ASP.NET-Web-Services
Web-Services ist eine Internet-basierte Integrationstechnik, die es ermöglicht, Anwendungen unabhängig von ihrer Plattform
oder Programmiersprache miteinander zu verbinden und Informationen auszutauschen. Web-Services sind in das
ASP.NET-Modell integriert, das für das .NET Framework verwendet wird. Im Gegensatz zu den traditionellen
Windows-Anwendungen enthalten ASP.NET-Web-Services-Anwendungen Objekte und Methoden, die mit Hilfe einfacher
Messaging-Protokoll-Stacks über das Web bereitgestellt werden. Jeder Client kann eine Web-Services-Anwendung über HTTP
mit einer Webmethode aufrufen. Wie jede andere Methode, auf die sich über eine einfache Windows Forms-Anwendung
zugreifen lässt, so enthalten auch Webmethoden eine definierte Funktionalität. Der wesentliche Unterschied besteht darin, dass
auf Webmethoden über einen Web-Browser zugegriffen wird. Weitere grundlegende Informationen über Web-Services finden
Sie in der Dokumentation zum Microsoft .NET Framework SDK.
CodeGear bietet Tools für die Entwicklung und den Zugriff auf ASP.NET-Web-Services an, die verschiedene Techniken
verwenden. Da es sich um modulare Objekte handelt, lassen sich Web-Services ohne zusätzlichen Code erneut verwenden.
Die folgenden Themen bieten eine kurze Einführung in die Architektur von ASP.NET-Web-Services, in die Grundlagen der
Kommunikation von Web-Services und einen Überblick über die Dateien, die zur Erstellung von ASP.NET-Web-Services
erforderlich sind.
Folgende Bereiche werden behandelt:
• Architektur von ASP.NET-Web-Services
• Voraussetzungen für die Arbeit mit Web-Services
• Szenarien für Web-Services
• Dateien von ASP.NET-Web-Services
Architektur von ASP.NET-Web-Services
Zu den wichtigsten Komponenten der Architektur von ASP.NET-Web-Services gehören eine Client-Anwendung, eine
ASP.NET-Web-Services-Anwendung, verschiedene andere Dateien, zum Beispiel Quelltextdateien in der Programmiersprache,
sowie .asmx-Dateien und compilierte .dll-Dateien. Und schließlich ist ein Webserver notwendig, der sowohl die
ASP.NET-Web-Services-Anwendung als auch den Client beherbergt. Wahlweise ließe sich auch ein Datenbankserver zum
Speichern und Zugreifen auf die Daten des ASP.NET-Web-Services hinzuziehen.
Voraussetzungen für die Arbeit mit Web-Services
Bevor Sie damit beginnen, eine Web-Services-Anwendung zu entwickeln, sollten Sie mit den folgenden Konzepten vertraut sein:
• XML (Extensive Markup Language) XML ist eine benutzerdefinierte, auch von Menschen lesbare Auszeichnungssprache
zur Strukturierung von Daten. Alle Daten, Datenmengen oder Dokumente, die Sie an Web-Services übermitteln oder von
diesen empfangen möchten, sind in XML formatiert.
• SOAP (Simple Object Access Protocol) SOAP ist das Standard-Nachrichtenprotokoll, das zur Kommunikation zwischen
den Web-Services und ihren Clients verwendet wird. SOAP verwendet XML zur Formatierung seiner Nachrichten und enthält
105
1
Überblick zu den ASP.NET-Web-Services
RAD Studio für .NET
1.7 Web-Services mit ASP.NET entwickeln
die Parameter oder Rückgabewerte, die von den Servern oder Clients benötigt werden.
• WSDL (Web Services Description Language) WSDL ist eine Beschreibungssprache für Web-Services. Ein Web-Service
kann in verschiedenen Implementierungssprachen definiert werden. Jeder Web-Service muss jedoch eine Beschreibung
seines Interface veröffentlichen, damit die Clients damit in Interaktion treten können. Das WSDL-Dokument sollte zumindest
die erforderlichen Parameter beschreiben, die ein Client enthalten muss, sowie das Ergebnis, das der Client
erwartungsgemäß empfangen kann. Die Ergebnisbeschreibung besteht üblicherweise aus dem Rückgabedatentyp.
• UDDI (Universal Description Discovery and Integration) UDDI beruht auf einer Initiative der Industrie und ist ein
Standard-Webverzeichnis, auf dessen Basis Unternehmen Web-Services veröffentlichen können, die von anderen
Unternehmen genutzt werden. Das UDDI-Verzeichnis enthält Links und Beschreibungen zu verschiedenen Web-Services. Sie
können den UDDI-Browser in der IDE dazu verwenden, Web-Services zu suchen, WSDL-Dokumente herunterzuladen und
zusätzliche Informationen über Web-Services und die Unternehmen einzuholen, die sie bereitstellen.
Szenarien für Web-Services
1
Die aktuellen Web-Services enthalten Informationsquellen, die sich auf einfache Weise in Anwendungen integrieren lassen, zum
Beispiel Aktienkurse, Wettervorhersagen und Sportergebnisse. Mit zunehmender Nachfrage nach einem Zugriff auf
Geschäftslogiken über das Web entwickeln die Unternehmen Möglichkeiten für ihre Kunden, mit Hilfe von Anwendungen
bestimmte Informationen zu analysieren und einzuholen. Eine Bank kann beispielsweise einen Web-Service bereitstellen, der
Finanzdaten für einen Kunden (Aktienportfolio, Bankkonten, Außenstände usw.) zusammenstellt und aktualisiert. Der Kunde
kann auf diese Informationen über ein Tabellenblatt, eine Website oder ein anderes digitales Gerät zugreifen, und muss sie nicht
manuell zusammenstellen. Zwar steht ein Großteil dieser Informationen bereits heute im Web bereit, doch ein Web-Service kann
den Zugriff und die Zusammenführung dieser Daten vereinfachen und dafür eine verlässlichere Umgebung zur Verfügung stellen.
Web-Services lassen sich in folgenden Bereichen als Lösung verwenden:
• Anwendungsintegration im Unternehmen (Enterprise Application Integration = EAI) Mit einem Web-Service könnten
mehrere Geschäftspartner Bestandsdaten, Bestellinformationen oder andere Finanzdaten austauschen, ohne dabei Einblick
in die genaue Datenstruktur des jeweiligen Partners zu erhalten. Viele CRM- (Customer Relationship Management) oder
andere Frontend-Anwendungen speichern beispielsweise Kundendaten in einem Format ab, das nicht ganz kompatibel mit
den Backend-ERP-Systemen ist, die die Finanz- oder Bestandsinformationen speichern (ERP = Enterprise Resource
Planning). Doch eine Vertriebsorganisation möchte seine CRM-Lösung eventuell dazu nutzen, Bestellungen in Echtzeit mit
den aktuellsten Bestandinformationen aus dem ERP-System abzugleichen. Hierfür könnte ein Web-Service eine Lösung sein,
denn damit lassen sich CRM-Anfragen für ERP-Speicher transformieren und umgekehrt, ERP-Antworten in
CRM-Bestätigungen.
•
Business-to-Business (B2B) Integration Ähnlich der EAI-Lösung könnte auch eine B2B-Lösung Nutzen aus der Fähigkeit
von Web-Services ziehen, Daten für große Bestellungen im Cache aufzubewahren. B2B-Transaktionen bestehen, anders als
Business-to-Consumer (B2C)-Transaktionen, häufig aus Transaktionen mit einem so hohen Volumen, das sich auf der Ebene
von B2C-Transaktionen verbieten würde. Ein Kunde bestellt z.B. vielleicht eine Schachtel Stifte aus einem
Online-Schreibwarenladen, aber ein Unternehmen würde pro Monat tausend Schachteln für verschiedene Lieferadressen
bestellen. Die Größenordnung und Komplexität von B2B-Transaktionen erfordert die Einbindung eines Web-Service, um die
Transaktionen schnell und verlässlich auf einfache Weise ausführen zu können.
• Business-to-Consumer (B2C) Integration B2C-Web-Services verwalten üblicherweise webbasierte Transaktionen. Ein
Web-Service zum Nachschlagen von Postleitzahlen erspart es z.B. Unternehmen, die diesen Service auf ihrer Website
anbieten möchten, dafür eine eigene Anwendung zu erstellen. Einige kommerzielle Websites verwenden beispielsweise auch
Web-Services für Währungskonvertierungen, wenn sie internationale Bestellungen ermöglichen möchten.
• Mobile Geräte (Smart Client-Anwendungen) Da es im Wesen mobiler Endgeräte liegt, Speicherplatz nur für die wichtigsten
Systemfunktionen bereitzustellen und Internetverbindungen mit drahtlosen Kommunikationsprotokollen herzustellen, können
Web-Services eine entscheidende Rolle dabei spielen, leistungsstarke Anwendungen mit den wesentlichen Informationen für
mobile Endgeräte zur Verfügung zu stellen. Durch Web-Services wird es den Benutzern mobiler Endgeräte möglich,
verschiedenste Aufgaben mit einer minimalen Dateneingabe am Gerät auszuführen und eine konzentrierte Anzeige der
Abfrageergebnisse zu erhalten. Die gesamte Verarbeitung kann dabei auf einem externen Web-Service stattfinden, wodurch
sich die Menge der Datenübertragungen zum mobilen Endgerät selbst reduzieren lässt.
• Verteilte und Peer-to-Peer-Anwendungen Web-Services können für bestimmte verteilte Anwendungen und
Peer-to-Peer-Anwendungen eine wichtige Rolle spielen. Bei einer Datenverteilung über ein unkontrolliertes Netzwerk (zum
Beispiel das Internet) und nicht über ein LAN- oder Unternehmensnetzwerk, lassen sich Web-Services einsetzen, denn diese
erfordern keine Instandhaltung und bieten daher eine größere Leistungsstärke, insbesondere wenn kein eindeutiges
Anfrage/Antwort-Verhalten erforderlich ist. Für Anwendungen, die ein strenges Anfrage/Antwort-Verhalten und hohe
106
1.7 Web-Services mit ASP.NET entwickeln
RAD Studio für .NET
Protokoll-Stack von Web-Services
Sicherheitsstandards erfordern, sollten Sie ältere, besser kontrollierte Modelle wie COM oder .NET in Betracht ziehen.
Dateien von ASP.NET-Web-Services
Wenn Sie Anwendungen mit ASP.NET-Web-Services erstellen, werden bestimmte Dateien automatisch generiert. Diese Dateien
ermöglichen es ASP.NET-Web-Services, ihre Dienste über einen Webserver zu erbringen. In der folgenden Tabelle sind diese
Dateien beschrieben.
Datei
Beschreibung
.asmx
Wenn Sie eine ASP.NET-Web-Services-Anwendung erstellen, wird automatisch eine Textdatei mit der
Erweiterung .asmx erzeugt. Die erforderliche Web-Services-Direktive wird direkt am Anfang dieser Datei
platziert, um die URL-Adresse des Web-Services und seine Implementierung miteinander in Beziehung zu
setzen. In die .asmx-Datei fügen Sie die Logik des Web-Services in die Methoden ein, die für die
Client-Anwendung sichtbar sind. Die .asmx-Datei dient als Basis-URL für jene Clients, die den
XML-Web-Service aufrufen. Diese Datei wird für das Deployment zusammen mit anderen Dateien in eine
Assemblierung compiliert.
Codebehind
Wenn Sie eine ASP.NET-Web-Service-Anwendung erstellen, wird eine Codebehind-Datei mit einer
sprachspezifischen Dateiendung erstellt. Sie fügen die Web-Services-Logik in die öffentliche Methode (public)
ein, um die Anfragen und Antworten von Web-Services zu verarbeiten.
Compilierte Die DLL-Dateien von Web-Services erbringen dynamische Dienste auf dem Webserver.
DLL-Dateien
.wsdl
Diese Datei wird generiert, sobald Sie auf die Funktion Webreferenz hinzufügen klicken, um die Web-Services
in Ihre Client-Anwendung einzubinden. Sie beschreibt das für den Client verfügbare Interface zu Web-Services.
.map
Diese Datei ermittelt Web-Services, die für einen bestimmten Server bereitgestellt wurden. Sie enthält außerdem
Links zu anderen Ressourcen, die den Web-Service beschreiben.
Siehe auch
Protokoll-Stack von Web-Services (
ASP.NET-Web-Services-Support (
see page 108)
see page 110)
ASP.NET-Web-Services-Anwendung "Hello World" erstellen (
see page 222)
Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen (
see page 218)
Microsoft Übersicht zu Web-Services
1.7.2 Protokoll-Stack von Web-Services
Um die Infrastruktur von Web-Services zu verstehen, benötigen Sie Vorkenntnisse in XML (Extensible Markup Language),
SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language) und UDDI (Universal Description,
Discovery, and Integration). Da die Infrastruktur bereits besteht, können Sie als Entwickler von XML-Web-Services die
vorhandene Technologie der Standard-Web-Protokolle wie XML und HTTP nutzen.
CodeGear bietet eine Möglichkeit zum Erstellen, Deployment und Verwenden von Web-Services, bei der die
Backend-Verarbeitung kein Problem darstellt, d.h. Sie können sich auf den Entwurf Ihrer Services konzentrieren.
In diesem Thema wird erläutert, welche Rolle Protokoll-Stacks für die Funktionalität von Web-Services spielen. Dabei wird auf
folgende Aspekte eingegangen:
• Wie Web-Services über das Web auf ihre Services zugreifen und diese bereitstellen
• Wie XML Informationen über SOAP und HTTP übermittelt
• Wie ein Client ein Web-Service-Angebot identifiziert
107
1
Protokoll-Stack von Web-Services
RAD Studio für .NET
1.7 Web-Services mit ASP.NET entwickeln
• Wie Web-Services gefunden werden, und wie auf sie zugegriffen wird
Schichten des Protokoll-Stacks von Web-Services
Web-Services bestehen aus Internet-Protokollen und -Standards, die den Datenaustausch zwischen Anwendungen regeln. Der
Protokoll-Stack von Web-Services definiert die Schichtung der Internetprotokolle (Regeln), die beim Entwickeln, Auffinden und
Implementieren von Web-Services zur Anwendung kommen.
1
Die wichtigsten Komponenten (Schichten) des Protokoll-Stacks eines Web-Service sind:
• Transportschicht: Dient zum Transport von Nachrichten zwischen Anwendungen.
• XML-Messaging-Schicht: Sorgt für die Codierung von Nachrichten in XML, die sowohl vom Client als auch vom Server
verstanden wird.
• WSDL-Schicht: Beschreibt den bereitgestellten Service.
• UDDI-Schicht: Eine Registrierung, in der die Services zentral verwaltet werden.
Transportschicht
Die Transportschicht ist die erste Komponente im Stack und für die Übertragung von XML-Nachrichten zwischen Anwendungen
verantwortlich. Das am häufigsten verwendete Transportprotokoll ist das Standardprotokoll HTTP. Andere, weit verbreitete
Web-Protokolle sind SMTP und FTP.
XML-Messaging
Die Messaging-Schicht im Protokoll-Stack basiert auf einem XML-Modell. Bei der Entwicklung von Web-Services-Anwendungen
wird meist XML verwendet, weshalb dies die Grundlage für alle Web-Services ist. XML ist nur ein möglicher Standard, der für die
Konvertierung von Web-Services zwischen verschiedenen Technologiedomänen in Frage kommt. Im Web finden Sie viele
Informationsquellen, die das XML-Messaging beschreiben. Weitere Informationen erhalten Sie auf der Website des World Wide
Web Consortium (W3C) zum Messaging, die in der untenstehenden Linkliste zu finden ist.
Die Spezifikation des XML-Messaging ist ein weit abgestecktes Feld, auf dem die verschiedenen, speziellen Protokolle definiert
sind. Zu den bekannteren Standards gehört SOAP. Es ist einer der wichtigsten Standards bei der Kommunikation zwischen
Web-Services über ein Netzwerk. Während XML die Mittel für eine Kommunikation über das Web mit einem XML-Dokument
bereitstellt, das Informationen von zwei getrennten Systemen abfragen oder beantworten kann, dient SOAP zur effektiven
Kommunikation innerhalb eines Netzwerks, indem es Absender und Empfänger von XML-Dokumenten mit einem allgemeinen
Datentransferprotokoll unterstützt. Im Web finden Sie viele Informationsquellen, die SOAP beschreiben. Weitere Informationen
erhalten Sie auf der W3C-Website zu SOAP, die in der untenstehenden Linkliste zu finden ist.
WSDL-Schicht
Diese Schicht ermöglicht es, ein öffentliches Interface für einen Web-Service festzulegen. Sie enthält Informationen zu den
verfügbaren Funktionen, Datentypinformationen für das XML-Messaging, Bindungsinformationen über das verwendete
Transportprotokoll und die Speicherposition eines bestimmten Web-Service.
Eine Client-Anwendung, die von einem Service wissen möchte, welche Daten sie empfangen wird, ob der Service Ergebnisse
liefert oder nicht, und welchen Transport der Service unterstützt, verwendet dazu ein WSDL-Dokument. Web-Services müssen
beschrieben und dem potenziellen Kunden angekündigt werden, damit dieser sie verwenden kann. WSDL sieht ein
108
1.7 Web-Services mit ASP.NET entwickeln
RAD Studio für .NET
ASP.NET-Web-Services-Support
allgemeingültiges Format für die Beschreibung und Veröffentlichung dieser Informationen zum Web-Service vor. Üblicherweise
wird WSDL zusammen mit SOAP verwendet und die WSDL-Spezifikation enthält eine SOAP-Bindung.
Mit der CodeGear-Funktion Webreferenz hinzufügen erhalten Sie das WSDL-Dokument für Ihren Web-Service. Das
WSDL-Dokument oder die Proxy-Datei wird zum Client kopiert und von diesem zum Aufruf des Servers verwendet. Die
Proxy-Datei trägt den Namen References.* und hat eine Erweiterung, die der jeweiligen Programmiersprache entspricht.
Weitere Informationen erhalten Sie auf der W3C-Website zu WSDL, die in der untenstehenden Linkliste zu finden ist.
UDDI-Schicht
Diese Schicht ermöglicht es, Web-Services im Web zu veröffentlichen und zu finden. Sie können sich diese Schicht wie die
weißen und gelben Seiten eines Telefonbuchs vorstellen. Die weißen Seiten der Web-Services enthalten allgemeine
Informationen zu bestimmten Unternehmen, zum Beispiel Firmenname, Adresse, Telefonnummer usw. Die gelben Seiten
enthalten eine Klassifizierung und beschreiben die angebotenen Dienste genauer, hier werden beispielsweise Industriebranchen
und Produkte aufgeführt.
Das Protokoll, das Sie zur Veröffentlichung Ihrer Web-Services verwenden, hat den Namen UDDI. Die
UDDI-Business-Registrierung bietet jedem die Möglichkeit, in den vorhandenen UDDI-Daten zu recherchieren und ermöglicht es
Firmen, sich selbst und ihre Dienste dort zu registrieren. Mit RAD Studio werden Ihre Informationen automatisch in der
Registrierung oder in einem verteilten Verzeichnis für Business- und Web-Services veröffentlicht.
Siehe auch
Überblick zu den ASP.NET-Web-Services (
ASP.NET-Web-Services-Support (
see page 106)
see page 110)
ASP.NET-Web-Services-Anwendung "Hello World" erstellen (
see page 222)
Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen (
see page 218)
SOAP
XML-Messaging
WSDL
1.7.3 ASP.NET-Web-Services-Support
ASP.NET-Web-Services unterstützen VCL.NET-Formulare, .NET Windows Forms und ASP.NET Web Forms. Mit Hilfe dieser
Formulare lassen sich Client-Anwendungen erstellen, die auf Web-Services-Anwendungen zugreifen. Mit der Funktion
Webreferenz hinzufügen können Sie diesen Client-Anwendungen dann die erforderliche ASP.NET-Web-Services-Anwendung
hinzufügen. Mit dem UDDI-Browser lassen sich Web-Services-Anwendungen lokalisieren.
RAD Studio stellt einige einfache Tools zur Entwicklung und für das Deployment von ASP.NET-Web-Services bereit. Ferner
unterstützt RAD Studio den Import von WSDL-Dokumenten, die eine bestimmte Web-Services-Anwendung beschreiben und ihre
Funktionalität der Client-Anwendung mitteilen. Sie können die Beispiel-WebMethod von RAD Studio dazu verwenden, eine
ASP.NET-Web-Services-Anwendung zu erstellen und darauf zuzugreifen.
In diesem Thema wird Folgendes behandelt:
• ASP.NET-Web-Services-Client-Support
• ASP.NET-Web-Services-Server-Support
• ASP.NET-Web-Services-Namespaces
109
1
ASP.NET-Web-Services-Support
RAD Studio für .NET
1.7 Web-Services mit ASP.NET entwickeln
ASP.NET-Web-Services-Client-Support
Sie können eine Web-Services-Anwendung erstellen, die im Wesentlichen nichts anderes als ein Provider oder eine
Serveranwendung ist. Diese Anwendung befindet sich auf einem Webserver, und jeder Client, der die Architektur dieser
Anwendung versteht, kann darauf zugreifen. Wenn Sie selbst eine Web-Services-Anwendung nutzen möchten, müssen Sie eine
Client-Anwendung erstellen. In RAD Studio stehen verschiedene Tools zum Erstellen von Client-Anwendungen zur Auswahl:
• Windows Forms
• Web Forms
• Webreferenzen
1
Windows Forms contra ASP.NET Web Forms
Um festzustellen, welcher Form-Typ (Windows Form oder ASP.NET Web Form) sich am besten für Ihre Client-Anwendung
eignet, sollten Sie bedenken, auf welche Art von Service Sie zugreifen möchten. In den meisten Fällen diktiert der gewählte
Service bereits den Anwendungstyp, den Sie dafür erstellen sollten.
Wenn Sie eine reichhaltige Anwendung benötigen, die komplexe Inhalte auf einer Client-Workstation verarbeiten kann oder die
eine Web-Services-Anwendung als Unterstützung für eine reichhaltige Client-Anwendung über ein sicheres Netzwerk nutzt,
sollten Sie eine Windows Forms-Anwendung in Betracht ziehen. Wenn Sie eine schlanke Client-Anwendung benötigen, die
einfache Datenbearbeitung leistet oder die Anforderungen eines einzigen Zwecks erfüllen soll, sollten Sie eine ASP.NET Web
Forms-Anwendung in Betracht ziehen. Web Forms sind plattformunabhängige Interfaces, die in einem Web-Browser angezeigt
werden können und Web-Services-Anwendungen über ein einfaches Protokoll wie HTTP aufrufen.
Sie können eine ASP.NET-Web-Services-Anwendung auch als Konsolenanwendung erstellen, auf die über ein Konsolenfenster
oder eine andere Web-Services-Anwendung (mit oder ohne Client) zugegriffen werden kann.
Webreferenz hinzufügen
Sie können in Ihre Client-Anwendung eine Webreferenz für den Zugriff auf Web-Services einfügen. Eine Webreferenz bezieht
sich entweder auf ein WSDL-Dokument oder ein XML-Schema, das in die Client-Anwendung importiert wird. Das
WSDL-Dokument oder das XML-Schema beschreibt einen Web-Service. Wenn eines dieser Dokumente importiert ist, generiert
RAD Studio alle Interfaces und Klassendefinitionen, die für den Aufruf des Web-Service erforderlich sind. Klicken Sie in der
Projektverwaltung mit der rechten Maustaste auf den Knoten WebService, und wählen Sie im Kontextmenü Webreferenz
hinzufügen. Ein UDDI-Browser wird angezeigt. Um den Web-Service in Ihre Client-Anwendung einzufügen, müssen Sie das
WSDL-Dokument des Web-Service mit dem Browser ansteuern.
ASP.NET-Web-Services-Server-Support
Die ASP.NET-Web-Services-Anwendung, die Sie in RAD Studio erstellen, ermöglicht den programmseitigen Zugriff auf die
Anwendungslogik eines oder mehrerer Web-Services. Sie bestimmen, welche Services bereitgestellt werden und wie sie zu
verwenden sind, und definieren die Infrastruktur, die die Anfragen und Antworten übermittelt und verarbeitet.
Bei der Erstellung einer ASP-NET-Web-Services-Anwendung legen Sie im Dialogfeld Neue ASP.NET-Anwendung den Namen
und den Speicherort für die Anwendung fest. Die für das Deployment benötigten Dateien werden automatisch erstellt. Wenn Sie
die Anwendungseinstellungen definieren, erzeugt RAD Studio eine .asmx-Datei, die als Basis-URL für diejenigen Clients dient,
die die ASP.NET-Web-Services-Anwendung aufrufen.
ASP.NET-Web-Services-Namespaces
Weitere Informationen zum Namespace System.Web.Services finden Sie im Microsoft .NET Framework SDK.
Siehe auch
Überblick zu den ASP.NET-Web-Services (
Protokoll-Stack von Web-Services (
110
see page 106)
see page 108)
1.7 Web-Services mit ASP.NET entwickeln
RAD Studio für .NET
ASP.NET-Web-Services-Anwendung "Hello World" erstellen (
ASP.NET-Web-Services-Support
see page 222)
Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen (
see page 218)
1
111
2
RAD Studio für .NET
2 Anleitungen
Dieser Abschnitt enthält Anleitungen zu verschiedenen Bereichen der Entwicklung mit RAD Studio.
Themen
Name
Datenbankanleitungen (
Beschreibung
see page 114)
Interoperative Anwendungen – Anleitungen (
Anleitungen für die Modellierung (
VCL für .NET – Anleitungen (
ASP.NET – Anleitungen (
Web-Services-Anleitungen (
Dieser Abschnitt enthält Anleitungen zur Entwicklung von
Datenbankanwendungen.
see page 150)
see page 152)
see page 157)
see page 182)
see page 218)
Dieser Abschnitt enthält Anleitungen zur Erstellung von interoperativen
Anwendungen.
Dieser Abschnitt enthält Anleitungen zum Modellieren von Anwendungen.
Dieser Abschnitt enthält Anleitungen zur Entwicklung von
VCL.NET-Anwendungen.
Dieser Abschnitt enthält Anleitungen zur Entwicklung von ASP.NET Web
Forms-Anwendungen.
Dieser Abschnitt enthält Anleitungen zur Entwicklung und Verwendung von
Web-Services.
2
113
RAD Studio für .NET
2.1 Datenbankanleitungen
2.1 Datenbankanleitungen
Dieser Abschnitt enthält Anleitungen zur Entwicklung von Datenbankanwendungen.
Themen
Name
Beschreibung
Neue Verbindung in Daten-Explorer einfügen (
see page 116)
In den Daten-Explorer lassen sich neue Verbindungen einfügen, die so lange
erhalten bleiben, bis das Verbindungsobjekt entfernt wird.
Anleitung zum Hinzufügen eines Dialogfelds zur Fehlerbehebung zu einer
BDP-Anwendung. ( see page 116)
Sie können Ihre BDP-Anwendungen so modifizieren, dass bei Auftreten eines
Aktualisierungskonflikts ein Dialogfeld zur Behebung von BDP-Fehlern geöffnet
wird. Solche Konflikte können vorkommen, wenn mehrere Personen zum selben
Zeitpunkt versuchen, dieselbe Zeile einer Datenbanktabelle zu aktualisieren.
Datenbank im Daten-Explorer durchsuchen (
Wenn eine Live-Verbindung besteht, können Sie mit dem Daten-Explorer
Objekte in einer Datenbank zu suchen.
Verbinden mit AdoDbx Client (
see page 118)
see page 119)
Es gibt verschiedene Möglichkeiten, um eine Datenbankverbindung mit AdoDbx
Client herzustellen.
Datenbank-Projekte mit dem Daten-Explorer erstellen (
Tabellenzuordnungen erstellen (
see page 120)
see page 120)
SQL im Daten-Explorer ausführen (
see page 122)
Fehler in Tabellenzuordnungen behandeln (
Daten zwischen Datenbanken migrieren (
see page 123)
see page 124)
2
Verbindungen im Daten-Explorer bearbeiten (
Datenbankverbindungen bearbeiten (
114
see page 125)
see page 126)
Sie können Daten aus dem Daten-Explorer per Drag&Drop in jedes beliebige
Formular ziehen (beispielsweise in Windows Forms oder Web Forms bzw. in
Global.asax-Dateien), um Datenmengen zu füllen und ein Datenbankprojekt
schnell zu erstellen. Mit dieser Methode können Sie Datenbankkomponenten
automatisch in ein Projekt einbinden und müssen keine Verbindungsstrings
bereitstellen, was bei der manuellen Eingabe von Strings zu Fehlern führen kann.
Mit Hilfe der Eigenschaft TableMappings können Sie die Spalten einer
Datenquelle den Spalten einer Datenmengenkomponente im Arbeitsspeicher
zuordnen. Auf diese Weise können Sie den Spalten der Datenmenge andere,
aussagekräftigere Namen zuweisen. Es ist zudem möglich, eine Spalte einer
Datenbanktabelle in der Datenmenge einer anderen Spalte zuzuordnen, als der,
die standardmäßig ausgewählt wird. Die Eigenschaft TableMappings ermöglicht
es Ihnen auch, eine Datenmenge zu erzeugen, die weniger oder mehr Spalten
enthält, als aus dem Datenbankschema abgerufen werden.
Sie können SQL in einem eigenen SQL-Fenster eingeben, bearbeiten und
ausführen. Das SQL-Fenster steht im Daten-Explorer zur Verfügung.
Jede Art von Vergleich zwischen einer Datenquelle und einer
Arbeitsspeicherrepräsentation von Daten ist fehleranfällig. Fehler können
auftreten, wenn die Datenquelle und die zugehörige Datenmenge nicht über die
gleiche Anzahl von Spalten verfügen oder wenn die Spaltentypen der
Datenquelle nicht mit den Spaltentypen der Datenmenge übereinstimmen.
Zudem können andere interne Fehler auftreten, die sich zur Entwurfszeit nicht
unterbinden lassen. Sie können mit den Eigenschaften MissingMappingAction
und MissingSchemaAction auf Fehler in Tabellenzuordnungsoperationen
reagieren. Mit Hilfe der Eigenschaft MissingMappingAction können Sie festlegen,
wie der Datenadapter reagieren soll, wenn eine Zuordnung fehlt. Verwenden Sie
die Eigenschaft MissingSchemaAction, um zu bestimmen, wie der Adapter
reagieren... more ( see page 123)
Mit dem Daten-Explorer lassen sich Daten zwischen Datenbanken (und sogar
Providern) schnell und einfach migrieren. Sie können mit dem Daten-Explorer
eine Tabelle in einer Datenbank kopieren und diese dann in eine andere
Datenbank einfügen. Dabei werden sowohl die Struktur als auch die Daten der
Tabelle(n) migriert.
Die Datenmigration wird von der Klasse BdpCopyTable unterstützt, die zur
Entwurfszeit als Komponente in der Tool-Palette zur Verfügung steht. Mit dieser
Komponente können Sie Daten programmgesteuert migrieren.
Anmerkung: Die Klasse BdpCopyTable kopiert keine fremden Schlüssel oder
abhängigen Objekte.
Sie können Verbindungen im Daten-Explorer in vielerlei Hinsicht ändern.
Die grundlegenden Elemente eines Verbindungsstrings sind meist für alle
Datenbanktypen gleich. Allerdings gilt für jeden Datenbanktyp eine leicht
veränderte Syntax des Verbindungsstrings. In diesem Abschnitt werden diese
Unterschiede beschrieben.
2.1 Datenbankanleitungen
RAD Studio für .NET
Eine Datenbankanwendung für die Auflösung in mehrere Tabellen erstellen (
see page 132)
RAD Studio unterstützt die Auflösung in mehrere Tabellen mit BDP.NET. Zur
Bereitstellung und Auflösung einer .NET-Datenmenge aus mehreren
heterogenen Datenquellen dienen speziell die beiden Komponenten DataSync
und DataHub. Zusätzlich unterstützen diese Komponenten die Anzeige von
Live-Daten zur Entwurfszeit und stellen Haupt-/Detaildaten bereit und lösen sie
auf, indem optimales SQL für die Auflösung in BDP-Datenquellen generiert wird.
Die DataHub-Komponente dient als Bindeglied zwischen einer DataSet- und
einer DataSync-Komponente. Der DataPort-Eigenschaft einer
DataHub-Komponente kann eine beliebige Implementierung von IDataProvider
zugewiesen werden. DataSync implementiert eine IDataProvider-Komponente
und verfügt über eine Providers-Sammlung mit .NET-Daten-Providern, die
IDbDataAdapter implementieren. Die Methode GetData für DataSync iteriert
durch... more ( see page 132)
Parameterübergabe in einer Datenbankanwendung (
Die folgende Anleitung beschreibt eine einfache Anwendung, die es Ihnen
ermöglicht, zur Laufzeit einen Parameterwert an eine Datenmenge zu
übergeben. Parameter ermöglichen die Erstellung von Anwendungen, bei denen
zur Entwurfszeit nicht bekannt ist, welche Daten der Benutzer zur Laufzeit im
Einzelnen eingeben wird. Im folgenden Beispiel wird unterstellt, dass Sie bereits
die Interbase-Beispieldatenbank EMPLOYEE.GDB eingerichtet und eine
entsprechende Verbindung definiert haben. In diesem Beispiel wird zur
Veranschaulichung die Standardverbindungskomponente IBConn1 mit dem
Standardspeicherort verwendet. Ihre Datenbank befindet sich möglicherweise in
einem anderen Verzeichnis.
Datenadapter-Vorschau verwenden (
Anweisungstext-Editor verwenden (
see page 136)
see page 137)
Designer für Datenadapter verwenden (
Verbindungseditor verwenden (
see page 138)
see page 139)
Standarddatenmengen verwenden (
Typisierte Datenmengen verwenden (
see page 134)
see page 140)
see page 143)
CodeGear RAD Studio enthält ein Tool, das die Kommunikation zwischen
Datenquelle und Datenmenge ermöglicht. Sie können in der
Datenadapter-Vorschau angeben, welche Daten aus der Datenmenge
übertragen werden sollen - entweder in Form von SQL-Anweisungen oder Stored
Procedures, die zur Eingabe in die Datenbank oder zum Lesen aus der
Datenbank aufgerufen werden.
Um ein DataSet-Objekt zu erstellen, muss im BdpDataAdapter-Objekt
mindestens SQL-Select-Anweisung für die Eigenschaft CommandText definiert
sein. Sobald diese Anweisung eingegeben wurde, wird sie als Wert der
Eigenschaft CommandText des BdpCommand-Objekts für die
BdpDataAdapter-Komponente verwendet. Sie können diese Select-Anweisung
eintippen oder den Anweisungstext-Editor zum Erstellen dieser Anweisung
(sowie von Update-, Insert- und Delete-Anweisungen) mit Hilfe einfacher Zeigenund Klicken-Operationen benutzen. Wenn Sie den Anweisungstext-Editor
verwenden und eine Verbindung zu einer aktiven Datenquelle besteht, dann
werden die Namen der Tabellen und Spalten in diesem Editor angezeigt. Sie
können Einträge aus Listenfeldern auswählen, um die Anweisung aufzubauen.
Wenn Sie die BdpDataAdapter-Komponente mit dem... more ( see page 137)
Der Datenadapter muss mindestens eine SQL-Select-Anweisung mit der
Anweisungseigenschaft SELECT enthalten. Sie können diese Anweisung
entweder selbst eingeben oder den Designer Datenadapter dazu verwenden,
die Select-Anweisung zusammen mit den Update-, Insert- und
Delete-Anweisungen zu erstellen. Der BdpCommandBuilder erstellt die Update-,
Insert- und Delete-Anweisungen auf der Basis der von Ihnen ausgewählten
Tabellen und Spalten. Der Designer Datenadapter verwendet eine
Live-Verbindung, um die Metadaten abzurufen, auf deren Basis sich die
geeigneten SQL-Anweisungen erstellen lassen. Mit den SQL-Anweisungen
werden diejenigen Daten bearbeitet, die Sie aus der Datenmenge zurück in die
Datenbank übertragen möchten.
Jedes Verbindungsobjekt kann mehrere benannte Verbindungen unterstützen.
Dabei kann es sich um Verbindungen zu mehreren Datenbanken oder
Datenbanktypen handeln.
Das Standardobjekt DataSet ist eine Arbeitsspeicher-Repräsentation von
Tabellen oder Ansichten, die von einer verbundenen Datenquelle abgerufen
werden. Wegen der Art und Weise, in der die zugrunde liegende Datenstruktur
programmiert ist, werden zur Laufzeit nur die Spaltennamen der Datenquelle
angezeigt. Wenn Sie eine Datenmenge generieren, werden die Daten aus allen
Spalten abgerufen, die Sie in der Select-Anweisung im Dialogfeld
Daten-Adapter-Konfiguration angegeben haben. Sie können die Spalten
beschränken, indem Sie die Select-Anweisung ändern und eine neue
Datenmenge erzeugen.
Typisierte Datenmengen weisen bestimmte Vorteile gegenüber
Standarddatenmengen auf. Erstens werden sie von einer XML-Hierarchie der
Zieldatenbanktabelle abgeleitet. Die XML-Datei, die die Beschreibung der
Datenmenge enthält, ermöglicht die Bereitstellung von Funktionen zur
Code-Vervollständigung, die beim Einsatz von Standarddatenmengen nicht
verfügbar sind. Die strenge Typisierung der Methoden, Eigenschaften und
Ereignissen der Datenmenge lässt eine Typüberprüfung während der
Compilierung zu und führt in manchen Anwendungen zu einem besseren
Leistungsverhalten.
115
2
Anleitung zum Hinzufügen eines
RAD Studio für .NET
2.1 Datenbankanleitungen
Herstellen einer Verbindung zu einer Datenbank mit dem dbExpress
Treiber-Framework ( see page 145)
Diese Anleitung zeigt Ihnen, wie Sie mit dem dbExpress-Treiber-Framework eine
Verbindung zu einer Datenbank herstellen und deren Datensätze lesen können.
In dem Beispielcode enthalten die .ini-Dateien von dbExpress alle Informationen
über die spezielle Datenbankverbindung, wie z.B. den Treiber, den
Benutzernamen, das Passwort usw.
Eine verteilte Datenbankanwendung erstellen (
Daten-Remoting bildet eine wichtige Grundlage für die Entwicklung verteilter
Datenbankanwendungen. Die .NET-Remoting-Technologie ist ein flexibles und
erweiterbares Framework für die Kommunikation zwischen einzelnen Prozessen.
Das .NET-Remoting ermöglicht eine Interaktion mit Objekten, die sich in
unterschiedlichen Anwendungsdomänen befinden oder die zu verschiedenen
Prozessen auf einem Computer oder auf mehreren Computern in einem
Netzwerk gehören.
Mit Hilfe der Komponenten RemoteServer und RemoteConnection kann eine
Client-/Server-Anwendung, in der DataHub- und DataSync-Komponenten
verwendet werden, problemlos in eine mehrschichtige
Datenmengen-Remoting-Anwendung migriert werden. RemoteServer
implementiert das Interface IDataService und stellt sich selbst als SAO (Singleton
Server Activated Object) zur Verfügung. Auf der Client-Seite wird über die... more
( see page 147)
see page 147)
2.1.1 Neue Verbindung in Daten-Explorer einfügen
In den Daten-Explorer lassen sich neue Verbindungen einfügen, die so lange erhalten bleiben, bis das Verbindungsobjekt
entfernt wird.
So fügen Sie eine neue Verbindung hinzu:
1. Wählen Sie Ansicht Daten-Explorer. Das Dialogfeld Daten-Explorer wird angezeigt.
2. Wählen Sie in der hierarchischen Liste einen Provider aus.
3. Klicken Sie mit der rechten Maustaste, um ein Kontextmenü einzublenden.
4. Wählen Sie Neue Verbindung hinzufügen. Daraufhin wird das Dialogfeld Neue Verbindung hinzufügen angezeigt.
5. Geben Sie den Namen der neuen Verbindung ein.
6. Klicken Sie auf OK.
Tip: Wenn Sie die Einstellungen für die neue Verbindung ändern möchten, klicken Sie mit der rechten Maustaste auf die
neue Verbindung und wechseln zu Verbindung bearbeiten
. Das Dialogfeld Verbindungseditor wird geöffnet. Legen Sie hier die Einstellungen für die Verbindung fest, und klicken Sie
auf OK.
Siehe auch
BDP.NET-Komponentendesigner (
2
see page 23)
Datenbank im Daten-Explorer durchsuchen (
SQL im Daten-Explorer ausführen (
see page 118)
see page 122)
Verbindungen im Daten-Explorer bearbeiten (
see page 125)
2.1.2 Anleitung zum Hinzufügen eines Dialogfelds zur
Fehlerbehebung zu einer BDP-Anwendung.
Sie können Ihre BDP-Anwendungen so modifizieren, dass bei Auftreten eines Aktualisierungskonflikts ein Dialogfeld zur
Behebung von BDP-Fehlern geöffnet wird. Solche Konflikte können vorkommen, wenn mehrere Personen zum selben Zeitpunkt
116
2.1 Datenbankanleitungen
RAD Studio für .NET
Anleitung zum Hinzufügen eines
versuchen, dieselbe Zeile einer Datenbanktabelle zu aktualisieren.
So fügen Sie ein Dialogfeld zur Behebung von BDP-Fehlern hinzu:
1. Fügen Sie dem vorhandenen WinForm eine BDPDataAdapter-Komponente hinzu.
2. Aktivieren Sie im Fenster des Objektinspektors die Registerkarte Ereignisse.
3. Doppelklicken Sie in den Inhaltsbereich der leeren Pulldown-Liste neben dem Ereignis OnUpdateError. Die erste Ebene der
Pulldown-Liste wird daraufhin gefüllt. Außerdem wird der Quelltext für die Methodendefinition und -implementierung für
BdpDataAdapter erzeugt.
4. Fügen Sie die unten in Fettschrift gekennzeichneten Zeilen zur Ereignisbehandlung in die Methodenimplementierung ein (im
folgenden Beispiel wird die Programmiersprache C# verwendet).
private void bdpDataAdapter1_OnUpdateError(object sender,
Borland.Data.Common.BdpUpdateErrorEventArgs e)
{
Borland.Data.Common.ReconcileErrorForm f = new
Borland.Data.Provider.ReconcileErrorForm( e );
f.ShowDialog();
}
5. Speichern Sie die Änderungen im WinForm.
Nun wird das Dialogfeld zur Behebung von BDP-Fehlern geöffnet, wenn ein Benutzer Daten in einer Datenbankzeile ändert, die
zur selben Zeit von einem anderen Benutzer bearbeitet wird. Die Funktionsweise des Dialogfelds wird im Folgenden
beschrieben.
Im oberen Bereich des neuen Dialogfelds zur Fehlerbehebung werden vier Spalten angezeigt, im unteren Bereich stehen sechs
Optionsfelder zu Wahl. Die folgende Tabelle enthält eine Beschreibung der Spalten.
Spalte
Beschreibung
Spaltenname
Die Namen der Tabellenspalten, in denen ein Fehler aufgetreten ist.
Aktuelle Zeile
Der Inhalt der Zeile, die das Problem verursacht.
Originalzeile
Der Inhalt der Zeile, bevor die konfliktverursachenden Daten eingegeben wurden.
Server-Zeile
Die letzte auf dem Server gespeicherte Aktualisierung. (Entspricht dem Inhalt der Zeile auf dem Server.)
Mit Hilfe der drei Optionsfelder im linken unteren Bereich des Fensters können Sie angeben, wie die Verarbeitung nach der
Fehlerbehebung fortgesetzt werden soll. Sie können nur eine dieser Optionen auswählen:
Optionsfeld
Aktualisierung
Primärschlüssel
versuchen
Aktuelle
überspringen
fortsetzen
Aktualisierungen
abbrechen
Beschreibung
mit Der Fehler wird behoben, und die Aktualisierung wird mit Hilfe des Primärschlüssels erneut
erneut versucht. Wenn die Datenzeile des Servers nicht gefunden wird, ist diese Option deaktiviert.
Zeile Die Änderungen in der aktuellen Zeile werden nicht übernommen, aber für die übrigen Zeilen wird
und eine Aktualisierung durchgeführt.
Die letzten Änderungen werden nicht übernommen. Der Fehler wird behoben, aber es werden
keine weiteren Aktualisierungsversuche durchgeführt.
Mit Hilfe der drei Optionsfelder unten rechts im Fenster können Sie angeben, welche Daten in die Datenbank geschrieben
werden sollen. Sie können nur eine dieser Optionen auswählen:
Optionsfeld
Beschreibung
Originalwerte
verwenden
Die Daten aus der Spalte Originalzeile (siehe oben) werden in die Zeile eingefügt, die den Konflikt
verursacht hat.
117
2
Datenbank im Daten-Explorer durchsuchen
Server-Werte
verwenden
Aktuelle
verwenden
RAD Studio für .NET
2.1 Datenbankanleitungen
Die Daten aus der Spalte Server-Zeile (siehe oben) werden in die Zeile eingefügt, die den Konflikt
verursacht hat.
Werte Die Daten aus der Spalte Aktuelle Zeile (siehe oben) werden in die Zeile eingefügt, die den Konflikt
verursacht hat.
Siehe auch
ADO.NET-Komponentendesigner (
see page 23)
Datenbank im Daten-Explorer durchsuchen (
SQL im Daten-Explorer ausführen (
see page 118)
see page 122)
Verbindungen im Daten-Explorer bearbeiten (
see page 125)
2.1.3 Datenbank im Daten-Explorer durchsuchen
Wenn eine Live-Verbindung besteht, können Sie mit dem Daten-Explorer Objekte in einer Datenbank zu suchen.
So suchen Sie Objekte in einer Datenbank:
1. Wählen Sie Ansicht Daten-Explorer.
2. Erweitern Sie einen Provider-Knoten, um die Liste der verfügbaren Verbindungen anzuzeigen.
3. Erweitern Sie einen Verbindungsknoten, um die Liste der Datenbankobjekte (Tabellen, Ansichten und Prozeduren)
anzuzeigen.
Anmerkung: Wenn Sie aufgrund einer fehlenden Live-Verbindung eine Fehlermeldung erhalten, sollten Sie Ihren Provider
aktualisieren und/oder die Verbindung ändern.
So rufen Sie Daten aus der Datenbank ab:
1. Erweitern Sie die Verbindung im Daten-Explorer.
2. Doppelklicken Sie auf einen Tabellen- oder Ansichtsnamen, um Daten abzurufen. Diese Operation gibt im Quelltext-Editor
eine Ergebnismenge auf einer Registerseite des Daten-Explorers zurück.
Tip: Sie können auch im Daten-Explorer
eine Tabelle auswählen und mit der rechten Maustaste darauf klicken, um ein Popup-Menü mit dem Befehl Daten aus
Tabelle abrufen einzublenden.
So führen Sie eine Stored Procedure aus:
2
1. Wählen Sie Ansicht Daten-Explorer.
2. Erweitern Sie die Verbindung im Daten-Explorer, und suchen Sie die Stored Procedure.
3. Doppelklicken Sie auf die Stored Procedure, um deren Parameter anzuzeigen. Die Parameter werden in einer separaten
Seite der Designoberfläche angezeigt.
4. Bearbeiten Sie die Eingabeparameter nach Bedarf.
5. Klicken Sie in der oberen linken Ecke der Seite auf die Schaltfläche Ausführen, um die Prozedur auszuführen. Das Ergebnis
wird in einem Datengitter angezeigt.
Tip: Alternativ können Sie im Daten-Explorer
mit der rechten Maustaste auf eine Prozedur klicken und im Kontextmenü den Befehl Ausführen wählen.
118
2.1 Datenbankanleitungen
RAD Studio für .NET
Datenbank-Projekte mit dem
Siehe auch
ADO.NET-Komponentendesigner (
see page 23)
Neue Verbindung in den Daten-Explorer einfügen (
SQL im Daten-Explorer ausführen (
see page 116)
see page 122)
Verbindungen im Daten-Explorer bearbeiten (
see page 125)
2.1.4 Verbinden mit AdoDbx Client
Es gibt verschiedene Möglichkeiten, um eine Datenbankverbindung mit AdoDbx Client herzustellen.
So stellen Sie eine Verbindung über die Datei dbxconnections.ini her:
1. Die im Beispielcode angeführte Eigenschaft ConnectionName ist der Name einer Verbindung in der Datei
dbxconnections.ini.
2. Verwenden Sie für die Verbindung den folgenden Delphi-Code:
uses System.Data.Common
...
var
Factory: System.Data.Common.DbProviderFactory;
Connection: System.Data.Common.DbConnection;
begin
Factory := System.Data.Common.DbProviderFactories.GetFactory('Borland.Data.AdoDbxClient');
Connection := Factory.CreateConnection();
Connection.ConnectionString := 'ConnectionName=IBConnection';
Connection.Open;
end
So stellen Sie eine Verbindung über die Datei System.Configuration her:
1. Dazu müssen allerdings die Eigenschaftseinstellungen in den Dateien dbxconnections.ini und dbxdriver.ini für die Datenbank,
zu der Sie eine Verbindung herstellen wollen, in die Datei machine.config migriert werden. Hier ein Beispiel für den
Verbindungsstring, der in den Abschnitt <connectionStrings> der Datei machine.config einzufügen ist:
2. Verwenden Sie für die Verbindung den folgenden Delphi-Code:
var
Factory: System.Data.Common.DbProviderFactory;
Connection: System.Data.Common.DbConnection;
Config: System.Configuration.Configuration;
ConnectSection: System.Configuration.ConnectionStringsSection;
CurrentSettings: System.Configuration.ConnectionStringSettings;
begin
Factory := System.Data.Common.DbProviderFactories.GetFactory('Borland.Data.AdoDbxClient');
Connection := Factory.CreateConnection();
Config:=
System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConnectSection:= Config.ConnectionStrings;
CurrentSettings:= ConnectSection.ConnectionStrings['IBConnection'];
Connection.ConnectionString:= CurrentSettings.ConnectionString;
Connection.Open;
end;
2
Siehe auch
AdoDbx-Client - Übersicht (
see page 6)
Deployment des AdoDbx-Clients
119
Tabellenzuordnungen erstellen
RAD Studio für .NET
2.1 Datenbankanleitungen
2.1.5 Datenbank-Projekte mit dem Daten-Explorer erstellen
Sie können Daten aus dem Daten-Explorer per Drag&Drop in jedes beliebige Formular ziehen (beispielsweise in Windows
Forms oder Web Forms bzw. in Global.asax-Dateien), um Datenmengen zu füllen und ein Datenbankprojekt schnell zu erstellen.
Mit dieser Methode können Sie Datenbankkomponenten automatisch in ein Projekt einbinden und müssen keine
Verbindungsstrings bereitstellen, was bei der manuellen Eingabe von Strings zu Fehlern führen kann.
So erstellen Sie ein Datenbankprojekt mit dem Daten-Explorer:
1. Stellen Sie sicher, dass eine Live-Verbindung zu einer Datenbank besteht.
2. Wählen Sie im Menü Ansicht die Option Daten-Explorer.
3. Wählen Sie Datei Neu Weitere, und markieren Sie ein Delphi für .NET-Projekt. Normalerweise handelt es sich dabei um
ein Windows Form, ein VCL-Formular oder eine ASP.NET-Anwendung.
4. Erweitern Sie die Daten-Explorerstruktur, und wechseln Sie zur Ebene Tabelle oder Ansicht. Wenn die Verbindung zur
Datenbank aktiv ist, verschwindet das kleine rote x, sobald der Verbindungsknoten für die Datenbank erweitert wird. Wenn die
Verbindung nicht aktiv ist, muss der Verbindungsstring eventuell geändert werden.
5. Markieren Sie mit dem Cursor eine der in der Liste aufgeführten Tabellen.
6. Ziehen Sie das Tabellenobjekt in das Formular. In der Komponentenablage werden ein AdoDbxConnection- und ein
AdoDbxDataAdapter-Objekt angezeigt.
7. Legen Sie für jede Datenbankkomponente die geeigneten Datenbankeigenschaften fest. Setzen Sie beispielsweise die
Eigenschaft Active auf True, wenn während des Entwurfs Daten in der Komponente sichtbar sein sollen.
Anmerkung: Die DataGrid-Komponente wird nicht automatisch angezeigt. Stellen Sie deshalb bei Bedarf sicher, dass eine
DataGrid-Komponente im Formular vorhanden ist, damit die Daten korrekt angezeigt werden.
Siehe auch
ADO.NET-Komponentendesigner (
see page 23)
Datenbank im Daten-Explorer durchsuchen (
SQL im Daten-Explorer ausführen (
see page 118)
see page 122)
Verbindungen im Daten-Explorer bearbeiten (
see page 125)
2.1.6 Tabellenzuordnungen erstellen
2
Mit Hilfe der Eigenschaft TableMappings können Sie die Spalten einer Datenquelle den Spalten einer Datenmengenkomponente
im Arbeitsspeicher zuordnen. Auf diese Weise können Sie den Spalten der Datenmenge andere, aussagekräftigere Namen
zuweisen. Es ist zudem möglich, eine Spalte einer Datenbanktabelle in der Datenmenge einer anderen Spalte zuzuordnen, als
der, die standardmäßig ausgewählt wird. Die Eigenschaft TableMappings ermöglicht es Ihnen auch, eine Datenmenge zu
erzeugen, die weniger oder mehr Spalten enthält, als aus dem Datenbankschema abgerufen werden.
So erstellen Sie eine Tabellenzuordnung:
1. Erstellen Sie eine Anwendung.
2. Fügen Sie Datenbankkomponenten hinzu, und konfigurieren Sie diese.
3. Legen Sie die Tabellenzuordnungen im Dialogfeld Tabellenzuordnungen fest.
Anmerkung: In der folgenden Anleitung wird davon ausgegangen, dass Sie BDP.NET-Datenbankkomponenten benutzen.
120
2.1 Datenbankanleitungen
RAD Studio für .NET
Tabellenzuordnungen erstellen
So erstellen Sie eine Anwendung:
1. Wählen Sie Datei Neu Windows Forms-Anwendung (für Delphi für .NET oder C#).
2. Klicken Sie auf die Registerkarte Daten-Explorer, um die Datenquellen anzuzeigen.
3. Erweitern Sie die Liste, und suchen Sie eine aktive Datenquelle.
4. Ziehen Sie einen Tabellennamen in das Windows Form, um der Anwendung eine Datenquelle hinzuzufügen. Die
Komponentenablage sollte jetzt zwei Objekte enthalten: ein BdpDataAdapter-Objekt und ein BdpConnection-Objekt.
Weitere Informationen zum Erstellen von Datenbankanwendungen finden Sie in den zusätzlichen Themen zu ADO.NET und
Datenbanken in diesem Hilfesystem.
So konfigurieren Sie die Datenbankkomponenten:
1. Markieren Sie das BdpDataAdapter-Symbol in der Komponentenablage.
2. Klicken Sie auf das Designer Verb Daten-Adapter konfigurieren, um das Dialogfeld Datenadapter-Konfiguration zu
öffnen.
3. Aktivieren Sie die Registerkarte DataSet.
4. Klicken Sie auf das Optionsfeld Neues DataSet.
5. Klicken Sie auf OK. Daraufhin wird eine neue DataSet-Komponente erzeugt, die durch ein entsprechendes Symbol in der
Komponentenablage repräsentiert wird.
So legen Sie Tabellenzuordnungen fest:
1. Markieren Sie das BdpDataAdapter-Symbol in der Komponentenablage.
2. Doppelklicken Sie im Objektinspektor auf das Feld Auflistung neben der Eigenschaft TableMappings. Daraufhin wird das
Dialogfeld Tabellenzuordnungen angezeigt.
3. Wenn Sie eine vorhandene Datenmenge als Vorlage für die Spaltenzuordnung verwenden möchten, aktivieren Sie das
Kontrollkästchen Anhand der Datenmenge Tabellen-/Spaltennamen vorschlagen. Dadurch wird eine Liste mit
Spaltennamen einer vorhandenen Datenmenge angezeigt, die auf dem Schema dieser Datenmenge basiert. Die
Spaltennamen werden bei Auswahl dieser Option mit keinem Objekt verknüpft.
4. Wenn Sie das Kontrollkästchen Anhand der Datenmenge Tabellen-/Spaltennamen vorschlagen aktiviert haben, können
Sie die Datenmenge in der Dropdown-Liste Datenmenge auswählen.
5. Wählen Sie die Quelltabelle in der Dropdown-Liste Quelltabelle aus. Falls die Datenquelle mehrere Tabellen umfasst,
werden deren Namen in der Dropdown-Liste angezeigt.
6. Wenn Sie eine Datenmenge verwenden, um Tabellen- und Spaltennamen vorzuschlagen, und diese Datenmenge mehrere
Tabellen enthält, können Sie die gewünschte Tabelle in der Dropdown-Liste Datenmengentabelle auswählen. Die
Spaltennamen der Quelltabelle und der Datenmenge sollten in der Tabelle Spaltenzuordnungen angezeigt werden. Die
Anzeige repräsentiert standardmäßig die Zuordnung zwischen den Spalten der Quelltabelle und der Datenmenge; mit
anderen Worten, der Datenadapter liest Daten aus der Spalte, die auf der linken Seite der angezeigten Tabelle verzeichnet
ist, und speichert die Daten in der Datenmengenspalte, die im zugehörigen Feld auf der rechten Seite der Tabelle genannt ist.
Sie können die Namen auf beiden Seiten ändern, indem Sie neue Namen eintippen oder andere Tabellen auswählen. Auf
diese Weise können Sie abgefragte Dateien auch Datenmengenspalten speichern, die nicht standardmäßig in der
Datenmenge angelegt werden.
7. Wenn Sie eine Zuordnung ändern möchten, geben Sie in die Spalte für die Datenmengentabelle neben der gewünschten
Quelltabellenspalte einen anderen Namen ein. Die Daten aus der Spalte der Quelltabelle werden daraufhin in der
angegebenen neuen Datenmengenspalte gespeichert.
Anmerkung: Wenn Sie die Spaltennamen zurücksetzen möchten, sodass die Datenmengenspalten den Spalten der
Datenquelle entsprechen, klicken Sie auf die Schaltfläche Zurücksetzen
.
121
2
Fehler in Tabellenzuordnungen behandeln
RAD Studio für .NET
2.1 Datenbankanleitungen
So löschen Sie eine Zuordnung:
1. Markieren Sie die Tabellenzeile, die Sie löschen möchten.
2. Klicken Sie auf Löschen. Die betreffende Spalte wird daraufhin in der Abfrage der Quelltabelle übergangen, und die
zugehörige Datenmengenspalte bleibt leer.
Siehe auch
Überblick zu ADO.NET (
see page 15)
ADO.NET-Komponentendesigner (
see page 23)
Fehler in Tabellenzuordnungen behandeln (
see page 123)
2.1.7 SQL im Daten-Explorer ausführen
Sie können SQL in einem eigenen SQL-Fenster eingeben, bearbeiten und ausführen. Das SQL-Fenster steht im
Daten-Explorer zur Verfügung.
So öffnen Sie ein SQL-Fenster:
1. Wählen Sie Ansicht Daten-Explorer.
2. Wählen Sie eine Verbindung aus.
3. Klicken Sie mit der rechten Maustaste auf die Verbindung, und wählen Sie SQL-Fenster. Daraufhin wird das mit
Registerkarten ausgestattete SQL-Fenster im Quelltext-Editor geöffnet.
So führen Sie SQL aus:
1. Geben Sie eine gültige SQL-Anweisung oder den Namen einer Stored Procedure in das mehrzeilige Textfenster am oberen
Rand des SQL-Fensters ein.
2. Klicken Sie auf SQL ausführen. Wenn die SQL-Anweisung oder Stored Procedure gültig ist, wird die Ergebnismenge im
unteren Bereich des SQL-Fensters angezeigt.
Anmerkung: Die SQL-Anweisung oder die Stored Procedure muss für die aktuelle Verbindung und deren Zieldatenbank
ausgeführt werden. Ein SQL-Befehl lässt sich nicht für eine Datenbank ausführen, zu der keine Verbindung besteht.
3. Klicken Sie auf Gesamtes SQL löschen, um die SQL-Anweisung oder die Stored Procedure wieder aus dem mehrzeiligen
Textfeld zu löschen.
Siehe auch
2
ADO.NET-Komponentendesigner (
see page 23)
Datenbank im Daten-Explorer durchsuchen (
see page 118)
Neue Verbindung in den Daten-Explorer einfügen (
Verbindungen im Daten-Explorer bearbeiten (
see page 116)
see page 125)
2.1.8 Fehler in Tabellenzuordnungen behandeln
Jede Art von Vergleich zwischen einer Datenquelle und einer Arbeitsspeicherrepräsentation von Daten ist fehleranfällig. Fehler
122
2.1 Datenbankanleitungen
RAD Studio für .NET
Daten zwischen Datenbanken migrieren
können auftreten, wenn die Datenquelle und die zugehörige Datenmenge nicht über die gleiche Anzahl von Spalten verfügen
oder wenn die Spaltentypen der Datenquelle nicht mit den Spaltentypen der Datenmenge übereinstimmen. Zudem können
andere interne Fehler auftreten, die sich zur Entwurfszeit nicht unterbinden lassen. Sie können mit den Eigenschaften
MissingMappingAction und MissingSchemaAction auf Fehler in Tabellenzuordnungsoperationen reagieren. Mit Hilfe der
Eigenschaft MissingMappingAction können Sie festlegen, wie der Datenadapter reagieren soll, wenn eine Zuordnung fehlt.
Verwenden Sie die Eigenschaft MissingSchemaAction, um zu bestimmen, wie der Adapter reagieren soll, wenn der Versuch
unternommen wird, Daten in eine Spalte zu schreiben, die in der Datenmenge nicht definiert ist.
So legen Sie die Eigenschaft MissingMappingAction fest:
1. Nachdem Sie ein AdoDbxDataAdapter-Objekt erstellt und die Tabellenzuordnungen eingerichtet haben, klicken Sie im
Objektinspektor auf die Dropdown-Liste neben der Eigenschaft MissingMappingAction.
2. Wählen Sie Passthrough, wenn der Adapter die Daten aus der Spalte der Datenquelle in eine gleichnamige
Datenmengenspalte laden oder die in der Eigenschaft MissingSchemaAction angegebene Aktion ausführen soll, falls keine
entsprechende Datenmengenspalte vorhanden ist.
3. Wählen Sie Ignore, wenn keine Daten geladen werden sollen, falls die Spalten der Datenquelle den Spalten der Datenmenge
nicht korrekt zugeordnet sind. Dieser Fall kann eintreten, wenn die zuzuordnenden Spalten inkompatible Datentypen haben
oder unterschiedliche Längen oder Fehler aufweisen.
4. Wählen Sie Error, wenn der Adapter eine Fehlerbedingung erzeugen soll, die Sie abfangen können.
So legen Sie die Eigenschaft MissingSchemaAction fest:
1. Wählen Sie Add, wenn die Tabelle oder Spalte der Datenquelle der Datenmenge und deren Schema hinzugefügt werden soll.
Wenn die Eigenschaft MissingMappingAction auf Passthrough und die Eigenschaft MissingSchemaAction auf Add gesetzt
wird, hat dies zur Folge, dass die Tabellen- und Spaltennamen der Datenquelle zweimal in die Datenmenge eingefügt
werden.
2. Wählen Sie AddWithKey, wenn die Tabelle oder Spalte der Datenquelle zusammen mit dem Primärschlüssel der
Datenmenge und deren Schema hinzugefügt werden soll.
3. Wählen Sie Ignore, falls die Tabelle oder Spalte nur dann der Datenmenge hinzugefügt werden soll, wenn das Schema der
Datenmenge die betreffende Tabelle oder Spalte bereits repräsentiert. Stellen Sie Ignore ein, wenn nur diejenigen Daten in
die Datenmenge geladen werden sollen, die in den Tabellenzuordnungen explizit angegeben sind. Diese Einstellung kann
erforderlich sein, wenn der Adapter eine Stored Procedure oder eine benutzerdefinierte SQL-Anweisung aufruft, die mehr
Spalten zurückgibt als in der Datenmenge definiert sind.
4. Wählen Sie Error, wenn der Adapter eine Fehlerbedingung erzeugen soll, die Sie abfangen können.
Siehe auch
Überblick zu ADO.NET (
see page 15)
ADO.NET-Komponentendesigner (
Tabellenzuordnungen erstellen (
see page 23)
see page 120)
2
2.1.9 Daten zwischen Datenbanken migrieren
Mit dem Daten-Explorer lassen sich Daten zwischen Datenbanken (und sogar Providern) schnell und einfach migrieren. Sie
können mit dem Daten-Explorer eine Tabelle in einer Datenbank kopieren und diese dann in eine andere Datenbank einfügen.
Dabei werden sowohl die Struktur als auch die Daten der Tabelle(n) migriert.
Die Datenmigration wird von der Klasse BdpCopyTable unterstützt, die zur Entwurfszeit als Komponente in der Tool-Palette zur
Verfügung steht. Mit dieser Komponente können Sie Daten programmgesteuert migrieren.
Anmerkung: Die Klasse BdpCopyTable kopiert keine fremden Schlüssel oder abhängigen Objekte.
123
Verbindungen im Daten-Explorer
RAD Studio für .NET
2.1 Datenbankanleitungen
So migrieren Sie mehrere Tabellen:
1. Wählen Sie Ansicht Daten-Explorer.
2. Klicken Sie mit der rechten Maustaste auf einen Provider-Typ (z.B. Interbase), und wählen Sie Datenmigration. Die Seite des
Daten-Explorers für die Datenmigration wird im Quelltext-Editor geöffnet. Auf dieser Seite können Sie eine oder mehrere
Tabellen in einer Provider-Quellverbindung auswählen und eine Zielverbindung bestimmen, zu der die Tabellen migriert
werden sollen.
3. Wählen Sie im Dropdown-Listenfeld Quellverbindung eine Verbindung aus. Die mit dieser Verbindung verknüpften Tabellen
werden im Listenfeld unterhalb der Verbindung angezeigt.
4. Wählen Sie im Dropdown-Listenfeld Zielverbindung eine Verbindung aus. Die mit dieser Verbindung verknüpften Tabellen
werden im Listenfeld unterhalb der Verbindung angezeigt.
5. Wählen Sie eine oder mehrere zu migrierende Tabellen in der Liste der Tabellen aus, die mit der Quellverbindung verknüpft
sind. Zur Auswahl aufeinander folgender Tabellen klicken Sie auf die erste Tabelle, halten die Taste UMSCH gedrückt und
klicken auf die letzte Tabelle. Um nicht aufeinander folgende Tabellen zu markieren, halten Sie die Taste STRG gedrückt und
klicken auf jede auszuwählende Tabelle.
6. Klicken Sie auf die Schaltfläche Einbeziehen (>), um diese Tabellen in die Migration zur Zielverbindung aufzunehmen. Die
ausgewählten Tabellen werden in der Liste der Tabellen für die Zielverbindung angezeigt. Falls eine der ausgewählten
Tabellen denselben Namen wie eine in der Zielverbindung vorhandene Tabelle hat, kann sie nicht migriert werden.
7. Klicken Sie auf Ausführen, um die Tabellen in die Zielverbindung zu kopieren. Auf der Seite Datenmigration wird der Verlauf
der Migrationsaktivitäten angezeigt. Hierzu gehören das Zuordnen von SQL-Typen, das Erstellen von Tabellen, das Abrufen
von Daten aus der Quellverbindung sowie das Auffüllen der neuen Tabelle mit Daten in der Zielverbindung. Das Ergebnis der
einzelnen Operationen wird für jede Tabelle separat ausgewiesen.
8. Klicken Sie mit der rechten Maustaste auf den Tabellenknoten im Ziel-Provider, und wählen Sie Aktualisieren. Für alle neuen
Tabellen werden Knoten angezeigt.
9. Doppelklicken Sie auf einen neuen Tabellenknoten, um die Struktur und den Inhalt der Tabelle zu überprüfen. Die Tabelle
wird auf einer Seite der Designoberfläche geöffnet.
So migrieren Sie eine einzelne Tabelle:
1. Wählen Sie Ansicht Daten-Explorer.
2. Erweitern Sie den Tabellenknoten im Quell-Provider, und wählen Sie die Datenbanktabelle aus, in der die zu migrierenden
Daten und deren Struktur enthalten sind. Damit die Provider-Knoten erweitert werden können, muss eine gültige Verbindung
vorhanden sein.
3. Klicken Sie mit der rechten Maustaste auf die Tabelle, die migriert werden soll, und wählen Sie Tabelle kopieren.
4. Erweitern Sie den Tabellenknoten des Providers, in den die Daten migriert werden sollen.
5. Klicken Sie mit der rechten Maustaste auf eine Tabelle, und wählen Sie Tabelle einfügen. Das Dialogfeld Neuer
Tabellenname wird geöffnet.
2
6. Geben Sie einen Namen für die neue Tabelle ein, und klicken Sie auf OK.
7. Klicken Sie mit der rechten Maustaste auf den Tabellenknoten im Ziel-Provider, und wählen Sie Aktualisieren. Für die neue
Tabelle wird ein Knoten angezeigt.
8. Doppelklicken Sie auf den neuen Tabellenknoten, um die Struktur und den Inhalt der Tabelle zu überprüfen. Die Tabelle wird
auf einer Seite der Designoberfläche geöffnet.
Siehe auch
Datenprovider für Microsoft .NET (
see page 28)
Verbindungen im Daten-Explorer bearbeiten (
Datenbank im Daten-Explorer durchsuchen (
124
see page 125)
see page 118)
2.1 Datenbankanleitungen
RAD Studio für .NET
Verbindungen im Daten-Explorer
2.1.10 Verbindungen im Daten-Explorer bearbeiten
Sie können Verbindungen im Daten-Explorer in vielerlei Hinsicht ändern.
So ändern Sie Verbindungen:
1. Wählen Sie Ansicht Daten-Explorer.
2. Wählen Sie einen Provider aus.
3. Klicken Sie mit der rechten Maustaste, um ein Kontextmenü anzuzeigen, und wählen Sie die gewünschte Option aus.
So aktualisieren Sie eine Verbindung:
1. Wählen Sie Ansicht Daten-Explorer.
2. Wählen Sie einen Provider aus.
3. Klicken Sie mit der rechten Maustaste, um ein Kontextmenü einzublenden.
4. Wählen Sie Aktualisieren. Daraufhin werden alle für den ausgewählten Provider definierten Verbindungen erneut initialisiert.
So löschen Sie eine Verbindung:
1. Wählen Sie Ansicht Daten-Explorer.
2. Wählen Sie eine Verbindung aus.
3. Klicken Sie mit der rechten Maustaste, um ein Kontextmenü einzublenden.
4. Wählen Sie Verbindung löschen. In einer Bestätigungsmeldung werden Sie gefragt, ob die Verbindung entfernt werden soll.
5. Klicken Sie auf OK.
So ändern Sie eine Verbindung:
1. Wählen Sie Ansicht Daten-Explorer.
2. Wählen Sie eine Verbindung aus.
3. Klicken Sie mit der rechten Maustaste, um ein Kontextmenü einzublenden.
4. Wählen Sie Verbindung bearbeiten. Das Dialogfeld Verbindungseditor wird geöffnet.
5. Nehmen Sie die Änderungen an den betreffenden Werten im Editor vor.
6. Klicken Sie auf OK.
So schließen Sie eine Verbindung:
2
1. Wählen Sie Ansicht Daten-Explorer.
2. Wählen Sie eine Verbindung aus.
3. Klicken Sie mit der rechten Maustaste, um ein Kontextmenü einzublenden.
4. Wählen Sie Verbindung schließen. Ist die Verbindung geöffnet, wird sie durch diesen Schritt geschlossen.
Anmerkung: Steht der Befehl Verbindung schließen
im Menü nicht zur Verfügung, ist die Verbindung nicht geöffnet.
So benennen Sie eine Verbindung um:
1. Wählen Sie Ansicht Daten-Explorer.
2. Wählen Sie eine Verbindung aus.
125
Datenbankverbindungen bearbeiten
RAD Studio für .NET
2.1 Datenbankanleitungen
3. Klicken Sie mit der rechten Maustaste, um ein Kontextmenü einzublenden.
4. Wählen Sie Verbindung umbenennen. Daraufhin wird das Dialogfeld Verbindung umbenennen angezeigt.
5. Geben Sie einen neuen Namen ein.
6. Klicken Sie auf OK. Im Daten-Explorer wird die Verbindung mit dem neuen Namen angezeigt.
Siehe auch
ADO.NET-Komponentendesigner (
see page 23)
Datenbank im Daten-Explorer durchsuchen (
SQL im Daten-Explorer ausführen (
see page 118)
see page 122)
Neue Verbindung in den Daten-Explorer einfügen (
see page 116)
2.1.11 Datenbankverbindungen bearbeiten
Die grundlegenden Elemente eines Verbindungsstrings sind meist für alle Datenbanktypen gleich. Allerdings gilt für jeden
Datenbanktyp eine leicht veränderte Syntax des Verbindungsstrings. In diesem Abschnitt werden diese Unterschiede
beschrieben.
So bearbeiten Sie verschiedene Typen von Datenbankverbindungen:
1. Klicken Sie in der IDE auf die Registerkarte Daten-Explorer.
2. Wählen Sie einen Datenbanktyp aus.
3. Klicken Sie mit der rechten Maustaste, um das Popup-Menü einzublenden.
4. Wählen Sie Verbindung bearbeiten. Das Dialogfeld Verbindungseditor wird angezeigt. Die Eigenschaften im
Verbindungseditor sind in drei Kategorien gegliedert: Verbindungen, Optionen und Providereinstellungen. Die
Verbindungsoptionen bestimmen die Datenbank- und Authentifizierungsparameter. Der Bereich mit den Optionen enthält
verschiedene datenbankspezifische Datenbankoptionen, einschließlich der Typen für die Transaktionsisolation. Im Bereich für
Provider-Einstellungen sind die Assemblierungen und die Client-Bibliotheken enthalten, die benötigt werden, um die
Verbindung zu der betreffenden Datenbank herzustellen.
Anmerkung: Bei allen Anleitungen in diesem Abschnitt wird vorausgesetzt, dass bereits ein Datenbank-Client und -Server
oder beides installiert ist und dass die Datenbankinstanz läuft.
So ändern Sie eine InterBase-Verbindung:
2
1. Geben Sie entweder den Datenbanknamen ein, oder klicken Sie auf die Ellipsenschaltfläche, und navigieren Sie zu der
Datenbank auf einem lokalen oder Netzlaufwerk. Die mitgelieferten Datenbanken befinden sich standardmäßig im Verzeichnis
C:\Programme\Gemeinsame Dateien\CodeGear Shared\Data.
2. Geben Sie das Passwort und den Benutzernamen ein. Standardmäßig sind dies masterkey und sysdba.
3. Legen Sie bei Bedarf die folgenden Optionen fest. Die Standardwerte sind in der folgenden Tabelle enthalten.
Option
Beschreibung
Vorgabe
CommitRetain
Schließt die aktuelle Transaktion unter Beibehaltung des Transaktionskontextes.
False
LoginPrompt
Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn die False
Anwendung versucht, eine Verbindung zur Datenbank herzustellen.
QuoteObjects
Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte in False
Anführungszeichen oder andere Begrenzungszeichen eingeschlossen werden
müssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist für
Datenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa bei
MS Access.
126
2.1 Datenbankanleitungen
RAD Studio für .NET
Datenbankverbindungen bearbeiten
RoleName
Wenn für Sie in der Datenbank eine Rolle vorgesehen ist, können Sie den myRole
Rollennamen hier eingeben. Diese Rolle ist prinzipiell ein Authentifizierungsalias, der
Ihre Identität mit Ihren Zugriffsrechten kombiniert.
ServerCharSet
Bezeichnet den Zeichensatz auf dem Server.
—
SQLDialect
Ermittelt den vom Client verwendeten SQL-Dialekt oder legt ihn fest.
3
TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "Dirty ReadCommitted
Reads" auszuschließen. Die Daten können aber vor Beendigung der Transaktion
geändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folge
hat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevel
bestimmt.
WaitOnLocks
Legt fest, dass eine Transaktion auf den Zugriff warten muss, wenn sie auf einen False
Sperrkonflikt mit einer anderen Transaktion trifft.
4. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:
Option
Vorgabe
Assemblierung
Borland.Data.Interbase,Version=Aktuelle
Produktversion,Culture=neutral,PublicKeyToken=Token #
Provider
Interbase
VendorClient
gds32.dll
5. Klicken Sie auf Test, um die Verbindung zu überprüfen.
6. Klicken Sie auf OK, um den Verbindungsstring zu speichern.
Anmerkung: Wenn Sie ASP.NET-Anwendungen schreiben und die ASP.NET Web Forms zu Testzwecken lokal ausführen,
kann es notwendig sein, in die Pfadanweisung, die auf die Datenbank verweist, die Position localhost: aufzunehmen. Der
oben genannte Pfad würde dann beispielsweise so aussehen: localhost:C:\Programme\Gemeinsame
Dateien\CodeGear Shared\Data\employee.gdb.
Anmerkung: Ihr Verbindungsstring sollte ungefähr so aussehen:
database=C:\Programme\Gemeinsame Dateien\CodeGear Shared\Data\EMPLOYEE.GDB;
assembly=Borland.Data.Interbase,Version=2.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b
;
vendorclient=gds32.dll;provider=Interbase;username=sysdba;password=masterkey
So ändern Sie eine MS SQL Server-Verbindung:
1. Geben Sie den Datenbanknamen in das Feld Datenbank des Verbindungseditors ein. Verwenden Sie beispielsweise eine
der MS SQL Server-Beispieldatenbanken wie Pubs oder Northwind. Die Dateinamenserweiterung muss nicht an den Namen
angefügt werden.
2. Geben Sie den Hostnamen ein. Wenn Sie einen lokalen Datenbankserver verwenden, geben Sie in dieses Feld (local) ein.
3. Wenn Sie die BS-Authentifizierung wünschen, setzen Sie OSAuthentication auf True.
4. Soll die Datenbankauthentifizierung verwendet werden, geben Sie das Passwort und den Benutzernamen in die betreffenden
Felder ein. Per Voreinstellung lautet der Benutzername der SQL Server-Datenbank sa.
5. Ändern Sie bei Bedarf die Datenbankoptionen. Die Standardwerte sind in der folgenden Tabelle enthalten.
Option
Beschreibung
Vorgabe
BlobSize
Die obere Grenze eines BLOB-Feldes.
1024
LoginPrompt
Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn die False
Anwendung versucht, eine Verbindung zur Datenbank herzustellen.
127
2
Datenbankverbindungen bearbeiten
QuoteObjects
RAD Studio für .NET
2.1 Datenbankanleitungen
Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte in False
Anführungszeichen oder andere Begrenzungszeichen eingeschlossen werden
müssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist für
Datenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa bei
MS Access.
TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "Dirty ReadCommitted
Reads" auszuschließen. Die Daten können aber vor Beendigung der Transaktion
geändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folge
hat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevel
bestimmt.
6. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:
Option
Vorgabe
Assemblierung
Borland.Data.Mssql,Version=Aktuelle
#
Provider
MSSQL
VendorClient
sqloledb.dll
Produktversion,Culture=neutral,PublicKeyToken=Token
7. Klicken Sie auf Test, um die Verbindung zu überprüfen.
8. Klicken Sie auf OK, um den Verbindungsstring zu speichern.
Anmerkung: Wenn Sie ASP.NET-Anwendungen schreiben und die ASP.NET Web Forms zu Testzwecken lokal ausführen,
kann es notwendig sein, in die Pfadanweisung, die auf die Datenbank verweist, die Position localhost: vorne an den Pfad
anzufügen.
Anmerkung: Ihr Verbindungsstring sollte ungefähr so aussehen:
assembly=Borland.Data.Mssql,Version=2.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;
vendorclient=sqloledb.dll;osauthentication=True;database=Pubs;username=;hostname=(local);passwo
rd=;
provider=MSSQL
So ändern Sie eine DB2-Verbindung:
1. Geben Sie den Pfad zur Datenbank ein.
2. Geben Sie das Passwort und den Benutzernamen in die vorgesehenen Felder ein.
3. Legen Sie bei Bedarf die folgenden Datenbankoptionen fest. Die Standardwerte sind in der folgenden Tabelle enthalten.
2
Option
Beschreibung
Vorgabe
LoginPrompt
Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn die False
Anwendung versucht, eine Verbindung zur Datenbank herzustellen.
QuoteObjects
Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte in False
Anführungszeichen oder andere Begrenzungszeichen eingeschlossen werden
müssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist für
Datenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind.
TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "Dirty ReadCommitted
Reads" auszuschließen. Die Daten können aber vor Beendigung der Transaktion
geändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folge
hat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevel
bestimmt.
4. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:
128
2.1 Datenbankanleitungen
RAD Studio für .NET
Option
Vorgabe
Assemblierung
Borland.Data.Db2,Version=Aktuelle
#
Provider
DB2
VendorClient
db2cli.dll
Datenbankverbindungen bearbeiten
Produktversion,Culture=neutral,PublicKeyToken=Token
5. Klicken Sie auf Test, um die Verbindung zu überprüfen.
6. Klicken Sie auf OK, um den Verbindungsstring zu speichern.
So ändern Sie eine Oracle-Verbindung:
1. Geben Sie den Pfad zur Datenbank ein.
2. Wenn Sie die BS-Authentifizierung wünschen, setzen Sie OSAuthentication auf True. Dies bedeutet, dass das System zur
Anmeldung bei der Datenbank den Benutzernamen und das Passwort des lokalen Systems verwendet.
3. Soll die Datenbankauthentifizierung verwendet werden, geben Sie das Passwort und den Benutzernamen in die betreffenden
Felder ein. Der typische Oracle-Benutzername und das Passwort für die Beispieldatenbank lauten SCOTT und TIGER.
4. Legen Sie bei Bedarf die folgenden Datenbankoptionen fest. Die Standardwerte sind in der folgenden Tabelle enthalten.
Option
Beschreibung
Vorgabe
LoginPrompt
Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn die False
Anwendung versucht, eine Verbindung zur Datenbank herzustellen.
QuoteObjects
Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte in False
Anführungszeichen oder andere Begrenzungszeichen eingeschlossen werden
müssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist für
Datenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind.
TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "Dirty ReadCommitted
Reads" auszuschließen. Die Daten können aber vor Beendigung der Transaktion
geändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folge
hat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevel
bestimmt.
5. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:
Option
Vorgabe
Assemblierung
Borland.Data.Oracle,Version=Aktuelle
Produktversion,Culture=neutral,PublicKeyToken=Token #
Provider
Oracle
VendorClient
oci.dll
2
6. Klicken Sie auf Test, um die Verbindung zu überprüfen.
7. Klicken Sie auf OK, um den Verbindungsstring zu speichern.
So ändern Sie eine MS Access-Verbindung:
1. Geben Sie entweder den Datenbanknamen ein, oder klicken Sie auf die Ellipsenschaltfläche, und navigieren Sie zu der
Datenbank auf einem lokalen oder Netzlaufwerk. Wenn das Office Component Toolkit installiert ist, finden Sie Northwind in
C:\Programme\Office Component Toolpack\Data\Northwind.mdb.
2. Geben Sie das Passwort und den Benutzernamen ein. Standardmäßig können Sie als Benutzernamen admin eingeben und
das Passwortfeld leer lassen.
3. Legen Sie bei Bedarf die folgenden Datenbankoptionen fest. Die Standardwerte sind in der folgenden Tabelle enthalten.
129
Datenbankverbindungen bearbeiten
RAD Studio für .NET
2.1 Datenbankanleitungen
Option
Beschreibung
Vorgabe
BlobSize
Die obere Grenze eines BLOB-Feldes.
1024
LoginPrompt
Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn die False
Anwendung versucht, eine Verbindung zur Datenbank herzustellen.
QuoteObjects
Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte in False
Anführungszeichen oder andere Begrenzungszeichen eingeschlossen werden
müssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist für
Datenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa bei
MS Access.
TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "Dirty ReadCommitted
Reads" auszuschließen. Die Daten können aber vor Beendigung der Transaktion
geändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folge
hat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevel
bestimmt.
4. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:
Option
Vorgabe
Assemblierung
Borland.Data.Msacc,Version=Aktuelle Produktversion,Culture=neutral,PublicKeyToken=Token
#
Provider
MSAccess
VendorClient
msjet40.dll
5. Klicken Sie auf Test, um die Verbindung zu überprüfen.
6. Klicken Sie auf OK, um den Verbindungsstring zu speichern.
Anmerkung: Ihr Verbindungsstring sollte ungefähr so aussehen:
database=C:\Programme\Office Component Toolpack\Data\Northwind.mdb;
assembly=Borland.Data.Msacc,Version=2.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;
vendorclient=msjet40.dll;provider=MSAccess;username=admin;password=
So ändern Sie eine Sybase-Verbindung:
1. Geben Sie den Pfad zur Datenbank ein.
2. Geben Sie das Passwort und den Benutzernamen in die vorgesehenen Felder ein.
3. Legen Sie bei Bedarf die folgenden Datenbankoptionen fest. Die Standardwerte sind in der folgenden Tabelle enthalten.
2
Option
Beschreibung
Vorgabe
BlobSize
Die obere Grenze eines BLOB-Feldes.
1024
ClientAppName
Name der Client-Anwendung, der von der Zwischenschicht-Anwendung festgelegt —
wird.
ClientHostName
Client-Hostname, der von der Zwischenschicht-Anwendung festgelegt wird.
LoginPrompt
Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn die False
Anwendung versucht, eine Verbindung zur Datenbank herzustellen.
PacketSize
Gibt die Anzahl der Bytes pro Netzwerkpaket an, die vom Datenbankserver zum Client 512
übertragen werden.
130
—
2.1 Datenbankanleitungen
QuoteObjects
RAD Studio für .NET
Eine Datenbankanwendung für die
Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte in False
Anführungszeichen oder andere Begrenzungszeichen eingeschlossen werden
müssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist für
Datenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa bei
MS Access.
TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "Dirty ReadCommitted
Reads" auszuschließen. Die Daten können aber vor Beendigung der Transaktion
geändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folge
hat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevel
bestimmt.
4. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:
Option
Vorgabe
Assemblierung
Borland.Data.Sybase,Version=Aktuelle
Produktversion,Culture=neutral,PublicKeyToken=Token #
Provider
Sybase
VendorClient
libct.dll
5. Klicken Sie auf Test, um die Verbindung zu überprüfen.
6. Klicken Sie auf OK, um den Verbindungsstring zu speichern.
Anmerkung: Ihr Verbindungsstring sollte ungefähr so aussehen:
assembly=Borland.Data.Sybase,Version=2.0.0.0,Culture=neutral,
PublicKeyToken=91d62ebb5b0d1b1b;vendorclient=libct.dll;database=Pubs;
username=admin;hostname=host1;password=;provider=Sybase
Siehe auch
Überblick zu ADO.NET (
see page 15)
Datenbank-Provider für .NET (
see page 28)
ADO.NET-Komponentendesigner (
see page 23)
ASP.NET-Datenbankanwendung erstellen (
see page 187)
Datenbank-Projekte mit dem Daten-Explorer erstellen (
Parameterübergabe in einer Datenbankanwendung (
see page 120)
see page 134)
2
2.1.12 Eine Datenbankanwendung für die Auflösung in
mehrere Tabellen erstellen
RAD Studio unterstützt die Auflösung in mehrere Tabellen mit BDP.NET. Zur Bereitstellung und Auflösung einer
.NET-Datenmenge aus mehreren heterogenen Datenquellen dienen speziell die beiden Komponenten DataSync und DataHub.
Zusätzlich unterstützen diese Komponenten die Anzeige von Live-Daten zur Entwurfszeit und stellen Haupt-/Detaildaten bereit
und lösen sie auf, indem optimales SQL für die Auflösung in BDP-Datenquellen generiert wird.
Die DataHub-Komponente dient als Bindeglied zwischen einer DataSet- und einer DataSync-Komponente. Der
DataPort-Eigenschaft einer DataHub-Komponente kann eine beliebige Implementierung von IDataProvider zugewiesen werden.
DataSync implementiert eine IDataProvider-Komponente und verfügt über eine Providers-Sammlung mit .NET-Daten-Providern,
131
Eine Datenbankanwendung für die
RAD Studio für .NET
2.1 Datenbankanleitungen
die IDbDataAdapter implementieren. Die Methode GetData für DataSync iteriert durch alle Daten-Provider in der Sammlung und
gibt eine Datenmenge zurück. SaveData löst Änderungen an der Datenmenge über die DataProvider-Sammlung wieder zurück
in die Datenbank auf. Beim Zurückschreiben der Änderungen über ein BdpDataAdapter-Objekt erzeugt der Resolver optimales
SQL. Bei Nicht-BDP-Daten-Providern wird der entsprechende CommandBuilder verwendet.
Die Erstellung einer Datenbankanwendung zur Auflösung in mehrere Tabellen umfasst folgende Schritte:
1. Ein einfaches Datenbankprojekt im Daten-Explorer mit mehreren BdpDataAdapter-Objekten erstellen, um eine Verbindung
zu mehreren Providern herzustellen.
2. Eine DataSync-Komponente hinzufügen und konfigurieren, um eine Verbindung zu den Providern einzurichten.
3. Eine DataHub-Komponente hinzufügen und konfigurieren, um die DataSync-Komponente mit einer Datenmenge zu
verbinden.
So erstellen Sie ein Datenbankprojekt mit dem Daten-Explorer:
1. Wählen Sie Datei Neu Windows Forms-Anwendung (für Delphi für .NET). Der Windows Forms-Designer wird angezeigt.
2. Wählen Sie Ansicht Daten-Explorer, um auf den Daten-Explorer zuzugreifen.
3. Erweitern Sie die Daten-Explorerstruktur, um die gewünschten Provider und Datenbanktabellen anzuzeigen. Damit die
Provider-Knoten erweitert werden können, muss eine Live-Verbindung vorhanden sein. Wenn dies nicht der Fall ist, müssen
Sie möglicherweise den Verbindungsstring ändern.
4. Ziehen Sie Tabellen von einem oder mehreren Providern in das Formular. Für jede in das Formular gezogene Tabelle wird in
der Komponentenablage eine BdpConnection- und eine BdpDataAdapter-Komponente angezeigt. Wenn Sie mehrere
Tabellen desselben Providers einfügen, ist nur eine BdpConnection-Komponente für diesen Provider erforderlich. Alle
anderen Komponenten dieser Art können gelöscht werden.
5. Konfigurieren Sie jede BdpDataAdapter-Komponente. Die Eigenschaft Active oder DataSet muss nicht gesetzt werden, da die
Datenmenge über die DataHub-Komponente gefüllt wird.
6. Fügen Sie dem Formular eine DataSet-Komponente aus der Kategorie Datenkomponenten der Tool-Palette hinzu.
7. Fügen Sie dem Formular eine DataGrid-Komponente aus der Kategorie Datensteuerung der Tool-Palette hinzu, und
konfigurieren Sie diese. Weisen Sie der Eigenschaft DataSource der DataGrid-Komponente den Namen der hinzugefügten
Datenmengenkomponente zu (beispielsweise dataSet1).
So erstellen und konfigurieren Sie eine DataSync-Komponente:
1. Ziehen Sie eine DataSync-Komponente aus der Kategorie Borland Daten-Provider der Tool-Palette in das Formular.
2. Wählen Sie in der Komponentenablage die DataSync-Komponente aus.
3. Wählen Sie im Objektinspektor die Eigenschaft Providers aus, und klicken Sie auf die Ellipsen-Schaltfläche, um den Editor
für Daten-Provider-Sammlungen zu öffnen.
4. Fügen Sie in diesem Editor jeder Tabelle, die bereitgestellt und aufgelöst werden soll, einen Daten-Provider hinzu. Für jede
BdpDataAdapter-Komponente im Projekt muss ein Daten-Provider vorhanden sein.
2
5. Wählen Sie für jeden Daten-Provider im Bereich Elemente den Eintrag Daten-Provider, und weisen Sie der Eigenschaft
DataAdapter die entsprechende BdpDataAdapter-Komponente zu.
6. Wenn alle Daten-Provider konfiguriert sind, klicken Sie auf OK, um den Editor für Daten-Provider-Sammlungen zu
schließen.
7. Legen Sie im Objektinspektor über die Eigenschaft CommitBehavior fest, wie Fehler während der Auflösung behandelt
werden sollen. Für die Auflösungslogik stehen drei Optionen zur Verfügung:
• Atomic: Es wird versucht, für jeden Provider Transaktionen auszuführen. Wenn eine Transaktion fehlschlägt, werden keine
weiteren Versuche unternommen, und alle vorhergehenden Transaktionen werden rückgängig gemacht. Falls keine
fehlgeschlagenen Transaktionen vorhanden sind, werden alle Transaktionen eingetragen.
• Individual: Es wird versucht, für einen Provider eine Transaktion durchzuführen. Ist der Versuch erfolgreich, wird die
Transaktion eingetragen. Ein weiterer Transaktionsversuch wird gestartet. Wenn dieser erfolgreich ist, wird die Transaktion
eingetragen. Dieser Vorgang wird fortgesetzt, bis alle Transaktionen ausgeführt sind. Wenn eine Transaktion für einen
Provider fehlschlägt, wird sie zurückgesetzt, und es werden keine weiteren Transaktionsversuche unternommen.
132
2.1 Datenbankanleitungen
RAD Studio für .NET
Parameterübergabe in einer
• ForceIndividual: Es wird versucht, für einen Provider eine Transaktion durchzuführen. Ist der Versuch erfolgreich, wird die
Transaktion eingetragen. Ein weiterer Transaktionsversuch wird gestartet. Wenn dieser erfolgreich ist, wird die Transaktion
eingetragen. Dieser Vorgang wird fortgesetzt, bis alle Transaktionen ausgeführt sind. Wenn eine Transaktion für einen
Provider fehlschlägt, wird sie zurückgesetzt, und der nächste Versuch wird gestartet.
So erstellen und konfigurieren Sie eine DataHub-Komponente:
1. Ziehen Sie eine DataHub-Komponente aus der Kategorie Borland Daten-Provider der Tool-Palette in das Formular.
2. Wählen Sie in der Komponentenablage die DataHub-Komponente aus.
3. Weisen Sie im Objektinspektor der Eigenschaft DataPort die hinzugefügte DataSync-Komponente zu (beispielsweise
DataSync1).
4. Weisen Sie der Eigenschaft DataSet die hinzugefügte DataSet-Komponente zu (beispielsweise dataSet1).
5. Wählen Sie Start Start. Die Anwendung wird compiliert und zeigt ein Windows Form mit einem Datengitter an.
Siehe auch
Überblick zu ADO.NET (
Daten-Provider für .NET (
see page 15)
see page 28)
ADO.NET-Komponentendesigner (
see page 23)
Eine verteilte Datenbankanwendung erstellen (
see page 147)
2.1.13 Parameterübergabe in einer Datenbankanwendung
Die folgende Anleitung beschreibt eine einfache Anwendung, die es Ihnen ermöglicht, zur Laufzeit einen Parameterwert an eine
Datenmenge zu übergeben. Parameter ermöglichen die Erstellung von Anwendungen, bei denen zur Entwurfszeit nicht bekannt
ist, welche Daten der Benutzer zur Laufzeit im Einzelnen eingeben wird. Im folgenden Beispiel wird unterstellt, dass Sie bereits
die Interbase-Beispieldatenbank EMPLOYEE.GDB eingerichtet und eine entsprechende Verbindung definiert haben. In diesem
Beispiel wird zur Veranschaulichung die Standardverbindungskomponente IBConn1 mit dem Standardspeicherort verwendet.
Ihre Datenbank befindet sich möglicherweise in einem anderen Verzeichnis.
So übergeben Sie einen Parameter:
1. Erzeugen Sie einen Datenadapter und eine Verbindung zur Interbase-Datenbank employee.gdb.
2. Fügen Sie ein Textfeld-Steuerelement, ein Schaltflächen-Steuerelement und ein DataGrid-Steuerelement in das Formular ein.
3. Konfigurieren Sie den Datenadapter.
4. So fügen Sie dem Datenadapter einen Parameter hinzu:
2
5. Konfigurieren Sie die DataGrid-Komponente.
6. Fügen Sie Quelltext für das Klick-Ereignis der Schaltfläche hinzu.
7. Compilieren Sie die Anwendung, und führen Sie sie aus.
So erstellen Sie einen Datenadapter und eine Verbindung:
1. Wählen Sie Datei Neu Windows Forms-Anwendung (für Delphi für .NET oder C#). Der Windows Forms-Designer wird
angezeigt.
2. Klicken Sie auf die Registerkarte Daten-Explorer, und erweitern Sie die Baumstruktur, um die Verbindung IBConn1 unter
dem Knoten Interbase ausfindig zu machen.
3. Ziehen Sie die Tabelle EMPLOYEE in das das Windows Form. Daraufhin werden ein BdpDataAdapter- und ein
BdpConnection-Objekt erstellt, die durch entsprechende Symbole in der Komponentenablage repräsentiert werden.
133
Parameterübergabe in einer
RAD Studio für .NET
2.1 Datenbankanleitungen
4. Markieren Sie das Datenadapter-Symbol, und klicken Sie dann auf das Designer Verb Datenadapter konfigurieren, das am
unteren Rand des Objektinspektors im Bereich Designer Verb angezeigt wird. Das Dialogfeld Datenadapter-Konfiguration
wird geöffnet.
5. Ändern Sie die SQL-Anweisung, die auf der Registerkarte Auswählen dieses Dialogfelds angezeigt wird, wie folgt ab:
SELECT EMP_NO, FIRST_NAME, LAST_NAME, SALARY FROM EMPLOYEE WHERE FIRST_NAME = ?;
Wie Sie sehen, wird mit dieser Anweisung die Anzahl der Felder begrenzt. Die Anweisung enthält in der Where-Klausel zudem
das Zeichen ?. Das Zeichen ? ist ein Platzhalter für den Parameterwert, der von der Anwendung zur Laufzeit übergeben wird. Es
gibt mindestens zwei Gründe, die dafür sprechen, Parameter auf diese Weise zu verwenden. Der erste Grund ist, dass eine
Anwendung so in die Lage versetzt werden kann, die Daten in den ausgewählten Spalten mehrfach abzurufen, zur Erfüllung der
Bedingung aber einen anderen Wert zu verwenden. Der zweite Grund besteht darin, dass Sie in der Entwurfsphase die
tatsächlichen Werte möglicherweise gar nicht kennen. Sie können sich vorstellen, wie beschränkt die Anwendung wäre, wenn
nur die Daten abgerufen würden, für die die Bedingung FIRST_NAME = 'Bob' erfüllt ist.
6. Klicken Sie auf die Registerkarte DataSet.
7. Klicken Sie auf Neues DataSet.
8. Klicken Sie auf OK. Damit wird die Datenmenge erzeugt, die die Abfrage repräsentiert.
So fügen Sie dem Datenadapter einen Parameter hinzu:
1. Wählen Sie das Datenadapter-Symbol aus, erweitern Sie dann die Eigenschaften unter SelectCommand im Bereich Füllen
des Objektinspektors. Die Select-Anweisung sollte nun in der Dropdown-Liste der Eigenschaft SelectCommand angezeigt
werden.
2. Ändern Sie die Eigenschaft ParameterCount in 1.
3. Klicken Sie auf den Eintrag (Auflistung) neben der Eigenschaft Parameters. Das Dialogfeld
BdpParameter-Auflistungs-Editor wird angezeigt.
4. Klicken Sie auf Hinzufügen, um einen neuen Parameter hinzuzufügen.
5. Benennen Sie den Parameter in emp um.
6. Stellen Sie BdpType auf String, DbType auf Object, Direction auf Input, SourceColumn auf FIRST_NAME und
ParameterName auf emp ein.
7. Klicken Sie auf OK.
8. Stellen Sie im Objektinspektor die Eigenschaft Active unter Live Data auf True ein.
So fügen Sie dem Formular Steuerelemente hinzu:
1. Ziehen Sie ein TextBox-Steuerelement mit der Maus in das Formular.
2. Ziehen Sie ein Button-Steuerelement mit der Maus in das Formular.
3. Ändern Sie die Eigenschaft Text des Button-Elements in Get Info.
2
4. Ziehen Sie ein DataGrid-Steuerelement mit der Maus in das Formular.
5. Ordnen Sie die Steuerelemente so an, wie sie angezeigt werden sollen, und stellen Sie hierbei sicher, dass das
DataGrid-Element ausreichend Raum für die Daten der vier Felder bietet.
So konfigurieren Sie die DataGrid-Komponente:
1. Wählen Sie die DataGrid-Komponente aus.
2. Weisen Sie der Eigenschaft DataSource den Namen der Datenmenge (per Vorgabe DataSet1) zu.
3. Stellen Sie die Eigenschaft DataMember auf Table1 ein. Daraufhin sollten die Namen der Spalten angezeigt werden, die in
der SQL-Anweisung genannt sind, die Sie in den Datenadapter eingegebenen haben.
So fügen Sie Quelltext für das Klick-Ereignis der Schaltfläche hinzu:
1. Doppelklicken Sie auf die Schaltfläche, um den Quelltexteditor zu öffnen.
134
2.1 Datenbankanleitungen
RAD Studio für .NET
Datenadapter-Vorschau verwenden
2. Fügen Sie folgenden Code in den Quelltextblock für die Ereignisbehandlungsroutine button1_Click ein:
bdpSelectCommand1.Close();
/* Damit wird der Befehl geschlossen, um sicherzustellen, dass der Parameter an */
/* den aktuellen bdpSelectCommand übergeben wird.
*/
bdpDataAdapter1.Active = false;
/* Damit wird der Datenadapter geleert, so dass keine alten Daten vorhanden sind */
bdpSelectCommand1.Parameters["emp"].Value = textBox1.Text;
/* Der Parameterwert wird auf den Inhalt des Textfelds gesetzt.
*/
bdpDataAdapter1.Active = true;
/* Der Datenadapter wird reaktiviert, so dass im Datengitter aktualisierte Daten angezeigt
werden. */
Self.bdpSelectCommand1.Close();
/* Damit wird der Befehl geschlossen, um sicherzustellen, dass der Parameter an */
/* den aktuellen bdpSelectCommand übergeben wird.
*/
Self.BdpDataAdapter1.Active := false;
/* Damit wird der Datenadapter geleert, so dass keine alten Daten vorhanden sind */
Self.bdpSelectCommand1.Parameters['emp'].Value := textBox1.Text;
/* Der Parameterwert wird auf den Inhalt des Textfelds gesetzt.
*/
Self.BdpDataAdapter1.Active := true;
/* Der Datenadapter wird reaktiviert, so dass im Datengitter aktualisierte Daten angezeigt
werden. */
Falls Sie den Namen eines dieser Elemente geändert haben, müssen Sie diese Befehle entsprechend abändern.
3. Speichern Sie die Anwendung.
So compilieren Sie die Anwendung und führen sie aus:
1. Drücken Sie UMSCHALT + F9, um die Anwendung zu compilieren.
2. Drücken Sie F9, um die Anwendung auszuführen.
3. Geben Sie in das Textfeld einen der folgenden Namen ein: John, Robert, Roger, Kim, Terri, Katherine oder Ann.
4. Klicken Sie auf die Schaltfläche. Daraufhin werden im Datengitter Personalnummer (EMP_NO), Vorname (FIRST_NAME),
Nachname (LAST_NAME) und Gehalt (SALARY) des Mitarbeiters mit dem angegebenen Vornamen angezeigt. Falls mehrere
Personen mit demselben Vornamen vorhanden sind, werden im Datengitter alle Mitarbeiter mit dem betreffenden Vornamen
angezeigt.
Siehe auch
Überblick zu ADO.NET (
see page 15)
Datenprovider für Microsoft .NET (
see page 28)
2
Datenbankanwendung mit Windows Forms erstellen
2.1.14 Datenadapter-Vorschau verwenden
CodeGear RAD Studio enthält ein Tool, das die Kommunikation zwischen Datenquelle und Datenmenge ermöglicht. Sie können
in der Datenadapter-Vorschau angeben, welche Daten aus der Datenmenge übertragen werden sollen - entweder in Form von
SQL-Anweisungen oder Stored Procedures, die zur Eingabe in die Datenbank oder zum Lesen aus der Datenbank aufgerufen
werden.
135
Anweisungstext-Editor verwenden
RAD Studio für .NET
2.1 Datenbankanleitungen
So verwenden Sie die Datenadapter-Vorschau:
1. Nachdem Sie die Komponente BdpDataAdapter in das Design gezogen haben, klicken Sie auf das Designer Verb
Datenadapter konfigurieren, das am unteren Rand des Objektinspektors angezeigt wird.
2. Aktivieren Sie die Registerkarte Vorschau, um die Datenadapter-Vorschau einzublenden.
3. Soll die Anzahl der eingeblendeten Zeilen beschränkt werden, aktivieren Sie das Kontrollkästchen Zeilen begrenzen.
4. Geben Sie die Anzahl der Zeilen, aus denen die Ergebnismenge bestehen soll, in das Textfeld Abzurufende Zeilen ein.
5. Klicken Sie auf Aktualisieren, um die Abfrage erneut auszuführen und das Listenfeld mit der angegebenen Zeilenanzahl zu
füllen.
Siehe auch
Überblick zu ADO.NET (
see page 15)
ADO.NET-Komponentendesigner (
see page 23)
Datenbankanwendung mit Windows Forms erstellen
Anweisungstext-Editor verwenden (
Verbindungseditor verwenden (
see page 137)
see page 139)
Designer "Datenmenge erzeugen" verwenden (
Designer für Datenadapter verwenden (
see page 143)
see page 138)
2.1.15 Anweisungstext-Editor verwenden
Um ein DataSet-Objekt zu erstellen, muss im BdpDataAdapter-Objekt mindestens SQL-Select-Anweisung für die Eigenschaft
CommandText definiert sein. Sobald diese Anweisung eingegeben wurde, wird sie als Wert der Eigenschaft CommandText des
BdpCommand-Objekts für die BdpDataAdapter-Komponente verwendet. Sie können diese Select-Anweisung eintippen oder den
Anweisungstext-Editor zum Erstellen dieser Anweisung (sowie von Update-, Insert- und Delete-Anweisungen) mit Hilfe
einfacher Zeigen- und Klicken-Operationen benutzen. Wenn Sie den Anweisungstext-Editor verwenden und eine Verbindung
zu einer aktiven Datenquelle besteht, dann werden die Namen der Tabellen und Spalten in diesem Editor angezeigt. Sie können
Einträge aus Listenfeldern auswählen, um die Anweisung aufzubauen. Wenn Sie die BdpDataAdapter-Komponente mit dem
Daten-Explorer erstellen und eine aktive Verbindung zu einer Datenquelle besteht, wird automatisch eine Vorlage für eine
Select-Anweisung in der Form select * from tablename erzeugt. Sie können diese Anweisung verwenden, um alle Zeilen
der genannten Datenquelle abzurufen, oder die Anweisung vor der Erzeugung der Datenmenge ändern.
2
So generieren Sie die Anweisungen:
1. Wählen Sie im Dropdown-Listenfeld Verbindung eine Verbindung aus. Dabei muss es sich um eine bereits von Ihnen
definierte BdpConnection-Komponente handeln. Das zugehörige BdpDataAdapter-Objekt muss ebenfalls definiert sein, und
seine Eigenschaft Active muss den Wert True haben. Daraufhin werden die Listenfelder Tabellen und Spalten mit den Daten
aus der Datenbank gefüllt.
2. Wählen Sie im Listenfeld Tabellen eine Tabelle aus.
3. Wählen Sie alle Spalten aus, die in die SQL-Anweisungen übernommen werden sollen. Sobald Sie die Spaltennamen
auswählen, werden diese im Textfeld SQL angezeigt.
4. Aktivieren Sie neben den Anweisungstypen, die erstellt werden sollen, das jeweilige Kontrollkästchen.
5. Klicken Sie auf die Schaltfläche SQL generieren.
136
2.1 Datenbankanleitungen
RAD Studio für .NET
Designer für Datenadapter verwenden
Siehe auch
Überblick zu ADO.NET (
see page 15)
ADO.NET-Komponentendesigner (
see page 23)
Datenbankanwendung mit Windows Forms erstellen
Verbindungseditor verwenden (
see page 139)
Designer für Datenadapter verwenden (
see page 138)
Designer "Datenmenge erzeugen" verwenden (
Datenadapter-Vorschau verwenden (
see page 143)
see page 136)
2.1.16 Designer für Datenadapter verwenden
Der Datenadapter muss mindestens eine SQL-Select-Anweisung mit der Anweisungseigenschaft SELECT enthalten. Sie
können diese Anweisung entweder selbst eingeben oder den Designer Datenadapter dazu verwenden, die Select-Anweisung
zusammen mit den Update-, Insert- und Delete-Anweisungen zu erstellen. Der BdpCommandBuilder erstellt die Update-, Insertund Delete-Anweisungen auf der Basis der von Ihnen ausgewählten Tabellen und Spalten. Der Designer Datenadapter
verwendet eine Live-Verbindung, um die Metadaten abzurufen, auf deren Basis sich die geeigneten SQL-Anweisungen erstellen
lassen. Mit den SQL-Anweisungen werden diejenigen Daten bearbeitet, die Sie aus der Datenmenge zurück in die Datenbank
übertragen möchten.
So rufen Sie die Anweisungen auf:
1. Wählen Sie im Dropdown-Listenfeld Verbindung eine Verbindung aus. Dabei muss es sich um eine bereits von Ihnen
definierte BdpConnection-Komponente handeln. Daraufhin werden die Listenfelder Tabellen und Spalten mit den Daten aus
der Datenbank gefüllt.
2. Wählen Sie im Listenfeld Tabellen eine Tabelle aus.
3. Wählen Sie alle Spalten aus, die in die SQL-Anweisungen übernommen werden sollen.
4. Aktivieren Sie neben den Anweisungstypen, die erstellt werden sollen, das jeweilige Kontrollkästchen.
5. Klicken Sie auf die Schaltfläche SQL generieren.
6. Bearbeiten Sie, falls erforderlich, den generierten Text, oder wählen Sie andere Spalten aus und klicken Sie wieder auf SQL
generieren.
7. Klicken Sie auf OK.
2
Anmerkung: Die Anweisungskomponenten werden automatisch auf der Basis der Auswahl im Dialogfeld erstellt.
Siehe auch
Überblick zu ADO.NET (
see page 15)
ADO.NET-Komponentendesigner (
see page 23)
Datenbankanwendung mit Windows Forms erstellen
Verbindungseditor verwenden (
see page 139)
Anweisungstext-Editor verwenden (
see page 137)
Designer "Datenmenge erzeugen" verwenden (
see page 143)
137
Standarddatenmengen verwenden
RAD Studio für .NET
Datenadapter-Vorschau verwenden (
2.1 Datenbankanleitungen
see page 136)
2.1.17 Verbindungseditor verwenden
Jedes Verbindungsobjekt kann mehrere benannte Verbindungen unterstützen. Dabei kann es sich um Verbindungen zu
mehreren Datenbanken oder Datenbanktypen handeln.
So fügen Sie eine neue Verbindung hinzu:
1. Wählen Sie eine vorhandene BdpConnection-Komponente im Designer aus, oder ziehen Sie eine
BdpConnection-Komponente in den Designer, um ein neues Objekt zu erstellen.
2. Klicken Sie auf das Designer-Register der Komponente am unteren Rand des Objektinspektors, um das Dialogfeld
Verbindungseditor anzuzeigen.
3. Klicken Sie auf Hinzufügen, um das Dialogfeld Neue Verbindung hinzufügen anzuzeigen.
4. Wählen Sie im Dropdown-Listenfeld Provider-Name einen Provider aus.
5. Vergeben Sie für die Verbindung im Textfeld Name der Verbindung einen Namen.
6. Klicken Sie auf OK.
7. Geben Sie die erforderlichen Werte für die betreffende Datenquelle ein.
8. Klicken Sie auf OK.
So entfernen Sie eine Verbindung:
1. Wählen Sie den Verbindungstyp aus.
2. Klicken Sie auf Entfernen. Das Dialogfeld Löschen bestätigen wird geöffnet.
3. Klicken Sie auf Ja.
So benennen Sie eine Verbindung um:
1. Klicken Sie mit der rechten Maustaste auf die Verbindung, und wählen Sie im Kontextmenü Umbenennen.
2. Geben Sie den neuen Namen für die Verbindung ein.
3. Klicken Sie auf OK.
Siehe auch
Überblick zu ADO.NET (
2
see page 15)
ADO.NET-Komponentendesigner (
see page 23)
Optionen für Verbindungs-Pooling (
see page 9)
Datenbankanwendung mit Windows Forms erstellen
Anweisungstext-Editor verwenden (
see page 137)
Designer für Datenadapter verwenden (
see page 138)
Designer "Datenmenge erzeugen" verwenden (
Datenadapter-Vorschau verwenden (
138
see page 143)
see page 136)
2.1 Datenbankanleitungen
RAD Studio für .NET
Standarddatenmengen verwenden
2.1.18 Standarddatenmengen verwenden
Das Standardobjekt DataSet ist eine Arbeitsspeicher-Repräsentation von Tabellen oder Ansichten, die von einer verbundenen
Datenquelle abgerufen werden. Wegen der Art und Weise, in der die zugrunde liegende Datenstruktur programmiert ist, werden
zur Laufzeit nur die Spaltennamen der Datenquelle angezeigt. Wenn Sie eine Datenmenge generieren, werden die Daten aus
allen Spalten abgerufen, die Sie in der Select-Anweisung im Dialogfeld Daten-Adapter-Konfiguration angegeben haben. Sie
können die Spalten beschränken, indem Sie die Select-Anweisung ändern und eine neue Datenmenge erzeugen.
So verwenden Sie Datenmengen:
1. Erzeugen Sie eine Datenmenge.
2. Fügen Sie der Datenmenge mehrere Tabellen hinzu.
3. Definieren Sie primäre Schlüssel (PrimaryKey) für die DataTable-Objekte der Datenmenge.
4. Definieren Sie die Eigenschaften der in der Datenmenge enthaltenen Spalten (Columns).
5. Definieren Sie einschränkende Bedingungen (Constraints) für die Spalten.
6. Definieren Sie die Beziehungen (Relations) zwischen den Tabellen der Datenmenge.
So erzeugen Sie eine Datenmenge:
1. Wählen Sie im Daten-Explorer eine Datenquelle aus.
2. Erweitern Sie das Baumdiagramm, und ziehen Sie dann den Namen einer Tabelle in das Windows Form oder Web Form.
Daraufhin werden für jede Tabelle ein BdpDataAdapter-Objekt und ein gemeinsames BdpConnection-Objekt für diese
Datenquelle erzeugt, die durch entsprechende Symbole in der Komponentenablage repräsentiert werden.
Anmerkung: Sie können auch nur eine Datenquelle anstatt einer Tabelle in das Formular ziehen. In diesem Fall erzeugt
RAD Studio aber nur ein Verbindungsobjekt. Sie müssen das BdpDataAdapter-Objekt dann explizit erstellen und
konfigurieren.
3. Klicken Sie auf das BdpDataAdapter-Symbol (das standardmäßig die Bezeichnung bdpDataAdapter1 trägt), um dieses Objekt
auszuwählen.
4. Klicken Sie auf das Designer Verb Datenadapter konfigurieren, das im Bereich Designer Verb am unteren Rand des
Objektinspektors angezeigt wird. Das Dialogfeld Datenadapter-Konfiguration wird geöffnet.
5. Falls die SQL-Anweisung, die in diesem Dialogfeld bereits angezeigt wird, akzeptabel ist, klicken Sie auf die Registerkarte
DataSet, andernfalls bearbeiten Sie die SQL-Anweisung und klicken danach auf die Registerkarte DataSet.
6. Markieren Sie das Optionsfeld Neues DataSet.
2
Tip: Sie können den vorgegebenen Namen übernehmen oder den Namen der Datenmenge ändern.
7. Klicken Sie auf OK, um die Datenmenge zu erzeugen. In der Komponentenablage wird daraufhin ein DataSet-Symbol
eingeblendet, das anzeigt, dass die Datenmenge erstellt wurde.
Anmerkung: Wenn Sie den Quelltext für die Datenmenge im Quelltexteditor betrachten, können Sie feststellen, dass die
Spalten als generische dataColumns definiert sind, deren columnName-Eigenschaften als Wert jeweils der Spaltenname
einer Datenbanktabelle zugewiesen wird. Dies unterscheidet sich vom Aufbau eines typisierten DataSet-Objekts, bei dem der
Objektname aus dem Datenbankspaltennamen gebildet und nicht als Wert einer Eigenschaft zugewiesen wird.
So fügen Sie einer Datenmenge mehrere Tabellen hinzu:
1. Wählen Sie im Daten-Explorer eine Datenquelle aus.
139
Standarddatenmengen verwenden
RAD Studio für .NET
2.1 Datenbankanleitungen
2. Erweitern Sie das Baumdiagramm, und ziehen Sie dann die Namen mehrerer Tabellen in das Windows Form oder Web
Form. Daraufhin werden für jede Tabelle ein BdpDataAdapter-Objekt und ein gemeinsames BdpConnection-Objekt für diese
Datenquelle erzeugt, die durch entsprechende Symbole in der Komponentenablage repräsentiert werden.
3. Klicken Sie auf das BdpDataAdapter-Symbol (das standardmäßig die Bezeichnung bdpDataAdapter1 trägt), um dieses Objekt
auszuwählen.
4. Klicken Sie auf das Designer Verb Datenadapter konfigurieren, das im Bereich Designer Verb am unteren Rand des
Objektinspektors angezeigt wird. Das Dialogfeld Datenadapter-Konfiguration wird geöffnet.
5. Falls die SQL-Anweisung, die in diesem Dialogfeld bereits angezeigt wird, akzeptabel ist, klicken Sie auf die Registerkarte
DataSet, andernfalls bearbeiten Sie die SQL-Anweisung und klicken danach auf die Registerkarte DataSet.
6. Markieren Sie das Optionsfeld Neues DataSet.
Tip: Sie können den vorgegebenen Namen übernehmen oder den Namen der Datenmenge ändern.
7. Klicken Sie auf OK, um die Datenmenge zu erzeugen. In der Komponentenablage wird daraufhin ein DataSet-Symbol
eingeblendet, das anzeigt, dass die Datenmenge erstellt wurde.
8. Wiederholen Sie die Datenadapter-Konfiguration für jeden der anderen Datenadapter, wobei Sie jedoch bei allen
Datenadaptern mit Ausnahme des zuerst konfigurierten auf der Registerkarte DataSet die Option Vorhandenes DataSet zum
Erzeugen der Datenmenge auswählen. Dadurch wird für jeden Datenadapter ein DataTable-Objekt erstellt. Diese Objekte
werden zusammen in einer Datenmenge gespeichert.
Anmerkung: Es ist auch möglich, mehrere Datenmengen zu erzeugen, wobei entweder jedem Datenadapter eine
Datenmenge oder eine Datenmenge jeweils Kombinationen von DataTable-Objekten zugeordnet werden kann.
So definieren Sie primäre Schlüssel (PrimaryKey) für die DataTable-Objekte der Datenmenge:
1. Wählen Sie die einzelnen Datenadapter nacheinander aus, und stellen Sie die Eigenschaft Active unter Live Data im
Objektinspektor auf True ein.
2. Wählen Sie die Datenmenge in der Komponentenablage aus.
3. Klicken Sie im Objektinspektor auf die Ellipsen-Schaltfläche (...) der Eigenschaft Tables. Das Dialogfeld
Tabellensammlungs-Editor wird geöffnet. Wenn Sie die Eigenschaft Active aller Datenadapter auf True gesetzt haben,
dann enthält der Tabellensammlungs-Editor ein Element für jedes in der zugehörigen Datenmenge gespeicherte
DataTable-Objekt.
4. Wählen Sie in der Liste der Elemente eine Tabelle aus.
5. Klicken Sie im Bereich der Tabelleneigenschaften im Feld PrimaryKey auf den Eintrag DataColumn[], um eine Popup-Liste
mit den Spaltennamen anzuzeigen.
6. Aktivieren Sie das graue Kontrollkästchen neben dem Namen der Spalte(n), die den Primärschlüssel bilden soll(en). Wenn
Sie das graue Kontrollkästchen aktivieren, wird darin die Zahl 1 angezeigt.
2
7. Definieren Sie für die Spalten, die den Primärschlüssel bilden, die Eigenschaften Columns und Constraints.
So definieren Sie die Eigenschaft Columns für die in der Datenmenge enthaltenen Spalten:
1. Klicken Sie im Tabellensammlungs-Editor im Bereich Tabelleneigenschaften auf den Eintrag (Auflistung) neben Spalten.
Daraufhin wird der Spaltensammlungs-Editor für die gewählte Spalte angezeigt.
2. Legen Sie die Eigenschaftswerte für die einzelnen Spalten fest.
3. Wiederholen Sie diese Schritte für jede Spalte.
So definieren Sie Bedingungen für die Spalten:
1. Klicken Sie im Tabellensammlungs-Editor im Bereich Tabelleneigenschaften auf den Eintrag (Auflistung) neben
Einschränkungen. Daraufhin wird der Bedingungssammlungs-Editor für die gewählte Spalte angezeigt.
2. Klicken Sie auf Hinzufügen, und fügen Sie entweder eine Eindeutige Bedingung oder eine Fremdschlüsselbedingung
140
2.1 Datenbankanleitungen
RAD Studio für .NET
Standarddatenmengen verwenden
hinzu.
3. Falls Sie Eindeutige Bedingung ausgewählt haben, wird das Dialogfeld Eindeutige Bedingung angezeigt. Wählen Sie
einen oder mehrere der angezeigten Spaltennamen aus. Sie können auch das Kontrollkästchen Primärschlüssel aktivieren,
wenn die Spalte als Primärschlüssel dienen soll. Wenn Sie einer Spalte die Einstellung Eindeutige Bedingung zuweisen,
dann wird damit die Regel durchgesetzt, dass alle Werte der Spalte eindeutig sein müssen. Dies ist hilfreich bei Spalten, die
Kennungen enthalten, wie z.B. Personalnummern, Sozialversicherungsnummern, Artikelnummern usw.
Anmerkung: Wenn Sie bereits eine Primär-/Fremdschlüsselbeziehung zwischen zwei Tabellen definiert haben, steht eine
Spalte möglicherweise nicht als Primärschlüssel zur Verfügung, da sie u. U. bereits als Primärschlüssel festgelegt wurde oder
da sonst ein Konflikt mit einer anderen Beziehung vorläge.
4. Falls Sie Fremdschlüsselbedingung ausgewählt haben, wird das Dialogfeld Fremdschlüsselbedingung angezeigt. Legen
Sie die miteinander in Beziehung zu setzenden Tabellen fest, indem Sie sie in den Dropdown-Listen Übergeordnete Tabelle
und Untergeordnete Tabelle auswählen.
5. Klicken Sie auf Schlüsselspalten, um die Primärschlüsselspalte aus der Liste auszuwählen.
6. Klicken Sie auf Schlüsselspalten, um die Primärschlüsselspalte aus der Liste auszuwählen.
Warnung: Primärschlüsselspalte und Fremdschlüsselspalte müssen den gleichen Datentyp haben und eindeutige Werte
enthalten. Spalten, die doppelte Werte enthalten können, sind als Primär- oder Fremdschlüssel nicht geeignet. Es ist üblich,
zur Definition der Beziehung zwischen Primär- und Fremdschlüssel in jeder Tabelle den gleichen Spaltennamen
auszuwählen.
So definieren Sie Beziehungen zwischen den Tabellen der Datenmenge:
1. Nachdem Sie die Primärschlüssel für jedes DataTable-Objekt definiert haben, wählen Sie die DataSet-Komponente in der
Komponentenablage aus, sofern sie nicht bereits ausgewählt ist.
2. Klicken Sie im Objektinspektor auf die Ellipsen-Schaltfläche neben der Eigenschaft Relations. Das Dialogfeld
Beziehungskollektions-Editor wird geöffnet.
3. Klicken Sie auf Hinzufügen. Das Dialogfeld Beziehung wird angezeigt.
4. Wählen Sie in den Dropdown-Listen Übergeordnete Tabelle und Untergeordnete Tabelle die Tabellen aus, die Sie
miteinander in Beziehung setzen möchten.
5. Klicken Sie auf das Feld Schlüsselspalten, um eine Primärschlüsselspalte in der Liste der Spaltennamen der
übergeordneten Tabelle auszuwählen.
6. Klicken Sie auf das Feld Fremdschlüsselspalten, um die Fremdschlüsselspalte in der Liste der Spaltennamen der
untergeordneten Tabelle auszuwählen.
Anmerkung: Falls Sie diesen Schritt bereits bei der Definition von Bedingungen für die DataTable-Objekte ausgeführt
haben, dann sind die geeigneten Werte bereits festgelegt.
Warnung: Primärschlüsselspalte und Fremdschlüsselspalte müssen den gleichen Datentyp haben und eindeutige Werte
enthalten. Spalten, die doppelte Werte enthalten können, sind als Primär- oder Fremdschlüssel nicht geeignet. Es ist üblich,
zur Definition der Beziehung zwischen Primär- und Fremdschlüssel in jeder Tabelle den gleichen Spaltennamen
auszuwählen.
7. Klicken Sie auf OK.
8. Wiederholen Sie diese Schritte, um weitere Beziehungen zwischen den gleichen DataTable-Objekten zu definieren.
Siehe auch
Überblick zu ADO.NET (
see page 15)
ADO.NET-Komponentendesigner (
see page 23)
141
2
Typisierte Datenmengen verwenden
RAD Studio für .NET
2.1 Datenbankanleitungen
Datenbankanwendung mit Windows Forms erstellen
Anweisungstext-Editor verwenden (
Verbindungseditor verwenden (
see page 137)
see page 139)
Designer für Datenadapter verwenden (
see page 138)
Datenadapter-Vorschau verwenden (
see page 136)
Typisierte Datenmengen verwenden (
see page 143)
2.1.19 Typisierte Datenmengen verwenden
Typisierte Datenmengen weisen bestimmte Vorteile gegenüber Standarddatenmengen auf. Erstens werden sie von einer
XML-Hierarchie der Zieldatenbanktabelle abgeleitet. Die XML-Datei, die die Beschreibung der Datenmenge enthält, ermöglicht
die Bereitstellung von Funktionen zur Code-Vervollständigung, die beim Einsatz von Standarddatenmengen nicht verfügbar sind.
Die strenge Typisierung der Methoden, Eigenschaften und Ereignissen der Datenmenge lässt eine Typüberprüfung während der
Compilierung zu und führt in manchen Anwendungen zu einem besseren Leistungsverhalten.
So erstellen Sie eine streng typisierte Datenmenge:
1. Wählen Sie im Datenbank-Explorer die zu verwendende Datenquelle aus.
2. Ziehen Sie den Namen der Datenbanktabelle, die Sie verwenden möchten, in das Formular. Daraufhin werden in der
Komponentenablage ein BdpConnection- und ein BdpDataAdapter-Symbol angezeigt.
3. Markieren Sie die BdpDataAdapter-Komponente.
4. Klicken Sie auf das Designer Verb Datenadapter konfigurieren, das im Bereich Designer Verb am unteren Rand des
Objektinspektors angezeigt wird. Das Dialogfeld Datenadapter-Konfiguration wird geöffnet.
5. Bearbeiten Sie bei Bedarf die vorgegebene SQL-Anweisung.
6. Klicken Sie auf OK.
Anmerkung: Erzeugen Sie keine Datenmenge, indem Sie die Registerkarte DataSet
im Dialogfeld Daten-Adapter-Konfiguration aktivieren. Diese Registerkarte ist nur für Standarddatenmengen gültig.
7. Klicken Sie auf das Designer Verb Typisierte Datenmenge erzeugen, das im Bereich Designer Verb am unteren Rand des
Objektinspektors angezeigt wird. Daraufhin wird das Dialogfeld Datenmenge erzeugen geöffnet.
8. Wählen Sie die zu verwendende Datenbanktabelle aus.
2
9. Klicken Sie auf OK. Daraufhin wird eine typisierte Datenmengeninstanz erzeugt und ein Symbol mit der Bezeichnung
<DataSet Name>1 in der Komponentenablage angezeigt. Wenn Sie beispielsweise die Datenmenge DataSet1 verwenden,
heißt die neue Datenmengeninstanz dataSet11. Zudem werden eine XML-Datei mit der Erweiterung XSD und eine neue
Programmdatei in der Projektverwaltung unter dem Projekt angezeigt.
So legen Sie die Spaltenanzeige fest:
1. Nachdem Sie eine neue typisierte Datenmenge erstellt haben, legen Sie eine DataGrid-Komponente auf dem Formular ab.
2. Stellen Sie die Eigenschaft DataSource so ein, dass sie auf die typisierte Datenmenge zeigt, und legen Sie die Eigenschaft
DataMember so fest, dass sie auf die Zieltabelle zeigt.
3. Klicken Sie auf den Eintrag (Auflistung) neben der Eigenschaft TableStyles. Der DataGridTableStyle-Auflistungs-Editor
wird angezeigt.
4. Klicken Sie auf Hinzufügen, um einen neuen Parameter hinzuzufügen.
5. Öffnen Sie die Dropdown-Liste neben der Eigenschaft MappingName.
142
2.1 Datenbankanleitungen
RAD Studio für .NET
Herstellen einer Verbindung zu einer
6. Klicken Sie auf den Eintrag (Auflistung) neben der Eigenschaft GridColumnStyles. Der
DataGridColumnStyle-Auflistungs-Editor wird geöffnet.
7. Klicken Sie auf Hinzufügen, um der Liste der Elemente einen neuen Eintrag hinzuzufügen.
Anmerkung: Standardmäßig wird ein Element vom Typ TextBoxColumn erstellt. Sie können auch auf den Dropdown-Pfeil
neben der Schaltfläche Hinzufügen
klicken, und stattdessen BoolColumn wählen, wenn eine Spalte für Boolesche Daten erzeugt werden soll.
8. Klicken Sie auf die Eigenschaft MappingName, wählen Sie die Spalte aus, die im Gitter angezeigt werden soll, und ändern
Sie dann bei Bedarf weitere Eigenschaften, z.B. den Namen, der zur Laufzeit als Spaltenüberschrift angezeigt wird.
9. Klicken Sie zweimal auf OK.
Anmerkung: Wenn Sie die Anwendung compilieren und ausführen, werden nur diejenigen Spalten angezeigt, die Sie wie
oben beschrieben definiert haben.
So ändern Sie die Struktur der Datenmenge:
1. Doppelklicken Sie in der Projektverwaltung auf die .XSD-Datei, die die XML-Definition der Datenmenge enthält.
2. Bearbeiten Sie die XML-Datei, sodass sie die gewünschte Struktur der Datenmenge beschreibt. Sie können Datentypen,
Namen und alle übrigen Strukturelemente ändern.
3. Falls die Quelltextdatei (<dataset>.cs oder <dataset>.pas) im Quelltext-Editor geöffnet ist, schließen Sie diese jetzt.
4. Wählen Sie Projekt Projekt compilieren, um die .XSD-Datei neu zu compilieren. Wenn Sie die Quelltextdatei dann erneut
öffnen, können Sie feststellen, dass die Datei die Änderungen enthält, die Sie am XML-Code in der .XSD-Datei vorgenommen
haben.
So legen Sie die Eigenschaft Namespace für eine Datenmenge fest:
1. Doppelklicken Sie in der Projektverwaltung auf die .XSD-Datei, die die XML-Definition der Datenmenge enthält.
2. Suchen Sie nach der Eigenschaft targetNamespace.
3. Ändern Sie den folgenden Text in einen gültigen Namespace:
http://www.changeme.now/DataSet1.xsd
4. Falls die Quelltextdatei (<dataset>.cs oder <dataset>.pas) im Quelltext-Editor geöffnet ist, schließen Sie diese jetzt.
5. Wählen Sie Projekt Projekt compilieren, um die .xsd-Datei neu zu compilieren. Wenn Sie die Quelltextdatei dann erneut
öffnen, können Sie feststellen, dass die Klasse InitClass() jetzt den neuen Namespace enthält.
Siehe auch
Überblick zu ADO.NET (
see page 15)
ADO.NET-Komponentendesigner (
see page 23)
2
Datenbankanwendung mit Windows Forms erstellen
Anweisungstext-Editor verwenden (
Verbindungseditor verwenden (
see page 137)
see page 139)
Designer für Datenadapter verwenden (
Datenadapter-Vorschau verwenden (
Standarddatenmengen verwenden (
see page 138)
see page 136)
see page 140)
Anmerkungen mit einer typisierten Datenmenge verwenden
143
Herstellen einer Verbindung zu einer
RAD Studio für .NET
2.1 Datenbankanleitungen
2.1.20 Herstellen einer Verbindung zu einer Datenbank mit
dem dbExpress Treiber-Framework
Diese Anleitung zeigt Ihnen, wie Sie mit dem dbExpress-Treiber-Framework eine Verbindung zu einer Datenbank herstellen und
deren Datensätze lesen können. In dem Beispielcode enthalten die .ini-Dateien von dbExpress alle Informationen über die
spezielle Datenbankverbindung, wie z.B. den Treiber, den Benutzernamen, das Passwort usw.
So verbinden Sie zu einer Datenbank und lesen deren Datensätze:
1. Konfigurieren Sie die ini-Datei der Verbindung mit den Informationen über die Datenbank, zu der Sie eine Verbindung
herstellen möchten. Dazu zählen der Treibernamen, der Benutzername, das Passwort usw.
2. Rufen Sie ein TDBXConnectionFactory-Objekt ab, das von TDBXConnectionFactory.GetConnectionFactory zurückgegeben
wird.
3. Rufen Sie ein TDBXConnection-Objekt ab, das von TDBXConnectionFactory.GetConnection zurückgegeben wird.
4. Öffnen Sie die Datenbankverbindung durch Aufrufen von TDBXConnection.Open für die TDBXConnection-Instanz.
5. Rufen Sie ein TDBXCommand-Objekt ab, indem Sie TDBXConnection.CreateCommand für die TDBXConnection-Instanz
aufrufen.
6. Setzen Sie die Eigenschaft Text von TDBXCommand auf die gewünschten SQL-Anweisung. Rufen Sie
TDBXCommand.Prepare für die TDBXCommand-Instanz auf.
7. Führen Sie die SQL-Abfrage durch Aufrufen von TDBXCommand.ExecuteQuery aus. Eine TDBXReader-Instanz wird
zurückgegeben.
8. Lesen Sie den ersten Datensatz in der Datenbank, indem Sie TDBXReader.Next aufrufen. Rufen Sie diese Methode auf, um
die nachfolgenden Datensätze der Datenbank abzurufen.
9. Ermitteln Sie alle gewünschten Informationen aus der Datenbank. TDBXReader.GetColumnCount gibt beispielsweise die
Anzahl der Spalten in der Datenbank zurück. Die Eigenschaften ValueType und Value von TDBXReader enthalten den
Datentyp und den Wert einer angegebenen Spaltennummer im aktuellen Datensatz.
//
//
//
//
2
Dieses Beispiel verbindet zu einer Datenbank mithilfe von ini-Dateien.
Diese Dateien müssen für die Datenbank konfiguriert sein.
Nachdem Herstellen der Verbindung liest das Beispiel Werte und zeigt die
ANSI-Werte der ersten 100 Datensätze in einem Listenfeld an.
// Abrufen von TDBXConnection mithilfe von TDBXConnectionFactory.
// ConnectionName = Abschnitt in der ini-Datei der Verbindung.
class function TForm1.BuildConnectionFromConnectionName(
ConnectionName: WideString): TDBXConnection;
var
ConnectionFactory: TDBXConnectionFactory;
ConnectionProps: TDBXProperties;
begin
ConnectionFactory := TDBXConnectionFactory.GetConnectionFactory;
ConnectionProps := ConnectionFactory.GetConnectionProperties(ConnectionName);
Result := ConnectionFactory.GetConnection(ConnectionProps,
ConnectionProps.Values[TDBXPropertyNames.UserName],
ConnectionProps.Values[TDBXPropertyNames.Password] );
end;
procedure Connect;
var
connection: TDBXConnection;
command: TDBXCommand;
reader:
TDBXReader;
value: TDBXValue;
144
2.1 Datenbankanleitungen
RAD Studio für .NET
Eine verteilte Datenbankanwendung
valueType: TDBXValueType;
colCountStr: string;
i, j: Integer;
numCols: integer;
ListBox1: TListBox;
const
sqlCommand = 'select * from employee';
begin
// Verbindung zu DB öffnen.
connection := BuildConnectionFromConnectionName('ConnectionName');
connection.Open;
// Befehl abrufen
command := connection.CreateCommand();
command.Text := sqlCommand;
// Abfrage ausführen
command.Prepare;
reader := command.ExecuteQuery;
// Werte aus DB ermitteln
if reader.Next then
begin
numCols := reader.GetColumnCount;
Str(numCols, colCountStr);
ListBox1.Items.Add('Number of columns = ' + colCountStr);
j := 1;
repeat
for i := 0 to reader.GetColumnCount - 1 do
begin
valueType := reader.ValueType[i];
if valueType.DataType = TDBXDataTypes.AnsiStringType then
begin
value := reader.Value[i];
ListBox1.Items.Add(valueType.Name + ' = ' +
value.GetString);
end
else
ListBox1.Items.Add(valueType.Name);
end;
Inc(j);
until (j > 100) or not reader.Next;
reader.Next;
end;
// Ressourcen freigeben
command.Free;
end;
2
2.1.21 Eine verteilte Datenbankanwendung erstellen
Daten-Remoting bildet eine wichtige Grundlage für die Entwicklung verteilter Datenbankanwendungen. Die
.NET-Remoting-Technologie ist ein flexibles und erweiterbares Framework für die Kommunikation zwischen einzelnen
Prozessen. Das .NET-Remoting ermöglicht eine Interaktion mit Objekten, die sich in unterschiedlichen Anwendungsdomänen
befinden oder die zu verschiedenen Prozessen auf einem Computer oder auf mehreren Computern in einem Netzwerk gehören.
Mit Hilfe der Komponenten RemoteServer und RemoteConnection kann eine Client-/Server-Anwendung, in der DataHub- und
DataSync-Komponenten verwendet werden, problemlos in eine mehrschichtige Datenmengen-Remoting-Anwendung migriert
145
Eine verteilte Datenbankanwendung
RAD Studio für .NET
2.1 Datenbankanleitungen
werden. RemoteServer implementiert das Interface IDataService und stellt sich selbst als SAO (Singleton Server Activated
Object) zur Verfügung. Auf der Client-Seite wird über die RemoteConnection-Eigenschaften der URL für die Verbindung zur
RemoteServer-Komponente bereitgestellt. Die Eigenschaft Channel gibt das zu verwendende Protokoll (TCP/IP oder HTTP) an,
die Eigenschaft Port legt den Anschluss fest, an dem die RemoteServer-Komponente Anforderungen empfängt, und die
Eigenschaft URI enthält den eindeutigen Ressourcen-Bezeichner für die RemoteServer-Komponente.
Die Erstellung einer verteilten Anwendung mit Daten-Remoting-Komponenten umfasst folgende Schritte:
• Erstellen einer server-seitigen Windows Forms-Anwendung, die über eine oder mehrere Verbindungen zu einem
BDP.NET-Daten-Provider, eine DataSync-Komponente zur Zusammenfassung der Verbindungen und zur Festlegung des
Übergabeverhaltens sowie über eine RemoteServer-Komponente verfügt, mit der das Kommunikationsprotokoll und der URI
für die Kommunikation mit Clients angegeben werden.
• Erstellen einer client-seitigen Windows Forms-Anwendung, die über eine RemoteConnection-Komponente mit Eigenschaften
für die Festlegung der Verbindung zur server-seitigen Anwendung, eine DataHub-Komponente für die Übergabe von Daten zu
und von einer Datenmenge sowie über eine DataGrid-Komponente verfügt, mit der die Daten angezeigt werden.
Anmerkung: Die RemoteServer-Komponente wird in Windows Forms-Anwendungen aufgenommen, ohne dass weiterer
Quelltext manuell erstellt werden muss.
So erstellen Sie eine Anwendung auf der Server-Seite:
1. Wählen Sie Datei Neu Windows Forms-Anwendung (für Delphi für .NET oder C#). Der Windows Forms-Designer wird
angezeigt.
2. Wählen Sie Ansicht Daten-Explorer, um den Daten-Explorer zu öffnen, und erweitern Sie die Daten-Explorerstruktur,
um die gewünschten Provider und Datenbanktabellen anzuzeigen. Damit die Provider-Knoten erweitert werden können, muss
eine Live-Verbindung vorhanden sein. Wenn dies nicht der Fall ist, müssen Sie möglicherweise den Verbindungsstring
ändern.
3. Ziehen Sie Tabellen von einem oder mehreren Providern in das Formular. Für jede in das Formular gezogene Tabelle wird in
der Komponentenablage eine BdpConnection- und eine BdpDataAdapter-Komponente angezeigt. Wenn Sie mehrere
Tabellen desselben Providers einfügen, ist nur eine BdpConnection-Komponente für diesen Provider erforderlich. Alle
anderen Komponenten dieser Art können gelöscht werden.
4. Konfigurieren Sie jede BdpDataAdapter-Komponente. Die Eigenschaft Active oder DataSet muss nicht gesetzt werden, da die
Datenmenge über die DataHub-Komponente auf der Client-Seite gefüllt wird.
5. Ziehen Sie eine DataSync-Komponente aus der Kategorie Borland Daten-Provider der Tool-Palette in das Formular, und
konfigurieren Sie die folgenden DataSync-Eigenschaften im Objektinspektor:
Eigenschaft
Beschreibung
Providers
Eine Sammlung von Daten-Providern, die als Datenquellen genutzt werden. Klicken Sie auf die
Ellipsen-Schaltfläche, um den Editor für Daten-Provider-Sammlungen zu öffnen, und fügen Sie für jede
Tabelle, die bereitgestellt und aufgelöst werden soll, einen Daten-Provider hinzu.
CommitBehavior Bestimmt die Logik (Atomic, Individual oder ForceIndividual) für die Behandlung von Fehlern, die bei der
Auflösung auftreten.
2
6. Ziehen Sie eine RemoteServer-Komponente aus der Kategorie Borland Daten-Provider der Tool-Palette in das Formular,
und konfigurieren Sie die folgenden RemoteServer-Eigenschaften im Objektinspektor:
Eigenschaft
Beschreibung
DataSync
Gibt die DataSync-Komponente an, für die das Remoting erforderlich
DataSync-Komponente in der Dropdown-Liste im Objektinspektor aus.
AutoStart
Legt fest, ob der externe Server automatisch gestartet wird, wenn die Anwendung ausgeführt wird. Setzen Sie
diese Eigenschaft auf True.
ist.
Wählen
Sie
die
ChannelType Gibt den Typ des Kanals an: Http (HTTP) oder Tcp (TCP/IP). Wählen Sie den Kanaltyp in der Dropdown-Liste
im Objektinspektor aus.
146
2.1 Datenbankanleitungen
RAD Studio für .NET
Eine verteilte Datenbankanwendung
Port
Gibt den Anschluss an, den der externe Server abhört. Geben Sie einen neuen Wert ein, oder übernehmen Sie
den voreingestellten Port-Wert 8000.
URI
Legt den universellen Ressourcen-Bezeichner für den externen Server fest. Per Vorgabe ist die Eigenschaft
URI identisch mit der Eigenschaft Name.
7. Wählen Sie Start Ausführen, um die Anwendung auf der Server-Seite auszuführen.
So erstellen Sie eine Anwendung auf der Client-Seite:
1. Wählen Sie Datei Neu Windows Forms-Anwendung (für Delphi für .NET oder C#). Der Windows Forms-Designer wird
angezeigt.
2. Ziehen Sie eine DataSet-Komponente aus der Kategorie Datenkomponenten der Tool-Palette in das Formular.
3. Ziehen Sie eine DataGrid-Komponente aus der Kategorie Datensteuerung der Tool-Palette in das Formular, und weisen Sie
der Eigenschaft DataSource der DataGrid-Komponente den Namen der hinzugefügten DataSet-Komponente hinzu
(beispielsweise dataSet1).
4. Ziehen Sie eine RemoteConnection-Komponente aus der Kategorie Borland Daten-Provider der Tool-Palette in das
Formular, und konfigurieren Sie die folgenden RemoteConnection-Eigenschaften im Objektinspektor:
Eigenschaft
Beschreibung
ProviderType Legt den Typ des Providers fest, der vom externen Server bereitgestellt wird. In vorliegenden Fall sollte die
Eigenschaft auf Borland.Data.Provider.DataSync gesetzt werden. Wenn der externe Server ausgeführt wird,
können Sie diesen Wert in der Dropdown-Liste auswählen. Andernfalls müssen Sie den Wert eingeben.
ChannelType Gibt den Typ des Kanals an: Http (HTTP) oder Tcp (TCP/IP). Wählen Sie den Kanaltyp in der Dropdown-Liste
im Objektinspektor aus. Der gewählte Typ muss dem Anschlusstyp entsprechen, der für den externen Server
festgelegt wurde.
Host
Der Name oder die IP-Adresse des externen Servers.
Port
Gibt den Anschluss an, den der externe Server abhört. Geben Sie einen neuen Wert ein, oder übernehmen Sie
den voreingestellten Port-Wert 8000. Der gewählte Typ muss dem Anschlusstyp entsprechen, der für den
externen Server festgelegt wurde.
URI
Legt den universellen Ressourcen-Bezeichner für den externen Server fest. Dieser Wert muss der
URI-Eigenschaft für die RemoteServer-Komponente in der Anwendung auf dem externen Server entsprechen.
5. Ziehen Sie eine DataHub-Komponente aus der Kategorie Borland Daten-Provider der Tool-Palette in das Formular, und
konfigurieren Sie die folgenden DataHub-Eigenschaften im Objektinspektor:
Eigenschaft Beschreibung
DataPort
Gibt die Datenquelle an. Weisen Sie der Eigenschaft DataPort die hinzugefügte RemoteConnection-Komponente
zu (beispielsweise RemoteConnection1).
DataSet
Legt die Datenmenge fest, in der die Daten gespeichert werden, die aus der angegebenen Datenquelle
abgerufen werden. Weisen Sie dieser Eigenschaft die hinzugefügte DataSet-Komponente zu (beispielsweise
dataSet1).
6. Wählen Sie Start Ausführen. Die Anwendung wird compiliert und zeigt ein Windows Form mit einem Datengitter an.
Siehe auch
Überblick zu ADO.NET (
see page 15)
Borland-Datenprovider für .NET (
BDP.NET-Komponentendesigner (
see page 28)
see page 23)
Eine Datenbankanwendung für die Auflösung in mehrere Tabellen erstellen (
see page 132)
147
2
Referenzen zu einem COM-Server
RAD Studio für .NET
2.2 Interoperative Anwendungen –
2.2 Interoperative Anwendungen – Anleitungen
Dieser Abschnitt enthält Anleitungen zur Erstellung von interoperativen Anwendungen.
Themen
Name
Hinzufügen einer J2EE-Referenz (
Beschreibung
see page 150)
Referenzen zu einem COM-Server hinzufügen (
RAD Studio stellt ein Möglichkeit zum Erzeugen einer .NET-Assemblierung aus
einem J2EE-Archiv bereit. Nach dem Erstellen der Assemblierung wird
automatisch eine Referenz auf Ihr Projekt hinzugefügt.
see page 150)
2.2.1 Hinzufügen einer J2EE-Referenz
RAD Studio stellt ein Möglichkeit zum Erzeugen einer .NET-Assemblierung aus einem J2EE-Archiv bereit. Nach dem Erstellen
der Assemblierung wird automatisch eine Referenz auf Ihr Projekt hinzugefügt.
So fügen Sie eine J2EE-Referenz hinzu:
1. Klicken Sie in der Projektverwaltung mit der rechten Maustaste auf den Projektknoten der obersten Ebene, und wählen Sie
J2EE-Referenz hinzufügen. Das Dialogfeld J2EE-Archiv auswählen wird angezeigt.
2. Navigieren Sie in dem Dialogfeld J2EE-Archiv auswählen zu der .jar- oder .ear-Datei, aus der die .NET-Assemblierung
erzeugt werden soll.
3. Klicken Sie im Dialogfeld J2EE-Archiv auswählen auf Öffnen. Das Dialogfeld EJBs aus Liste auswählen wird geöffnet.
4. In dem Dialogfeld EJBs aus Liste auswählen können Sie eine Assemblierung für alle EJBs oder nur für einzelne EJBs in
dem Archiv erzeugen.
2.2.2 Referenzen zu einem COM-Server hinzufügen
So fügen Sie eine Referenz zu einem COM-Server hinzu:
1. Klicken Sie in der Projektverwaltung mit der rechten Maustaste auf den Verzeichnisknoten Referenzen des Projekts, und
wählen Sie Referenz hinzufügen.
2
2. Klicken Sie im Dialogfeld Referenz hinzufügen auf die Registerkarte COM-Importe. Die IDE durchsucht dann die
Systemregistrierung nach allen registrierten Typbibliotheken und COM-Servern.
3. Wählen Sie das oder die Elemente aus, für die eine Referenz in das Projekt eingefügt werden soll.
Tip: Sie können mehrere Elemente aus der Liste auswählen, indem Sie die Taste STRG
gedrückt halten und die Elemente nacheinander anklicken. Um einen zusammenhängenden Bereich von Elementen
auszuwählen, klicken Sie auf erste Element und halten die Taste UMSCHALT gedrückt, während Sie auf das zweite Element
klicken.
4. Klicken Sie auf die Schaltfläche Referenz hinzufügen. Alle ausgewählten Elemente werden im Listenfeld Neue Referenzen
im unteren Bereich des Dialogfelds angezeigt.
Tip: Sie können auch Elemente aus dem Listenfeld Neue Referenzen
entfernen. Wählen Sie das bzw. die Elemente aus, und klicken Sie auf die Schaltfläche Entfernen.
148
2.2 Interoperative Anwendungen –
RAD Studio für .NET
Referenzen zu einem COM-Server
5. Wenn die COM-Komponente, die referenziert werden soll, nicht in der Liste enthalten ist, klicken Sie auf die Schaltfläche
Durchsuchen, um eine explizite Referenz auf die gewünschte Komponente hinzuzufügen.
6. Wechseln Sie im Dialogfeld Wählen Sie eine Referenz zu dem Ordner, in dem sich die Komponente befindet.
7. Markieren Sie die Komponente, und klicken Sie auf Öffnen.
8. Sind alle COM-Server ausgewählt, die Sie einfügen möchten, klicken Sie auf OK.
Wenn Sie im Dialogfeld Referenz hinzufügen auf die Schaltfläche OK klicken, generiert die IDE für jedes ausgewählte Element
eine Interop-Assemblierung (sofern nicht bereits eine primäre Interop-Assemblierung erstellt worden ist). Diese
Assemblierungen erhalten den Namen Interop.LibraryName.dll, wobei LibraryName der Name der Typbibliothek der
Komponente ist (dieser Name kann sich vom DLL-Dateinamen des Elements unterscheiden). Die generierten
Assemblierungen werden im Ordner COMImports unter dem Projektverzeichnis gespeichert. Jede generierte
Interop-Assemblierung erhält die Einstellung Lokal kopieren, d.h. beim Erstellen des Projekts wird die Assemblierung
automatisch in den Zielordner des Build kopiert.
Es kann sein, dass der Ordner COMImports nicht vorhanden ist, wenn Sie das Projekt zum Beispiel auf einen anderen
Computer transferieren oder der Ordner auf dem Computer gelöscht wurde, auf dem sich die Projekte befinden. Wenn der
Ordner COMImports beim erneuten Öffnen eines Projekts nicht vorhanden ist, erstellt die IDE diesen neu und erzeugt auch
die Interop-Assemblierungen erneut. Damit dies möglich ist, müssen die COM-Server jedoch zunächst auf dem Computer
registriert werden, auf dem sich die Projekte befinden.
Ist eine primäre Interop-Assemblierung für den COM-Server vorhanden, generiert die IDE keine neue Interop-Assemblierung.
Stattdessen wird eine Referenz auf die primäre Interop-Assemblierung eingefügt und die Einstellung Lokal kopieren wird
deaktiviert, weil das Deployment der primären Interop-Assemblierungen über den globalen Assemblierungs-Cache erfolgt.
Anmerkung: Um die Einstellung Lokal kopieren für eine beliebige referenzierte Assemblierung zu prüfen, klicken Sie in der
Projektverwaltung
mit der rechten Maustaste auf die Assemblierung. Die Einstellung Lokal kopieren ist eine Option im Kontextmenü. Das
Projekt behält die Referenzen auf die Interop-Assemblierungen, auch wenn der Ordner COMImports nicht neu generiert
werden konnte. In diesem Fall wird die betreffende Assemblierung in der Projektverwaltung hervorgehoben dargestellt und
damit angezeigt, dass sie sich aktuell nicht auf dem Computer befindet.
Siehe auch
Überblick zu COM Interop (
see page 41)
ActiveX-Steuerelemente zur Tool-Palette hinzufügen
2
149
Importieren und Exportieren eines Modells
RAD Studio für .NET
2.3 Anleitungen für die Modellierung
2.3 Anleitungen für die Modellierung
Dieser Abschnitt enthält Anleitungen zum Modellieren von Anwendungen.
Themen
Name
Beschreibung
Code-Visualisierungsdiagramme als Grafik exportieren (
see page 152)
Sie können ein Visualisierungsdiagramm als Bild exportieren und dann das Bild
in einem beliebigen Grafik-Viewer öffnen, der das Windows-Bitmap-Dateiformat
(.bmp) unterstützt.
Importieren und Exportieren eines Modells mit XMI Metadata Interchange (XMI)
( see page 153)
RAD Studio unterstützt XMI Version 1.1. Bitte verwenden Sie den Link zur
OMG-Website am Ende dieses Themas, um weitere Informationen über XMI zu
erhalten oder um die vollständige Spezifikation herunterzuladen.
Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms
( see page 154)
Die Code-Visualisierung ermöglicht das Anzeigen und Navigieren in der
logischen Struktur Ihrer Anwendung. Die Projektverwaltung bietet dagegen eine
dateizentrierte Ansicht.
Verwenden des Übersichtsfensters (
Große, reale Modelle passen nicht in das Diagrammfenster. Um das Diagramm
anzuzeigen, können Sie das Übersichtsfenster verwenden.
see page 155)
2.3.1 Code-Visualisierungsdiagramme als Grafik exportieren
Sie können ein Visualisierungsdiagramm als Bild exportieren und dann das Bild in einem beliebigen Grafik-Viewer öffnen, der
das Windows-Bitmap-Dateiformat (.bmp) unterstützt.
So exportieren Sie ein Diagramm als Grafik:
1. Öffnen Sie ein Projekt.
2. Klicken Sie auf die Registerkarte Modellansicht.
3. Klicken Sie mit der rechten Maustaste auf den Diagrammknoten in der Hierarchie, und wählen Sie Als Bild exportieren.
4. Passen Sie bei Bedarf die Zoomeinstellungen an.
5. Klicken Sie auf Speichern.
6. Geben Sie dem Bild einen Namen, und klicken Sie auf Speichern.
Siehe auch
UML-Features in Delphi für .NET
2
Integrierte Modellierungstools - Übersicht
Code-Visualisierung - Überblick (
see page 58)
Importieren und Exportieren eines Modells mit XMI (
see page 153)
Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms (
Verwenden des Übersichtsfensters (
see page 155)
Hinzufügen von Spalten zu einer Komponente
OCL-Ausdruckseditor verwenden
150
see page 154)
2.3 Anleitungen für die Modellierung
RAD Studio für .NET
Verwenden des Modellansichtfensters und
2.3.2 Importieren und Exportieren eines Modells mit XMI
Metadata Interchange (XMI)
RAD Studio unterstützt XMI Version 1.1. Bitte verwenden Sie den Link zur OMG-Website am Ende dieses Themas, um weitere
Informationen über XMI zu erhalten oder um die vollständige Spezifikation herunterzuladen.
So importieren Sie ein Modell im XMI-Format:
1. Exportieren Sie das Modell aus dem Modellierungs-Tool im XMI-Format. Verwenden Sie beim Exportieren aus Rational Rose
XMI Version 1.1 und die Unisys-Erweiterung.
2. Wählen Sie in RAD Studio Datei Neu Weitere.
3. Wählen Sie im Dialogfeld Objektgalerie ECO Windows Forms-Anwendung.
Anmerkung: Wenn Sie eine neue ECO-Anwendung erstellen, können Sie entweder Delphi für .NET oder C# verwenden.
4. Öffnen Sie das Fenster Modellansicht, klicken Sie in der Hierarchie mit der rechten Maustaste auf den obersten
Projektknoten und wählen Sie Projekt aus XMI importieren.
5. Klicken Sie im Dialogfeld XMI importieren auf Durchsuchen, um zu der XMI-Datei zu navigieren, die Sie im ersten Schritt
exportiert haben.
6. Klicken Sie im Dialogfeld XMI importieren auf Importieren.
RAD Studio erzeugt ECO-fähigen, Delphi- oder C#-Quelltext für die Modellelemente in den Klassendiagrammen der XMI-Datei.
So exportieren Sie ein Modell im XMI-Format:
1. Öffnen Sie das Fenster Modellansicht, klicken Sie in der Hierarchie mit der rechten Maustaste auf den obersten
Projektknoten und wählen Sie Projekt nach XMI exportieren.
2. Wählen Sie im Dialogfeld XMI exportieren die für das Tool, mit dem Sie die Modelldatei schlussendlich öffnen werden,
geeignete XMI-Version und XMI-Codierung aus.
3. Klicken Sie auf Durchsuchen, um zu dem Zielordner zu navigieren.
4. Geben Sie eine Zieldateinamen für die exportierte Datei ein.
5. Klicken Sie im Dialogfeld XMI exportieren auf Exportieren.
Siehe auch
Website der Object Management Group (OMG)
2
UML-Features in Delphi für .NET
Integrierte Modellierungstools - Übersicht
Code-Visualisierung - Überblick (
see page 58)
Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms (
Verwenden des Übersichtsfensters (
see page 154)
see page 155)
Hinzufügen von Spalten zu einer Komponente
OCL-Ausdruckseditor verwenden
151
Verwenden des Modellansichtfensters und
RAD Studio für .NET
2.3 Anleitungen für die Modellierung
2.3.3 Verwenden des Modellansichtfensters und des
Code-Visualisierungsdiagramms
Die Code-Visualisierung ermöglicht das Anzeigen und Navigieren in der logischen Struktur Ihrer Anwendung. Die
Projektverwaltung bietet dagegen eine dateizentrierte Ansicht.
So zeigen Sie das Modellansichtfenster an:
1. Beginnen Sie ein neues Projekt oder laden Sie ein bestehendes.
2. Wählen Sie Ansicht Modellansicht. Das Fenster Modellansicht wird geöffnet. Es zeigt die Elemente Ihres Projekts in einer
Hierarchie an.
Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms
Verschachtelte
Elemente
in
einem Klicken Sie auf das Pluszeichen (+) neben dem Symbol des Elements, um
UML-Package, einer Klasse oder einem verschachtelte Elemente einzublenden, oder klicken Sie auf das Minuszeichen (-),
Interface ein- oder ausblenden.
um erschachtelte Elemente auszublenden.
Anzeigen
Code-Visualisierungsdiagramms
einen
.NET-Namespace
oder
Delphi-Unit
eines Erweitern Sie das Symbol des Namespace oder der Unit ( ), und doppelklicken
für Sie in der Modellhierarchie auf das Diagrammsymbol ( ).
eine
Anzeigen
des Erweitern Sie in der Modellhierarchie das Projektsymbol ( ), und doppelklicken
Code-Visualisierungsdiagramms für das auf das Diagrammsymbol.
gesamte Projekt
Öffnen des Quelltext-Editors für ein Klicken Sie mit der rechten Maustaste auf das Element, und wählen Sie Quelle
bestimmtes
Element
in
der öffnen. Beachten Sie, dass sich ein .NET-Namespace über mehrere
Quelltextdateien erstrecken kann. Sie können eine Quelltextdatei für einen
Modellhierarchie
Namespace nicht direkt aus der Modellhierarchie öffnen.
Öffnen
des Klicken Sie mit der rechten Maustaste auf das Element, und wählen Sie Im
Code-Visualisierungsdiagramms für ein Diagramm anzeigen.
bestimmtes
Element
in
der
Modellhierarchie
2
Das Code-Visualisierungsdiagramm verfügt über eine Reihe von Funktionen zum Anzeigen von großen Modellen, Ein- oder
Ausblenden von Attributen, Eigenschaften, usw. und zum direkten Wechseln von der grafischen Darstellung eines Elements im
Diagramm zum entsprechenden Quelltext.
Verwenden des Code-Visualisierungsdiagramms
Neuanordnen
Diagramm
von
Elementen
im Klicken Sie auf das Element und ziehen Sie es an die neue Position.
Ein- oder Ausblenden der Attribute, Klicken Sie auf das Pluszeichen (+) neben der Kategorie (Attribute, Operationen, etc.),
Operationen,
Eigenschaften
und die Sie einblenden möchten. Klicken Sie auf das Minuszeichen (-), um die Elemente
verschachtelten
Typen
für
ein einer bestimmten Kategorie auszublenden.
Element im Diagramm
Ausführen
eines
Layouts für die
Diagramm
152
automatischen Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im
Elemente im Code-Visualisierungsdiagramm, und wählen Sie Layout Vollständiges Layout
oder Layout Größen optimieren.
2.3 Anleitungen für die Modellierung
RAD Studio für .NET
Drucken des Diagramms
Verwenden des Übersichtsfensters
Klicken Sie mit der rechten Maustaste auf eine
Code-Visualisierungsdiagramm, und wählen Sie Drucken.
beliebige
Stelle
im
Öffnen des Quelltext-Editors für ein Klicken Sie mit der rechten Maustaste auf das Element, und wählen Sie Zur Definition
bestimmtes
Element
im gehe.
Code-Visualisierungsdiagramm
Speichern des Diagramms als Bild
Klicken Sie mit der rechten Maustaste auf eine beliebige
Code-Visualisierungsdiagramm, und wählen Sie Als Bild exportieren.
Stelle
im
Anmerkung: Mit Ausnahme von "Code-Visualisierung - Überblick" und "Verwenden des Übersichtsfensters" stehen die unten
aufgeführten Links nur für die Architect-Edition von RAD Studio zur Verfügung.
Siehe auch
Code-Visualisierung - Überblick (
see page 58)
Verwenden des Übersichtsfensters (
see page 155)
UML-Features in Delphi für .NET
Integrierte Modellierungstools - Übersicht
Importieren und Exportieren eines Modells mit XMI (
see page 153)
Erstellen einer ECO-fähigen Benutzeroberfläche
Hinzufügen von Spalten zu einer Komponente
OCL-Ausdruckseditor verwenden
2.3.4 Verwenden des Übersichtsfensters
Große, reale Modelle passen nicht in das Diagrammfenster. Um das Diagramm anzuzeigen, können Sie das Übersichtsfenster
verwenden.
So blättern Sie mit dem Übersichtsfenster durch das Modell:
1. Klicken Sie in der rechten, unteren Ecke des Diagramms auf die Schaltfläche Übersicht. Eine Miniaturansicht des gesamten
Diagramms wird ein einem eigenen Fenster angezeigt. Ein kleines Rechteck im Übersichtsfenster enthält den Bereich des
Modells, der aktuell im Diagramm angezeigt wird.
2. Klicken Sie im Übersichtsfenster auf das Rechteck und verschieben Sie es, um dynamisch den gewünschten Teil des
Diagramms anzuzeigen.
2
3. Klicken Sie an eine beliebige Stelle außerhalb des Übersichtsfensters, um es zu schließen.
Tip: Das Übersichtsfenster
hat in der oberen, rechten Ecke ein Griffsymbol zum Ändern der Größe. Klicken Sie auf dieses Symbol und ziehen Sie es,
um die Größe des Übersichtsfensters zu ändern. Beim Ändern der Größe des Fensters wird der Inhalt an die aktuelle Größe
angepasst.
Das Ändern der Größe ist dann sinnvoll, wenn das Modell so groß ist, dass Sie den Text auf den Miniaturdarstellungen im
Übersichtsfenster nicht lesen können.
Anmerkung: Mit Ausnahme von "Code-Visualisierung - Überblick" und "Verwenden des Modellansichtfensters und des
Code-Visualisierungsdiagramms" stehen die unten aufgeführten Links nur für die Architect-Edition von RAD Studio zur
Verfügung.
153
Verwenden des Übersichtsfensters
RAD Studio für .NET
2.3 Anleitungen für die Modellierung
Siehe auch
Code-Visualisierung - Überblick (
see page 58)
Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms (
UML-Features in Delphi für .NET
Integrierte Modellierungstools - Übersicht
Importieren und Exportieren eines Modells mit XMI (
Hinzufügen von Spalten zu einer Komponente
OCL-Ausdruckseditor verwenden
2
154
see page 153)
see page 154)
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
Dieser Abschnitt enthält Anleitungen zur Entwicklung von VCL.NET-Anwendungen.
Themen
Name
Beschreibung
VCL-Formularanwendungen mit Grafiken erstellen (
see page 161)
Mit jedem der nachfolgend beschriebenen Verfahren wird eine
VCL-Formularanwendung erstellt, in der Grafiken verwendet werden. Erstellen
Sie eines oder mehrere dieser Beispiele. *
1. Gerade Linien zeichnen
2. Rechtecke und Ellipsen zeichnen
3. Ein Polygon zeichnen
4. Eine Bitmap-Grafik anzeigen
5. Eine Bitmap-Grafik in ein Kombinationsfeld einfügen
ADO.NET-Datenbankanwendungen mit VCL.NET-Formularen erstellen (
page 161)
see
In der folgenden Anleitung wird beschrieben, wie eine
ADO.NET-Datenbankanwendung erstellt wird.
Die Erstellung einer VCL.NET-ADO.NET-Anwendung umfasst die folgenden
grundlegenden Schritte:
1. Die Datenbankverbindung einrichten.
2. Die Datenmenge einrichten.
3. Datenprovider, Client-Datenmenge und Datenquelle
einrichten.
4. Eine DataGrid-Komponente mit den
Verbindungskomponenten verbinden.
5. Die Anwendung ausführen.
VCL-Formularanwendung erstellen (
see page 163)
Aktionen in einer VCL-Formularanwendung erstellen (
Im Folgenden werden die wichtigsten Schritte zum Erstellen einer
VCL-Formularanwendung in RAD Studio erläutert.
see page 163)
Die folgenden Anleitungen veranschaulichen, wie in RAD Studio Aktionen mit
dem Editor für Aktionslisten erstellt werden. Es wird eine einfache Anwendung
angelegt und die Erstellung eines Menüs namens Bearbeiten mit den Befehlen
Ausschneiden und Einfügen beschrieben, mit denen Daten aus einem
Memofeld ausgeschnitten und wieder darin eingefügt werden können.
Die Erstellung der VCL-Anwendung umfasst die folgenden grundlegenden
Schritte:
1. Hauptmenü, Aktionsliste und Memofeld einem Formular
hinzufügen.
2. Aktionen für das Ausschneiden und Einfügen erstellen.
3. Die Aktionen zum Hauptmenü hinzufügen und mit der
Aktionskategorie für das Menü Bearbeiten verknüpfen.
4. Die Anwendung compilieren und ausführen.
155
2
RAD Studio für .NET
VCL-Formularanwendung "Hello World" erstellen (
see page 165)
2.4 VCL für .NET – Anleitungen
Anhand der Windows Forms-Anwendung Hello World werden die Schritte
erläutert, die für die Erstellung einer VCL-Formulare-Anwendung ausgeführt
werden müssen. Die Anwendung verwendet ein VCL-Formular, ein
Steuerelement und ein Ereignis und zeigt als Antwort auf eine Benutzeraktion ein
Dialogfeld an.
Um die Anwendung Hello World zu erstellen, sind die folgenden Schritte
erforderlich:
1. Ein VCL.NET-Formular mit einer Schaltfläche erstellen.
2. Quelltext einfügen, damit "Hello World" angezeigt wird,
wenn auf die Schaltfläche geklickt wird.
3. Die Anwendung ausführen.
Mit dem Aktionsmanager Aktionen in einer VCL-Formularanwendung erstellen
( see page 166)
Die folgende Anleitung veranschaulicht, wie in RAD Studio Aktionen mit dem
Aktionsmanager erstellt werden. Zu diesem Zweck wird eine einfache
Benutzeroberfläche mit einem Bereich zur Textbearbeitung erstellt und
beschrieben, wie im Dateimenü ein Befehl zum Öffnen von Dateien erzeugt wird.
Die Erstellung der VCL-Anwendung mit Aktionsmanager-Aktionen umfasst die
folgenden grundlegenden Schritte:
1. Dem Aktionsmanager in einem Formular eine
Datei-Öffnen-Aktion hinzufügen.
2. Das Hauptmenü erstellen.
3. Die Aktion dem Menü hinzufügen.
4. Die Anwendung compilieren und ausführen.
dbExpress.NET-Datenbankanwendungen mit VCL-Formularen erstellen (
page 167)
see
In den folgenden Anleitungen wird beschrieben, wie eine
dbExpress-Datenbankanwendung erstellt wird.
Die Erstellung einer dbExpress.NET-Datenbankanwendung mit VCL-Formularen
umfasst die folgenden grundlegenden Schritte:
1. Die Datenbankverbindung einrichten.
2. Die unidirektionale Datenmenge einrichten.
3. Datenprovider, Client-Datenmenge und Datenquelle
einrichten.
4. Eine DataGrid-Komponente mit den
Verbindungskomponenten verbinden.
5. Die Anwendung ausführen.
Anwendungen mit XML-Komponenten erstellen (
see page 169)
Ausführen von Änderungen, die wegen der Unterstützung von 64-Bit .NET 2.0
erforderlich sind ( see page 171)
In diesem Beispiel wird eine VCL-Formulare-Anwendung erstellt, die mit Hilfe
einer XMLDocument-Komponente den Inhalt einer XML-Datei anzeigt.
Für die Unterstützung von 64-Bit .NET 2.0 waren einige Änderungen erforderlich.
Wegen dieser Änderungen könnten kleinere Quelltextänderungen erforderlich
werden, damit vorhandene Anwendungen korrekt arbeiten. Dieses Thema
beschreibt die Änderungen im Detail. Es gibt zwei allgemeine Bereiche:
1. Geänderte Quelltext-Pattern
2
2. Windows API-Deklarationen für einen Callbacks und
Records
Warnung: Diese Modifikationen sind wegen der
Änderungen zur Unterstützung von 64-Bit-Systemen
erforderlich. Sie müssen für Anwendungen vorgenommen
werden, die sowohl auf 32-Bit- als auch auf
64-Bit-Systemen ausgeführt werden sollen.
Eine neue VCL.NET-Komponente erstellen (
156
see page 174)
Mit dem Experten für neue VCL-Komponenten können Sie eine neue
VCL.NET-Komponente erstellen und der Tool-Palette hinzufügen.
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
Bitmap-Grafik in einer VCL-Formularanwendung anzeigen (
see page 175)
VCL-Formularanwendungen mit Grafiken
Mit den folgenden Schritten wird eine Bitmap-Grafik aus einer Datei geladen und
in einem VCL-Formular angezeigt:
1. Ein VCL-Formular mit einer Schaltfläche erstellen.
2. Eine Bitmap-Grafik bereitstellen.
3. Quelltext für die OnClick-Ereignisbehandlungsroutine der
Schaltfläche schreiben, um eine Bitmap-Grafik zu laden
und anzuzeigen.
4. Die Anwendung compilieren und ausführen.
Rechtecke und Ellipsen in einer VCL-Formularanwendung zeichnen (
176)
see page Mit den folgenden Schritten werden ein Rechteck und eine Ellipse in einem
VCL-Formular gezeichnet:
1. Ein VCL-Formular erstellen.
2. Eine Behandlungsroutine für das OnPaint-Ereignis des
Formulars schreiben, die ein Rechteck und eine Ellipse
zeichnet.
3. Die Anwendung compilieren und ausführen.
Abgerundete Rechtecke in einer VCL-Formularanwendung zeichnen (
page 177)
see
Mit den folgenden Schritten wird ein abgerundetes Rechteck in einem
VCL-Formular gezeichnet:
1. Ein VCL-Formular erstellen.
2. Eine Behandlungsroutine für das OnPaint-Ereignis des
Formulars schreiben, die ein Polygon zeichnet.
3. Die Anwendung compilieren und ausführen.
Gerade Linien in einer VCL-Formularanwendung zeichnen (
see page 177)
Mit den folgenden Schritten werden zwei diagonal verlaufende gerade Linien in
einem VCL-Formular gezeichnet:
1. Ein VCL-Formular erstellen.
2. Eine Behandlungsroutine für das OnPaint-Ereignis des
Formulars schreiben, die die geraden Linien zeichnet.
3. Die Anwendung compilieren und ausführen.
Bitmap-Grafik in ein Steuerelement einer VCL-Formularanwendung einfügen (
see page 178)
Mit den folgenden Schritten wird eine Bitmap-Grafik in ein Kombinationsfeld in
einer VCL-Formularanwendung eingefügt:
1. Ein VCL-Formular erstellen.
2. Komponenten auf dem Formular platzieren.
3. Eigenschaften der Komponenten im Objektinspektor
festlegen.
4. Ereignisbehandlungsroutinen für die Zeichenaktion der
Komponente schreiben.
2
5. Die Anwendung compilieren und ausführen.
.NET-Steuerelemente in VCL.NET importieren (
see page 180)
Es kann Fälle geben, in denen Sie .NET-Komponenten in VCL.NET-Formularen
einsetzen möchten. .NET-Komponenten können nicht direkt in
VCL-Anwendungen aufgenommen werden. Sie können diese Komponenten
jedoch in einen ActiveX-Wrapper verpacken, den Sie dann der
VCL.NET-Anwendung hinzufügen. RAD Studio stellt hierfür den
.NET-Importexperten zur Verfügung.
2.4.1 VCL-Formularanwendungen mit Grafiken erstellen
Mit jedem der nachfolgend beschriebenen Verfahren wird eine VCL-Formularanwendung erstellt, in der Grafiken verwendet
werden. Erstellen Sie eines oder mehrere dieser Beispiele. *
157
ADO.NET-Datenbankanwendungen mit
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
1. Gerade Linien zeichnen
2. Rechtecke und Ellipsen zeichnen
3. Ein Polygon zeichnen
4. Eine Bitmap-Grafik anzeigen
5. Eine Bitmap-Grafik in ein Kombinationsfeld einfügen
Siehe auch
Überblick zu VCL.NET (
see page 77)
Gerade Linien in einer VCL-Formularanwendung zeichnen (
see page 177)
Rechtecke und Ellipsen in einer VCL-Formularanwendung zeichnen (
Abgerundete Rechtecke in einer VCL-Anwendung zeichnen (
Bitmap-Grafik in einer VCL-Formularanwendung anzeigen (
see page 176)
see page 177)
see page 175)
Eine Bitmap-Grafik in ein Kombinationsfeld einer VCL-Formularanwendung einfügen (
see page 178)
2.4.2 ADO.NET-Datenbankanwendungen mit
VCL.NET-Formularen erstellen
In der folgenden Anleitung wird beschrieben, wie eine ADO.NET-Datenbankanwendung erstellt wird.
Die Erstellung einer VCL.NET-ADO.NET-Anwendung umfasst die folgenden grundlegenden Schritte:
1. Die Datenbankverbindung einrichten.
2. Die Datenmenge einrichten.
3. Datenprovider, Client-Datenmenge und Datenquelle einrichten.
4. Eine DataGrid-Komponente mit den Verbindungskomponenten verbinden.
5. Die Anwendung ausführen.
So fügen Sie eine ADO-Verbindungskomponente hinzu:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung. Der VCL-Formular-Designer
wird angezeigt.
2. Ziehen Sie aus der Kategorie dbGO der Tool-Palette eine TADOConnection-Komponente in das Formular.
2
3. Doppelklicken Sie auf die TADOConnection-Komponente, um das Dialogfeld Verbindungs-String zu öffnen.
4. Wählen Sie bei Bedarf Verbindungs-String verwenden, und klicken Sie dann auf die Schaltfläche Aufbauen, um das
Dialogfeld Verknüpfungseigenschaften anzuzeigen.
5. Wählen Sie auf der Seite Provider des Dialogfelds Microsoft Jet 4.0 OLE DB Provider aus, und klicken Sie auf die
Schaltfläche Weiter, um die Seite Verbindungen anzuzeigen.
6. Klicken Sie auf der Seite Verbindungen auf die Ellipsen-Schaltfläche, und wechseln Sie zum Verzeichnis mit der Datenbank
dbdemos.mdb. Der Standardpfad zu dieser Datenbank lautet C:\Programme\Gemeinsame Dateien\Borland
Shared\Data.
7. Geben Sie Admin in das Feld Benutzername ein (falls dieser Eintrag nicht bereits vorhanden ist), und aktivieren Sie das
Kontrollkästchen für ein leeres Passwort.
8. Klicken Sie auf Verbindung testen, um die Verbindung zu überprüfen. Der Verbindungsstatus wird in einem Dialogfeld
angezeigt.
158
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
VCL-Formularanwendung erstellen
9. Klicken Sie zweimal auf OK, um die Dialogfelder Verknüpfungseigenschaften und Verbindungs-String zu schließen.
So richten Sie die Datenmenge ein:
1. Doppelklicken Sie in der Kategorie dbGO auf eine TADODataSet-Komponente, um diese in das Formular einzufügen.
2. Weisen Sie im Objektinspektor der Eigenschaft Connection aus der Kategorie Linkages den Wert ADOConnection1 zu.
3. Weisen Sie der Eigenschaft CommandText einen SQL-Befehl zu, beispielsweise Select * from orders. Sie können
diese Select-Anweisung entweder direkt im Objektinspektor eingeben oder sie mit Hilfe des Anweisungstext-Editors
formulieren. Sie öffnen diesen Editor, indem Sie auf die Ellipsenschaltfläche rechts neben CommandText klicken.
Tip: Wenn Sie Hilfe bei der Verwendung des Anweisungstext-Editors
benötigen, klicken Sie auf die Schaltfläche Hilfe oder drücken F1.
4. Setzen Sie die Eigenschaft Active auf True, um die Datenmenge zu öffnen. Sie werden aufgefordert, sich anzumelden.
5. Geben Sie als Benutzernamen Admin ein.
6. Lassen Sie das Feld für das Passwort leer.
So fügen Sie den Provider hinzu:
1. Doppelklicken Sie in der Kategorie Datenzugriff der Tool-Palette auf eine TDataSetProvider-Komponente, um sie am Beginn
des Formulars einzufügen.
2. Setzen Sie im Objektinspektor die Eigenschaft DataSet auf ADODataSet1.
So fügen Sie eine Client-Datenmenge hinzu:
1. Doppelklicken Sie in der Kategorie Datenzugriff der Tool-Palette auf eine TClientDataSet-Komponente, um sie rechts neben
der DataSetProvider-Komponente in das Formular einzufügen.
2. Setzen Sie im Objektinspektor die Eigenschaft ProviderName auf DataSetProvider1.
3. Setzen Sie die Eigenschaft Active auf True, damit Daten an die Anwendung übergeben werden können. Eine Datenquelle
stellt eine Verbindung mit einer Clientdatenmenge über datensensitive Steuerelemente her. Jedes datensensitive
Steuerelement muss mit einer Datenquellenkomponente verknüpft sein, damit Daten zum Anzeigen und Bearbeiten zur
Verfügung stehen. Ebenso müssen alle Datenmengen mit einer Datenquellenkomponente verknüpft sein, damit ihre Daten in
datensensitiven Steuerelementen des Formulars angezeigt und bearbeitet werden können.
So fügen Sie die Datenquelle hinzu:
1. Doppelklicken Sie in der Kategorie Datenzugriff der Tool-Palette auf eine TDataSource-Komponente, um sie rechts neben
der ClientDataSet-Komponente in das Formular einzufügen.
2. Setzen Sie im Objektinspektor die Eigenschaft DataSet auf ClientDataSet1.
So verbinden Sie ein Datengitter mit der Datenmenge:
1. Doppelklicken Sie im Bereich Datensteuerung der Tool-Palette auf eine TDBGrid-Komponente, um sie in das Formular
einzufügen.
2
2. Setzen Sie im Objektinspektor die Eigenschaft DataSource auf DataSource1.
3. Wählen Sie Start Ausführen. Sie werden aufgefordert, sich anzumelden.
4. Geben Sie als Benutzernamen Admin ein.
5. Lassen Sie das Feld für das Passwort leer.
6. Klicken Sie auf OK. Die Anwendung wird compiliert und zeigt ein VCL-Formular mit einer DBGrid-Komponente an.
Siehe auch
Überblick zu VCL.NET (
see page 77)
dbExpress.NET-Datenbankanwendungen mit VCL-Formularen erstellen (
see page 167)
159
Aktionen in einer VCL-Formularanwendung
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
2.4.3 VCL-Formularanwendung erstellen
Im Folgenden werden die wichtigsten Schritte zum Erstellen einer VCL-Formularanwendung in RAD Studio erläutert.
So erstellen Sie ein VCL-Formular:
1. Wählen Sie Datei Neu Weitere. Das Dialogfeld Objektgalerie wird geöffnet.
2. Wählen Sie Delphi für .NET-Projekte.
3. Doppelklicken Sie auf das Symbol VCL-Formularanwendung. Der VCL-Formular-Designer wird angezeigt.
4. Ziehen Sie Komponenten aus der Tool-Palette in das Formular, um die Benutzeroberfläche zu erstellen.
5. Geben Sie den Quelltext für die Steuerelemente ein.
So verbinden Sie Quelltext mit einem Steuerelement:
1. Doppelklicken Sie im Formular auf eine Komponente. Der Quelltext-Editor wird angezeigt. Der Cursor befindet sich bereits
zwischen den Klammern der Ereignisbehandlungsroutine.
2. Geben Sie den Quelltext für die Anwendungslogik ein.
3. Speichern und compilieren Sie die Anwendung.
Siehe auch
Überblick zu VCL.NET (
see page 77)
2.4.4 Aktionen in einer VCL-Formularanwendung erstellen
Die folgenden Anleitungen veranschaulichen, wie in RAD Studio Aktionen mit dem Editor für Aktionslisten erstellt werden. Es
wird eine einfache Anwendung angelegt und die Erstellung eines Menüs namens Bearbeiten mit den Befehlen Ausschneiden
und Einfügen beschrieben, mit denen Daten aus einem Memofeld ausgeschnitten und wieder darin eingefügt werden können.
Die Erstellung der VCL-Anwendung umfasst die folgenden grundlegenden Schritte:
1. Hauptmenü, Aktionsliste und Memofeld einem Formular hinzufügen.
2. Aktionen für das Ausschneiden und Einfügen erstellen.
3. Die Aktionen zum Hauptmenü hinzufügen und mit der Aktionskategorie für das Menü Bearbeiten verknüpfen.
2
4. Die Anwendung compilieren und ausführen.
So fügen Sie Hauptmenü, Aktionsliste und Memofeld einem Formular hinzu:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung, um ein neues Formular zu
erstellen.
2. Klicken Sie auf die Registerkarte Design, um zum VCL-Formular-Designer zu wechseln.
3. Ziehen Sie aus der Kategorie Standard der Tool-Palette eine TMainMenu-, TActionList- und eine TMemo-Komponente in
das Formular.
So definieren Sie die Aktionen:
1. Doppelklicken Sie im Formular auf ActionList1. Der Aktionslisten-Editor wird geöffnet.
2. Wählen Sie den Eintrag Neue Standardaktion aus der Dropdown-Liste, um das Dialogfeld Standardaktionsklassen zu
160
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
VCL-Formularanwendung "Hello World"
öffnen.
3. Blättern Sie zur Aktion TEditCut, markieren Sie sie, und klicken Sie auf OK. Im Editor wird in der Aktionsliste EditCut1
angezeigt.
4. Wählen Sie den Eintrag Neue Standardaktion aus der Dropdown-Liste, um das Dialogfeld Standardaktionsklassen zu
öffnen.
5. Blättern Sie zur Aktion TEditPaste, markieren Sie sie, und klicken Sie auf OK. Im Editor wird in der Liste Aktionen
EditPaste1 angezeigt.
6. Schließen Sie den Aktionslisten-Editor.
So fügen Sie die Aktionen Ausschneiden und Einfügen der Kategorie Bearbeiten des Hauptmenüs hinzu:
1. Doppelklicken Sie im Formular auf die MainMenu1-Komponente. Der Editor für MainMenu1 wird angezeigt. Die erste leere
Befehlskategorie ist ausgewählt.
2. Geben Sie im Objektinspektor für die Eigenschaft Caption den Wert Bearbeiten ein, und drücken Sie die EINGABETASTE.
Bearbeiten wird jetzt als erste Befehlskategorie angezeigt.
3. Klicken Sie auf Bearbeiten, um unmittelbar darunter eine leere Aktion anzuzeigen.
4. Klicken Sie auf die leere Aktion, um sie auszuwählen.
5. Wählen Sie im Objektinspektor in der Dropdown-Liste mit den Aktionen für die Eigenschaft Action (Kategorie Linkage) den
Eintrag EditCut1.
6. Erweitern Sie, falls erforderlich, die Liste der Eigenschaften unter Action, geben Sie für die Eigenschaft Caption den Wert
Ausschneiden und als Kategorie Bearbeiten ein, und drücken Sie dann die EINGABETASTE. Ausschneiden wird jetzt als
erste Aktion angezeigt.
7. Klicken Sie im Editor für MainMenu1 auf die zweite leere Aktion unterhalb von Ausschneiden, um sie auszuwählen.
8. Wählen Sie im Objektinspektor in der Dropdown-Liste mit den Aktionen für die Eigenschaft Action (Kategorie Linkage) den
Eintrag EditPaste.
9. Erweitern Sie die Liste der Eigenschaften unter Action, und geben Sie (falls erforderlich) für die Eigenschaft Caption den Wert
Einfügen und als Kategorie Bearbeiten ein. Drücken Sie danach die EINGABETASTE. Einfügen wird jetzt als zweite
Aktion angezeigt.
So compilieren Sie die Anwendung und führen sie aus:
1. Speichern Sie alle Dateien des Projekts.
2. Wählen Sie Start Ausführen. Die Anwendung wird ausgeführt und zeigt ein Formular mit der Hauptmenüleiste und dem
Menü Bearbeiten an.
3. Markieren Sie Text im Memofeld.
4. Wählen Sie Bearbeiten Ausschneiden. Der Text wird aus dem Memofeld ausgeschnitten.
5. Wählen Sie Bearbeiten Einfügen. Der Text wird wieder in das Memofeld eingefügt.
2
Siehe auch
Überblick zu VCL.NET (
see page 77)
VCL-Formularanwendung erstellen (
see page 163)
2.4.5 VCL-Formularanwendung "Hello World" erstellen
Anhand der Windows Forms-Anwendung Hello World werden die Schritte erläutert, die für die Erstellung einer
VCL-Formulare-Anwendung ausgeführt werden müssen. Die Anwendung verwendet ein VCL-Formular, ein Steuerelement und
ein Ereignis und zeigt als Antwort auf eine Benutzeraktion ein Dialogfeld an.
161
Mit dem Aktionsmanager Aktionen in einer
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
Um die Anwendung Hello World zu erstellen, sind die folgenden Schritte erforderlich:
1. Ein VCL.NET-Formular mit einer Schaltfläche erstellen.
2. Quelltext einfügen, damit "Hello World" angezeigt wird, wenn auf die Schaltfläche geklickt wird.
3. Die Anwendung ausführen.
So erstellen Sie ein VCL-Formular:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung. Der VCL-Formular-Designer
wird angezeigt.
2. Klicken Sie auf die Registerkarte Design, um in die Design-Ansicht zu wechseln.
3. Ziehen Sie aus der Kategorie Standard der Tool-Palette eine TButton-Komponente in das Formular.
So zeigen Sie den String "Hello World" an:
1. Markieren Sie im Formular das Steuerelement Button1.
2. Doppelklicken Sie im Objektinspektor auf das Ereignis OnClick auf der Registerkarte Ereignisse. Der Quelltext-Editor wird
angezeigt. Der Cursor befindet sich bereits im Block der Ereignisbehandlungsroutine TForm1.Button1Click.
3. Bewegen Sie den Cursor vor das reservierte Wort begin, und drücken Sie dann die EINGABETASTE. Über dem Codeblock
wird eine neue Zeile eingefügt.
4. Bewegen Sie den Cursor in die neue Zeile, und geben Sie die folgende Variablendeklaration ein:
var s: string;
5. Bewegen Sie den Cursor in den Codeblock, und geben Sie folgenden Quelltext ein:
s:= 'Hello World!';
ShowMessage(s);
So führen Sie die Anwendung "Hello World" aus:
1. Speichern Sie die Projektdateien.
2. Wählen Sie Start Ausführen, um die Anwendung zu erstellen und auszuführen. Auf dem Formular wird eine Schaltfläche
mit der Bezeichnung Button1 angezeigt.
3. Klicken Sie auf Button1. Es wird ein Dialogfeld mit der Meldung "Hello world!" angezeigt.
4. Klicken Sie auf OK, um das Dialogfeld mit der Meldung zu schließen.
5. Schließen Sie das VCL-Formular, um in die IDE zurückzukehren.
Siehe auch
Überblick zu VCL.NET (
see page 77)
VCL-Formularanwendung erstellen (
see page 163)
2
2.4.6 Mit dem Aktionsmanager Aktionen in einer
VCL-Formularanwendung erstellen
Die folgende Anleitung veranschaulicht, wie in RAD Studio Aktionen mit dem Aktionsmanager erstellt werden. Zu diesem Zweck
wird eine einfache Benutzeroberfläche mit einem Bereich zur Textbearbeitung erstellt und beschrieben, wie im Dateimenü ein
Befehl zum Öffnen von Dateien erzeugt wird.
Die Erstellung der VCL-Anwendung mit Aktionsmanager-Aktionen umfasst die folgenden grundlegenden Schritte:
1. Dem Aktionsmanager in einem Formular eine Datei-Öffnen-Aktion hinzufügen.
162
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
dbExpress.NET-Datenbankanwendungen
2. Das Hauptmenü erstellen.
3. Die Aktion dem Menü hinzufügen.
4. Die Anwendung compilieren und ausführen.
So fügen Sie dem Aktionsmanager eine Aktion zum Öffnen von Dateien hinzu:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung, um ein neues Formular zu
erstellen..
2. Ziehen Sie aus der Seite Zusätzlich der Tool-Palette eine TActionManager-Komponente in das Formular.
3. Doppelklicken Sie auf die TActionManager-Komponente, um den Aktionsmanager-Editor anzuzeigen.
Tip: Wenn Sie Titel von nicht-visuellen Komponenten wie TActionManager anzeigen möchten, wählen Sie
Tools->Umgebungsoptionen
. Aktivieren Sie danach auf der Registerkarte Designer die Option Komponenten-Titel zeigen, und klicken Sie auf OK.
4. Aktivieren Sie die Registerkarte Aktionen.
5. Wählen Sie den Eintrag Neue Standardaktion aus der Dropdown-Liste, um das Dialogfeld Standardaktionsklassen zu
öffnen.
6. Blättern Sie zur Kategorie Datei, und klicken Sie auf die Aktion TFileOpen.
7. Klicken Sie auf OK, um das Dialogfeld zu schließen.
8. Wählen Sie im Aktionsmanager-Editor die Kategorie Datei. Im Listenfeld Aktionen wird der Eintrag Öffnen angezeigt.
9. Klicken Sie auf Schließen, um den Editor zu schließen.
So erstellen Sie das Hauptmenü und fügen ihm die Datei-Öffnen-Aktion hinzu:
1. Ziehen Sie aus der Seite Zusätzlich der Tool-Palette eine TActionMainMenuBar-Komponente in das Formular.
2. Öffnen Sie den Aktionsmanager-Editor, und wählen Sie die Kategorie Datei im Listenfeld Kategorien.
3. Ziehen Sie den Eintrag Datei in die leere Menüleiste. In der Menüleiste wird nun Datei angezeigt.
4. Klicken Sie auf Schließen, um den Editor zu schließen.
So compilieren Sie die Anwendung und führen sie aus:
1. Wählen Sie Start Ausführen. Die Anwendung wird ausgeführt und zeigt ein Formular mit der Hauptmenüleiste und dem
Menü Datei an.
2. Wählen Sie Datei Öffnen. Das Dialogfeld zum Öffnen von Dateien wird angezeigt.
Siehe auch
Überblick zu VCL.NET (
see page 77)
VCL-Formularanwendung erstellen (
see page 163)
2
2.4.7 dbExpress.NET-Datenbankanwendungen mit
VCL-Formularen erstellen
In den folgenden Anleitungen wird beschrieben, wie eine dbExpress-Datenbankanwendung erstellt wird.
Die Erstellung einer dbExpress.NET-Datenbankanwendung mit VCL-Formularen umfasst die folgenden grundlegenden Schritte:
1. Die Datenbankverbindung einrichten.
2. Die unidirektionale Datenmenge einrichten.
163
dbExpress.NET-Datenbankanwendungen
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
3. Datenprovider, Client-Datenmenge und Datenquelle einrichten.
4. Eine DataGrid-Komponente mit den Verbindungskomponenten verbinden.
5. Die Anwendung ausführen.
So fügen Sie eine dbExpress-Verbindungskomponente hinzu:
1. Wählen Sie Datei Neu VCL-Formularanwendung. Der VCL-Formular-Designer wird angezeigt.
2. Ziehen Sie aus der Kategorie dbExpress der Tool-Palette eine TSQLConnection-Komponente in das Formular.
3. Doppelklicken Sie auf die TSQLConnection-Komponente, um den Verbindungseditor anzuzeigen.
4. Wählen Sie im Verbindungseditor in der Liste Verbindungsname den Eintrag IBConnection.
5. Geben Sie unter Einstellungen im Feld für die Datenbank den Pfad zur InterBase-Datenbankdatei employee.gdb ein.
Diese Datei befindet sich standardmäßig im Verzeichnis C:\Programme\Gemeinsame Dateien\CodeGear
Shared\Data.
6. Übernehmen Sie die Werte im Feld User_Name (sysdba) und Password (masterkey).
7. Um die Verbindung zu testen, klicken Sie auf die Schaltfläche mit dem Häkchen (die sich über der Liste Verbindungsname
befindet).
Anmerkung: Sie werden aufgefordert, sich anzumelden. Verwenden Sie das Passwort masterkey. Wenn die Verbindung
funktioniert, wird eine Bestätigungsmeldung angezeigt. Kann keine Verbindung zur Datenbank hergestellt werden, überprüfen
Sie, ob InterBase installiert ist und ob der Server gestartet wurde.
8. Klicken Sie auf OK, um den Verbindungseditor zu schließen und die Änderungen zu speichern.
So richten Sie die unidirektionale Datenmenge ein:
1. Ziehen Sie aus der Kategorie dbExpress der Tool-Palette eine TSQLDataSet-Komponente an den Beginn des Formulars.
2. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft SQLConnection den Eintrag SQLConnection1.
3. Weisen Sie der Eigenschaft CommandText einen SQL-Befehl zu, beispielsweise Select * from sales. Sie können als
SQL-Befehl entweder eine Select-Anweisung im Objektinspektor eingeben oder auf die Ellipsen-Schaltfläche rechts neben
CommandText klicken, um den Anweisungstext-Editor anzuzeigen, in dem Sie eine Abfrageanweisung erstellen können.
Tip: Wenn Sie Hilfe bei der Verwendung des Anweisungstext-Editors
benötigen, klicken Sie auf die Schaltfläche Hilfe oder drücken F1.
4. Setzen Sie im Objektinspektor die Eigenschaft Active auf True, um die Datenmenge zu öffnen.
So fügen Sie den Provider hinzu:
1. Ziehen Sie aus der Kategorie Datenzugriff der Tool-Palette eine TDataSetProvider-Komponente an den Beginn des
Formulars.
2
2. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft DataSet den Eintrag SQLDataSet1.
So fügen Sie eine Client-Datenmenge hinzu:
1. Ziehen Sie aus der Kategorie Datenzugriff der Tool-Palette eine TClientDataSet-Komponente rechts neben die
DataSetProvider-Komponente in das Formular.
2. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft ProviderName den Eintrag DataSetProvider1.
3. Setzen Sie die Eigenschaft Active auf True, damit Daten an die Anwendung übergeben werden können.
Eine Datenquelle stellt eine Verbindung mit einer Clientdatenmenge über datensensitive Steuerelemente her. Jedes
datensensitive Steuerelement muss mit einer Datenquellenkomponente verknüpft sein, damit Daten zum Anzeigen und
Bearbeiten zur Verfügung stehen. Ebenso müssen alle Datenmengen mit einer Datenquellenkomponente verknüpft sein,
damit ihre Daten in datensensitiven Steuerelementen des Formulars angezeigt und bearbeitet werden können.
164
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
Anwendungen mit XML-Komponenten
So fügen Sie die Datenquelle hinzu:
1. Ziehen Sie aus der Kategorie Datenzugriff der Tool-Palette eine TDataSource-Komponente rechts neben die
ClientDataSet-Komponente in das Formular.
2. Setzen Sie im Objektinspektor die Eigenschaft DataSet auf ClientDataSet1.
So verbinden Sie ein Datengitter mit der Datenmenge:
1. Ziehen Sie aus der Kategorie Datensteuerung der Tool-Palette eine TDBGrid-Komponente in das Formular.
2. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft DataSource den Eintrag DataSource1.
3. Speichern Sie alle Dateien des Projekts.
4. Wählen Sie Start Start. Sie werden zur Eingabe eines Passworts aufgefordert.
5. Geben Sie masterkey als Passwort ein. Die Anwendung wird compiliert und zeigt ein VCL.NET-Formular mit einer
DBGrid-Komponente an.
Siehe auch
Überblick zu VCL.NET (
see page 77)
2.4.8 Anwendungen mit XML-Komponenten erstellen
In diesem Beispiel wird eine VCL-Formulare-Anwendung erstellt, die mit Hilfe einer XMLDocument-Komponente den Inhalt einer
XML-Datei anzeigt.
Die folgenden grundlegenden Schritte werden ausgeführt:
1. Ein XML-Dokument erstellen.
2. Ein VCL-Formular erstellen.
3. Eine XMLDocument-Komponente in das Formular einfügen und mit der XML-Datei verknüpfen.
4. VCL-Komponenten für die Anzeige des XML-Dateiinhalts erstellen.
5. Ereignisbehandlungsroutinen für die Anzeige des Inhalts von untergeordneten Knoten in der XML-Datei schreiben.
6. Die Anwendung compilieren und ausführen.
So erstellen Sie das XML-Dokument:
1. Kopieren Sie den folgenden Text in einem Texteditor in eine Datei.
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE StockHoldings [
<!ELEMENT StockHoldings (Stock+)>
<!ELEMENT Stock (name)>
<!ELEMENT Stock (price)>
<!ELEMENT Stock (symbol)>
<!ELEMENT Stock (shares)>
]>
2
<StockHoldings>
<Stock exchange="NASDAQ">
<name>Borland</name>
<price>10.375</price>
<symbol>BORL</symbol>
<shares>100</shares>
</Stock>
165
Anwendungen mit XML-Komponenten
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
<Stock exchange="NYSE">
<name>MyCompany</name>
<price>8.75</price>
<symbol>MYCO</symbol>
<shares type="preferred">25</shares>
</Stock>
</StockHoldings>
2. Speichern Sie die Datei als XML-Dokument auf dem lokalen Laufwerk. Weisen Sie ihr den Namen stock.xml zu.
3. Öffnen Sie das Dokument im Browser. Der Inhalt der Datei sollte fehlerfrei angezeigt werden.
Anmerkung: Im Browser können Sie den Text der Quelldatei durch Auswahl von Ansicht->Quelle
anzeigen.
So erstellen Sie ein Formular mit einer XMLDocument-Komponente:
1. Starten Sie ein neues Projekt.
2. Wählen Sie Datei Neu Weitere.
3. Wählen Sie im Dialogfeld Objektgalerie die Kategorie Delphi für .NET-Projekte.
4. Doppelklicken Sie auf das Symbol VCL-Formularanwendung. Der VCL-Formular-Designer wird angezeigt.
5. Ziehen Sie aus der Kategorie Internet der Tool-Palette eine TXMLDocument-Komponente in das Formular.
6. Klicken Sie im Objektinspektor auf die Ellipsen-Schaltfläche neben der Eigenschaft FileName, wechseln Sie zur neu
erstellten XML-Datei, und öffnen Sie diese. Die XML-Datei ist mit der TXMLDocument-Komponente verknüpft.
7. Setzen Sie im Objektinspektor die Eigenschaft Active auf True.
So richten Sie die VCL-Komponenten ein:
1. Ziehen Sie aus der Seite Standard der Tool-Palette eine TMemo-Komponente in das Formular.
2. Ziehen Sie aus der Seite Standard der Tool-Palette zwei TButton-Komponenten unmittelbar über Memo1 in das Formular.
3. Wählen Sie im Objektinspektor die Komponente Button1 aus, und weisen Sie der Eigenschaft Caption den Wert Borland
zu.
4. Wählen Sie im Objektinspektor die Komponente Button2 aus, und weisen Sie der Eigenschaft Caption den Wert
MyCompany zu.
So zeigen Sie den Inhalt eines untergeordneten Knotens der XML-Datei an:
1. Wählen Sie Button1 aus.
2. Doppelklicken Sie im Objektinspektor auf das Ereignis OnClick auf der Registerkarte Ereignisse. Der Quelltext wird
angezeigt. Der Cursor befindet sich bereits im Block der Ereignisbehandlungsroutine TForm1.Button1Click.
2
3. Geben Sie folgenden Quelltext ein, um den Aktienpreis des ersten untergeordneten Knotens anzuzeigen, sobald auf die
Schaltfläche Borland geklickt wird:
BorlandStock := XMLDocument1.DocumentElement.ChildNodes[0];
Price:= BorlandStock.ChildNodes['price'].Text;
Memo1.Text := Price;
4. Fügen Sie unmittelbar über dem Codeblock, oberhalb der begin-Anweisung in der Ereignisbehandlungsroutine, einen
var-Abschnitt hinzu, und geben Sie die folgenden Deklarationen für lokale Variablen ein:
var
BorlandStock: IXMLNode;
Price: string;
5. Wählen Sie Button2 aus.
6. Doppelklicken Sie im Objektinspektor auf das Ereignis OnClick auf der Registerkarte Ereignisse. Der Quelltext wird
angezeigt. Der Cursor befindet sich bereits im Block der Ereignisbehandlungsroutine TForm1.Button2Click.
7. Geben Sie folgenden Quelltext ein, um den Aktienpreis des zweiten untergeordneten Knotens anzuzeigen, sobald auf die
166
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
Ausführen von Änderungen, die wegen der
Schaltfläche MyCompany geklickt wird:
MyCompany:=XMLDocument1.DocumentElement.ChildNodes[1];
Price:= MyCompany.ChildNodes['price'].Text;
Memo1.Text := Price;
8. Fügen Sie unmittelbar über dem Codeblock, oberhalb der begin-Anweisung in der Ereignisbehandlungsroutine, einen
var-Abschnitt hinzu, und geben Sie die folgenden Deklarationen für lokale Variablen ein:
var
MyCompany: IXMLNode;
Price: string;
So compilieren Sie die Anwendung und führen sie aus:
1. Wählen Sie Start Ausführen, um die Anwendung zu compilieren und auszuführen. Die Anwendung zeigt zwei Schaltflächen
und ein Memofeld an.
2. Klicken Sie auf die Schaltfläche Borland. Der Aktienpreis wird angezeigt.
3. Klicken Sie auf die Schaltfläche MyCompany. Der Aktienpreis wird angezeigt.
Siehe auch
Überblick zu VCL.NET (
see page 77)
VCL-Formularanwendung erstellen (
see page 163)
2.4.9 Ausführen von Änderungen, die wegen der
Unterstützung von 64-Bit .NET 2.0 erforderlich sind
Für die Unterstützung von 64-Bit .NET 2.0 waren einige Änderungen erforderlich. Wegen dieser Änderungen könnten kleinere
Quelltextänderungen erforderlich werden, damit vorhandene Anwendungen korrekt arbeiten. Dieses Thema beschreibt die
Änderungen im Detail. Es gibt zwei allgemeine Bereiche:
1. Geänderte Quelltext-Pattern
2. Windows API-Deklarationen für einen Callbacks und Records
Warnung: Diese Modifikationen sind wegen der Änderungen zur Unterstützung von 64-Bit-Systemen erforderlich. Sie
müssen für Anwendungen vorgenommen werden, die sowohl auf 32-Bit- als auch auf 64-Bit-Systemen ausgeführt werden
sollen.
So führen Sie die erforderlichen Änderungen der Quelltext-Pattern aus:
1. Case-Anweisungen Quelltext, der Handles in case-Anweisungen enthält, wird nicht mehr compiliert. Ersetzen Sie diese
Anweisungen folgendermaßen:
2
case Msg.WParam of
durch eine der folgenden Anweisungen:
case Msg.WParam.ToInt64 of
case Int64(Msg.WParam) of
// spezifisch für VCL.NET
// Kompatibel mit VCL/Win32
2. Typumwandlungen von Aufzählungen Ein Handle kann nicht mehr direkt in einen Aufzählungstyp umgewandelt werden.
Ersetzen Sie den Quelltext folgendermaßen:
LEnum := TEnum(GetWindowLong(...));
durch folgenden:
LEnum := TEnum(GetWindowLong(...).ToInt64);
3. Verwendung von Handles mit Mengen Das Überladen von Mengenoperatoren wird nicht mehr unterstützt. Quelltext, wie
167
Ausführen von Änderungen, die wegen der
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
der folgende:
if Msg.WParam in [1..5] then
muss durch einen der folgenden ersetzt werden:
if Msg.WParam.ToInt64 in [1..5] then
if Int64(Msg.WParam) in [1..5] then
// spezifisch für VCL.NET
// Kompatibel mit VCL/Win32
4. Array-Indizierung Quelltext, in dem über ein Handle ein Array indiziert wird, wird nicht mehr compiliert. Quelltext wie der
folgende:
S := StrArray[Msg.WParam];
muss in einen der folgenden geändert werden:
S := StrArray[Msg.WParam.ToInt64];
S := StrArray[Int64(Msg.WParam)];
// spezifisch für VCL.NET
// Kompatibel mit VCL/Win32
5. Annahme einer bestimmten Handle-Größe Quelltext, der auf 64-Bit-Plattformen ausgeführt werden soll, darf keine
Annahmen über den Wert eines Handles oder darüber, dass IntPtr sich in dem Int32-Bereich befindet, treffen. Bei einem
IntPtr löst die Methode ToInt32 eine Überlauf-Exception aus, wenn der Zeiger sich nicht im zulässigen Bereich befindet.
Quelltext wie der folgende:
LIntPtr := IntPtr.Create(Buffer.ToInt32 + 10);
muss folgendermaßen geändert werden:
LIntPtr := IntPtr.Create(Buffer.ToInt64 + 10);
Der Code:
var
DC: HDC;
begin
...
SendMessage(Window, Message, Integer(DC), 0);
end;
muss durch folgenden ersetzt werden:
var
DC: HDC;
begin
...
SendMessage(Window, Message, WPARAM(DC), 0);
end;
So führen Sie die erforderlichen Änderungen für Callback-Funktionen aus:
1. Sehen Sie in der ersten Spalte der folgenden Tabelle nach, ob Sie eine dieser Units verwendet haben.
2
2. Falls ja, stellen Sie fest, ob Sie eine der Callback-Funktionen verwendet haben, die in der zweiten Spalte der Tabelle
aufgeführt sind.
3. Ändern Sie bei jedem Vorkommen einer solchen Callback-Funktion die Parameter, die in der dritten Spalte aufgeführt sind.
entsprechend.
Unit
Callback-Funktion
Details
DDEml
TFNCallback
Typ der Parameter Data1 und Data2 geändert
MMSystem
TFNDriverProc
Typ des Parameters dwDriverId geändert
MMSystem
TFNDrvCallBack
Typ der Parameter dwUser, dw1 und dw2 geändert
MMSystem
TFNTimeCallBack
Typ der Parameter dwUser, dw1 und dw2 geändert
RichEdit
TEditStreamCallBack
Typ des Parameters dwCookie geändert
168
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
Eine neue VCL.NET-Komponente erstellen
Windows
TFNWndProc
Typen WParam, LParam und Result geändert
Windows
TFNWndEnumProc
Typ des Parameters LParam geändert
Windows
TFNTimerProc
Typ des Parameters P3 geändert
Windows
TFNAPCProc
Typ des Parameters dwParam geändert
Windows
TFNDlgProc
Ergebnistyp geändert
Windows
TFNSendAsyncProc
Typ des Parameters P3 geändert
Windows
TFNPropEnumProcEx
Typ des Parameters P4 geändert
WinInet
PFN_AUTH_NOTIFY
Typ des Parameters dwContext geändert
So führen Sie die erforderlichen Änderungen für Variant-Records aus:
1. Sehen Sie in der ersten Spalte der folgenden Tabelle nach, ob Sie eine dieser Units verwendet haben.
2. Falls ja, stellen Sie fest, ob Sie einen der Records verwendet haben, die in der zweiten Spalte der Tabelle aufgeführt sind.
3. Suchen Sie für diese Records alle Vorkommen, wo ein Feld als ein var-Parameter übergeben wurde, der in eine Eigenschaft
geändert wurde und ändern Sie den Quelltext entsprechend. Der Compiler gibt eine Warnmeldung bei erforderlichen
Aktualisierungen aus.
Unit
Record
ActiveX
TPictDesc
ActiveX
TPropSpec
ActiveX
TStgMedium
ActiveX
TTypeDesc
ActiveX
TVarDesc
ActiveX
TVariantArg
CommCtrl
TPropSheetHeader
CommCtrl
TPropSheetPage
CommCtrl
TTVInsertStruct
CommCtrl
TTVInsertStructA
CommCtrl
TTVInsertStructW
MMSystem
TMixerControlDetails
ShlObj
TStrRet
Windows
TInput
Windows
TProcessHeapEntry
Windows
TSystemInfo
WinSpool
TPrinterNotifyInfoData
2
Siehe auch
Änderungen aufgrund der Unterstützung von 64-Bit .NET 2.0 (
see page 63)
169
Bitmap-Grafik in einer
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
2.4.10 Eine neue VCL.NET-Komponente erstellen
Mit dem Experten für neue VCL-Komponenten können Sie eine neue VCL.NET-Komponente erstellen und der Tool-Palette
hinzufügen.
Allgemeine Anleitung zum Erstellen einer neuen VCL.NET-Komponente
1. Ein Package (.dll) erstellen.
2. Eine neue VCL.NET-Komponente erstellen:
1. Vorfahrkomponente festlegen.
2. Den Klassennamen angeben.
3. Ihre Komponente registrieren und der VCL hinzufügen.
So erstellen Sie ein Package:
1. Wählen Sie Datei
Neu Weitere Delphi für .NET-Projekte Package.
2. RAD Studio erstellt das Package und zeigt es in der Projektverwaltung an.
So erstellen Sie eine neue VCL-Komponente:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte Neue Dateien VCL-Komponente. Nun wird die erste Seite
des Dialogfeldes Neue VCL-Komponenten geöffnet und die Liste mit den Vorfahrkomponenten geladen.
2. Wählen Sie auf der Seite Vorfahrkomponente des Dialogfeldes Neue VCL-Komponenten eine Vorfahrkomponente aus der
Liste aus und klicken Sie auf Weiter.
3. Überprüfen Sie auf der Seite Komponente des Dialogfeldes Neue VCL-Komponenten die Vorgabewerte für Klassenname,
Palettenseite, Unit-Name und Suchpfad. Sie können die Vorgabewerte übernehmen oder eigene Werte eingeben.
4. Klicken Sie auf Weiter. In der Projektverwaltung sollte nun Ihre neue .NET VCL-Komponente in dem zuvor erstellten
Package aufgeführt werden.
So registrieren Sie Ihre Komponente bei der VCL:
1. Wählen Sie Komponenten Installierte .NET-Komponenten.
2. Aktivieren Sie die Registerkarte .NET VCL-Komponenten.
3. Klicken Sie auf Hinzufügen.
4. Klicken Sie im Dialogfeld Wählen Sie ein VCL .NET-Package oder eine Assemblierung aus auf das Package, das die
neue .NET VCL-Komponente enthält.
2
5. Suchen Sie in der Tool-Palette die Unit, in die Ihre .NET VCL-Komponente installiert wurde. In dieser Unit sollte Ihre .NET
VCL-Komponente aufgeführt sein.
Siehe auch
Überblick zu VCL für .NET (
see page 77)
2.4.11 Bitmap-Grafik in einer VCL-Formularanwendung
anzeigen
Mit den folgenden Schritten wird eine Bitmap-Grafik aus einer Datei geladen und in einem VCL-Formular angezeigt:
170
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
Bitmap-Grafik in einer
1. Ein VCL-Formular mit einer Schaltfläche erstellen.
2. Eine Bitmap-Grafik bereitstellen.
3. Quelltext für die OnClick-Ereignisbehandlungsroutine der Schaltfläche schreiben, um eine Bitmap-Grafik zu laden und
anzuzeigen.
4. Die Anwendung compilieren und ausführen.
So erstellen Sie ein VCL-Formular und eine Schaltfläche:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung. Der VCL-Formular-Designer
wird angezeigt.
2. Ziehen Sie aus der Kategorie Standard der Tool-Palette eine TButton-Komponente in das Formular.
So stellen Sie eine Bitmap-Grafik bereit:
1. Legen Sie ein Verzeichnis an, in dem die Projektdateien gespeichert werden.
2. Suchen Sie nach einer Bitmap-Grafik, und kopieren Sie diese in das Projektverzeichnis.
3. Speichern Sie alle Projektdateien in dem Projektverzeichnis.
So schreiben Sie die Behandlungsroutine für das Ereignis OnClick:
1. Doppelklicken Sie in der Kategorie Eingabe auf der Registerkarte Ereignisse auf das OnClick-Ereignis für Button1. Der
Quelltext-Editor wird angezeigt. Der Cursor befindet sich bereits im Block der Ereignisbehandlungsroutine
TForm1.Button1Click.
2. Geben Sie folgenden Quelltext für die Ereignisbehandlungsroutine ein, wobei Sie MyFile.bmp durch den Namen der
Bitmap-Datei in Ihrem Projektverzeichnis ersetzen müssen:
Rect := TRect.Create(0,0,100,100);
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile('MyFile.bmp');
Form1.Canvas.Brush.Bitmap := Bitmap;
Form1.Canvas.FillRect(Rect);
finally
Form1.Canvas.Brush.Bitmap := nil;
Bitmap.Free;
end;
Tip: Sie können die Größe des anzuzeigenden Rechtecks anpassen, indem Sie die Parameterwerte für Rect ändern.
3. Fügen Sie die folgenden Variablendeklarationen in den var-Abschnitt der Routine ein:
Bitmap: TBitmap;
Rect : TRect;
So führen Sie das Programm aus:
2
1. Speichern Sie alle Dateien des Projekts.
2. Wählen Sie Start Ausführen.
3. Klicken Sie auf die Schaltfläche, um die Bitmap-Grafik in einem Rechteck der Größe 100 x 100 Pixel in der oberen linken
Ecke des Formulars anzuzeigen.
Siehe auch
Überblick zu VCL.NET (
see page 77)
Gerade Linien in einer VCL-Formularanwendung zeichnen (
see page 177)
Rechtecke und Ellipsen in einer VCL-Formularanwendung zeichnen (
Abgerundete Rechtecke in einer VCL-Anwendung zeichnen (
see page 176)
see page 177)
171
Abgerundete Rechtecke in einer
RAD Studio für .NET
Bitmap-Grafik in ein Steuerelement einer VCL-Formularanwendung einfügen (
2.4 VCL für .NET – Anleitungen
see page 178)
2.4.12 Rechtecke und Ellipsen in einer
VCL-Formularanwendung zeichnen
Mit den folgenden Schritten werden ein Rechteck und eine Ellipse in einem VCL-Formular gezeichnet:
1. Ein VCL-Formular erstellen.
2. Eine Behandlungsroutine für das OnPaint-Ereignis des Formulars schreiben, die ein Rechteck und eine Ellipse zeichnet.
3. Die Anwendung compilieren und ausführen.
So erstellen Sie ein VCL-Formular:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung.
2. Klicken Sie gegebenenfalls im Objektinspektor auf das Register Design, um Form1 anzuzeigen.
So schreiben Sie die Behandlungsroutine für das Ereignis OnPaint:
1. Klicken Sie im Objektinspektor auf die Registerkarte Ereignisse.
2. Doppelklicken Sie auf das Ereignis OnPaint in der Kategorie Verschiedenes der Registerkarte Ereignisse. Der
Quelltext-Editor wird angezeigt. Der Cursor befindet sich bereits im Block der Ereignisbehandlungsroutine
TForm1.FormPaint.
3. Geben Sie folgenden Quelltext für die Ereignisbehandlungsroutine ein:
Canvas.Rectangle (0, 0, ClientWidth div 2, ClientHeight div 2);
Canvas.Ellipse (0, 0, ClientWidth div 2, ClientHeight div 2);
So führen Sie das Programm aus:
1. Speichern Sie alle Dateien des Projekts.
2. Wählen Sie Start Ausführen.
3. Die Anwendung wird ausgeführt und zeigt im oberen linken Viertel des Formulars ein Rechteck und eine Ellipse in der Mitte
des Rechtecks an.
Siehe auch
Überblick zu VCL.NET (
see page 77)
Abgerundete Rechtecke in einer VCL-Formularanwendung zeichnen (
see page 177)
2
2.4.13 Abgerundete Rechtecke in einer
VCL-Formularanwendung zeichnen
Mit den folgenden Schritten wird ein abgerundetes Rechteck in einem VCL-Formular gezeichnet:
1. Ein VCL-Formular erstellen.
2. Eine Behandlungsroutine für das OnPaint-Ereignis des Formulars schreiben, die ein Polygon zeichnet.
3. Die Anwendung compilieren und ausführen.
172
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
Gerade Linien in einer
So erstellen Sie ein VCL-Formular:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung.
2. Klicken Sie im Designer gegebenenfalls auf das Formular, um die Eigenschaften von Form1 im Objektinspektor
anzuzeigen.
So schreiben Sie die Behandlungsroutine für das Ereignis OnPaint:
1. Klicken Sie im Objektinspektor auf die Registerkarte Ereignisse.
2. Doppelklicken Sie in der Kategorie Visuell auf das Ereignis OnPaint. Der Quelltext-Editor wird angezeigt. Der Cursor
befindet sich bereits im Block der Ereignisbehandlungsroutine TForm1.FormPaint.
3. Geben Sie folgenden Quelltext für die Ereignisbehandlungsroutine ein:
Canvas.RoundRect(0, 0, ClientWidth div 2,
ClientHeight div 2, 10, 10);
So führen Sie das Programm aus:
1. Speichern Sie alle Dateien des Projekts.
2. Wählen Sie Start Ausführen.
3. Die Anwendung wird ausgeführt und zeichnet ein abgerundetes Rechteck in das obere linke Viertel des Formulars.
Siehe auch
Überblick zu VCL.NET (
see page 77)
Rechtecke und Ellipsen in einer VCL-Formularanwendung zeichnen (
see page 176)
2.4.14 Gerade Linien in einer VCL-Formularanwendung
zeichnen
Mit den folgenden Schritten werden zwei diagonal verlaufende gerade Linien in einem VCL-Formular gezeichnet:
1. Ein VCL-Formular erstellen.
2. Eine Behandlungsroutine für das OnPaint-Ereignis des Formulars schreiben, die die geraden Linien zeichnet.
3. Die Anwendung compilieren und ausführen.
So erstellen Sie ein VCL-Formular und fügen eine Grafik ein:
2
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung.
2. Klicken Sie gegebenenfalls auf das Register Design, um die Eigenschaften von Form1 im Objektinspektor anzuzeigen.
So schreiben Sie die Behandlungsroutine für das Ereignis OnPaint:
1. Klicken Sie im Objektinspektor auf die Registerkarte Ereignisse.
2. Doppelklicken Sie in der Kategorie Visuell auf das Ereignis OnPaint. Der Quelltext-Editor wird angezeigt. Der Cursor
befindet sich bereits im Block der Ereignisbehandlungsroutine TForm1.FormPaint.
3. Geben Sie folgenden Quelltext für die Ereignisbehandlungsroutine ein:
with Canvas do
begin
MoveTo(0,0);
LineTo(ClientWidth, ClientHeight);
MoveTo(0, ClientHeight);
173
Bitmap-Grafik in ein Steuerelement einer
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
LineTo(ClientWidth, 0);
end;
So führen Sie das Programm aus:
1. Speichern Sie alle Dateien des Projekts.
2. Wählen Sie Start Ausführen. Die Anwendung wird ausgeführt und zeigt zwei sich kreuzende diagonale Linien an.
Tip: Um die Stiftfarbe in Grün zu ändern, fügen Sie die folgende Anweisung unmittelbar nach der ersten
MoveTo()-Anweisung in die Ereignisbehandlungsroutine ein: Pen.Color := clRed; Probieren Sie andere Einstellungen
für die Eigenschaften des Canvas- und des Pen-Objekts aus.
Siehe auch
Überblick zu VCL.NET (
see page 77)
VCL-Formularanwendungen mit Grafiken erstellen (
see page 161)
Rechtecke und Ellipsen in einer VCL-Formularanwendung zeichnen (
see page 176)
Abgerundete Rechtecke in einer VCL-Formularanwendung zeichnen (
see page 177)
Bitmap-Grafik in einer VCL-Formularanwendung anzeigen (
see page 175)
2.4.15 Bitmap-Grafik in ein Steuerelement einer
VCL-Formularanwendung einfügen
Mit den folgenden Schritten wird eine Bitmap-Grafik in ein Kombinationsfeld in einer VCL-Formularanwendung eingefügt:
1. Ein VCL-Formular erstellen.
2. Komponenten auf dem Formular platzieren.
3. Eigenschaften der Komponenten im Objektinspektor festlegen.
4. Ereignisbehandlungsroutinen für die Zeichenaktion der Komponente schreiben.
5. Die Anwendung compilieren und ausführen.
So erstellen Sie ein VCL-Formular mit einem Kombinationsfeld:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte VCL-Formularanwendung. Der VCL-Formular-Designer
wird angezeigt.
2. Klicken Sie auf die Registerkarte Design, um das Formular anzuzeigen.
2
3. Ziehen Sie aus der Kategorie Win32 der Tool-Palette eine TImageList-Komponente in das Formular.
4. Ziehen Sie aus der Kategorie Standard der Tool-Palette eine TComboBox-Komponente in das Formular.
So legen Sie die Komponenteneigenschaften fest:
1. Wählen Sie die Komponente ComboBox1 im Formular aus.
2. Öffnen Sie im Objektinspektor die Dropdown-Liste der Eigenschaft Style, und wählen Sie die Einstellung
csOwnerDrawFixed.
3. Klicken Sie im Objektinspektor auf die Ellipsen-Schaltfläche [...] neben der Eigenschaft Items. Daraufhin wird der
Stringlisten-Editor geöffnet.
4. Geben Sie einen String ein, der mit der Bitmap-Grafik verknüpft werden soll, z.B. NeuesBild, und klicken Sie dann auf OK.
5. Doppelklicken Sie im Formular auf die Komponente ImageList1. Der Bilderlisten-Editor wird geöffnet.
174
2.4 VCL für .NET – Anleitungen
RAD Studio für .NET
.NET-Steuerelemente in VCL.NET
6. Klicken Sie auf Hinzufügen, um das Dialogfeld Bilder hinzufügen anzuzeigen.
7. Suchen Sie auf dem lokalen Laufwerk eine Bitmap-Grafik, die im Kombinationsfeld angezeigt werden soll.
8. Wählen Sie ein sehr kleines Bild, z.B. ein Symbol. Kopieren Sie die Grafikdatei in Ihr Projektverzeichnis, und klicken Sie auf
Öffnen. Das Bild wird im Bilderlisten-Editor angezeigt.
9. Klicken Sie auf OK, um den Editor zu schließen.
So fügen Sie Quelltext für die Ereignisbehandlungsroutine hinzu:
1. Wählen Sie die Komponente ComboBox1 im Designer aus.
2. Klicken Sie im Objektinspektor auf die Registerkarte Ereignisse.
3. Doppelklicken Sie auf das Ereignis OnDrawItem. Der Quelltext-Editor wird angezeigt. Der Cursor befindet sich bereits im
Block der DrawItem-Ereignisbehandlungsroutine.
4. Geben Sie folgenden Quelltext für die Ereignisbehandlungsroutine ein:
ComboBox1.Canvas.FillRect(rect);
ImageList1.Draw(ComboBox1.Canvas, Rect.Left, Rect.Top, Index);
ComboBox1.Canvas.TextOut(Rect.Left+ImageList1.Width+2,
Rect.Top, ComboBox1.Items[Index]);
So führen Sie das Programm aus:
1. Speichern Sie alle Dateien des Projekts.
2. Wählen Sie Start Ausführen. Die Anwendung wird ausgeführt und zeigt ein Formular mit einem Kombinationsfeld an.
3. Klicken Sie auf den Abwärtspfeil des Kombinationsfeldes. Die Bitmap-Grafik und der Textstring werden als Listeneinträge
angezeigt.
Siehe auch
Überblick zu VCL.NET (
see page 77)
VCL-Formularanwendungen mit Grafiken erstellen (
see page 161)
2.4.16 .NET-Steuerelemente in VCL.NET importieren
Es kann Fälle geben, in denen Sie .NET-Komponenten in VCL.NET-Formularen einsetzen möchten. .NET-Komponenten können
nicht direkt in VCL-Anwendungen aufgenommen werden. Sie können diese Komponenten jedoch in einen ActiveX-Wrapper
verpacken, den Sie dann der VCL.NET-Anwendung hinzufügen. RAD Studio stellt hierfür den .NET-Importexperten zur
Verfügung.
2
So verwenden Sie .NET-Komponenten in einem VCL.NET-Formular:
1. Starten Sie den WinForms Control-Importexperten.
2. Erzeugen Sie das Package, um die Assemblierungsdatei zu erstellen.
3. Fügen Sie die Assemblierung der Tool-Palette hinzu.
So starten Sie den WinForms Control-Importexperten:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte WinForm Controls Package. Damit wird der WinForms
Control-Importexperte gestartet.
2. Geben Sie folgende Datei an:
c:\Windows\Microsoft.NET\Framework\v1.1.4322\System.Windows.Forms.dll
3. Klicken Sie auf Weiter. Daraufhin wird die zweite Seite des WinForms Control-Importexperten angezeigt, auf der alle
175
.NET-Steuerelemente in VCL.NET
RAD Studio für .NET
2.4 VCL für .NET – Anleitungen
verfügbaren Komponenten aufgeführt sind.
4. Aktivieren Sie die Kontrollkästchen neben den Komponenten, die importiert werden sollen.
Anmerkung: Wenn Sie alle Komponenten importieren möchten, klicken Sie auf die Schaltfläche Alle markieren
.
5. Klicken Sie auf Weiter. Nun wird die dritte Seite des Experten angezeigt, auf der Sie Optionen für die Erzeugung der Units
einstellen können.
6. Übernehmen Sie die Voreinstellungen, und klicken Sie auf Weiter. Jetzt wird die vierte Seite des Experten angezeigt, auf der
Sie den Speicherort und den Namen der Package-Datei angeben können.
7. Klicken Sie auf Weiter. Daraufhin wird die fünfte Seite des Experten angezeigt, auf der Sie angeben können, dass
gleichnamige vorhandene Dateien überschrieben werden sollen.
8. Klicken Sie auf Weiter. Dadurch wird der Erzeugungsvorgang gestartet. Über die Erstellung der einzelnen Dateien,
einschließlich der Package-Datei (.dpk), wird durch entsprechende Statusmeldungen informiert.
9. Falls Sie weitere Steuerelemente importieren möchten, klicken Sie auf Neu, ansonsten klicken Sie auf Fertig stellen. In der
Projektverwaltung wird nun das Package angezeigt, das die betreffenden Units enthält.
So erstellen Sie das Package und fügen es einem Projekt hinzu:
1. Markieren Sie den Package-Namen in der Projektverwaltung.
2. Wählen Sie im Hauptmenü Projekt <Projektname> erzeugen. Dabei steht <Projektname> für den Namen des Projekts.
Daraufhin wird die Assemblierungsdatei erzeugt, die das Package und die Units enthält.
3. Wählen Sie Komponenten Installierte .NET-Komponenten.
4. Aktivieren Sie die Registerkarte .NET VCL-Komponenten.
5. Klicken Sie auf Hinzufügen.
6. Suchen Sie die Package-Assemblierungsdatei, markieren Sie sie, und klicken Sie auf Öffnen. Der Speicherort hängt von den
Einstellungen ab, die in den Projektoptionen festgelegt sind. Möglicherweise wird die Datei im Standarddokumentverzeichnis
abgelegt.
7. Klicken Sie auf OK. Die Steuerelemente werden in der Tool-Palette in der Kategorie WinForm Controls angezeigt. Sie
können nun die einzelnen Steuerelemente in Ihre VCL.NET-Formularanwendung einfügen.
Siehe auch
Überblick zu VCL.NET (
2
176
see page 77)
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
Dieser Abschnitt enthält Anleitungen zur Entwicklung von ASP.NET Web Forms-Anwendungen.
Themen
Name
ASP.NET-Anwendungen erstellen (
Beschreibung
see page 186)
ASP.NET-Datenbankanwendung erstellen (
Die folgende Anleitung beschreibt die grundlegenden Schritte zum Erstellen
eines einfachen ASP.NET-Projekts. Informationen zu weiterführenden Themen
finden Sie in den Hinweisen im Anschluss an diese Anleitung.
see page 187)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 1 (
page 189)
Die folgende Anleitung beschreibt, wie Sie mit wenigen Schritten eine einfache
ASP.NET-Datenbankanwendung, wie z.B. BDP.NET, erstellen können. Wenn die
erforderlichen Verbindungsobjekte generiert sind, werden die Daten im Projekt in
einem Datengitter (DataGrid) angezeigt.
Detailliertere Datenbankbeispiele, die andere Datenbanktechnologien für
ASP.NET 2.0 verwenden, finden Sie unter ASP.NET-Anwendung mit
Datenbanksteuerelementen erstellen 1 ( see page 189).
BDP.NET enthält Komponenten-Designer, mit deren Hilfe sich
Datenbankanwendungen einfach erstellen lassen. Anstatt jede einzelne
Komponente in einem Designer zu platzieren und zu konfigurieren, lassen sich
mit den BDP.NET-Designern Datenbankkomponenten deutlich schneller erstellen
und konfigurieren. Die folgende Anleitung zeigt die Funktionsweise der
Hauptkomponenten von ASP.NET, ADO.NET und BDP.NET.... more ( see
page 187)
see
Dieses erweiterte Beispiel zeigt, wie eine Webseite erstellt wird, die ein
GridView- und ein Datenbank-Steuerelement enthält. Das Beispiel illustriert:
• Das Hinzufügen einer ASP.NET-Komponente zu einem
Formular.
• Die Verwendung des Smart Tasks-Fensters.
• Das Konfigurieren und Verbinden mit einer Datenquelle.
• Die Verwendung von SQL zum Lesen von Daten aus
einer Datenbank.
• Das Ausführen einer Anwendung in einem Browser.
Anmerkung: Sie können nur ASP.NET-Projekte in
CodeGear RAD Studio erstellen (keine
Win32-Personalities).
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 2 (
page 191)
see
Dieses Beispiel zeigt die weitere Entwicklung einer Webseite, die ein GridViewund ein Datenbank-Steuerelement enthält. In den folgenden Schritten werden
dem GridView-Steuerelement weitere Funktionen, einschließlich dem
Bearbeiten, hinzugefügt. Das Beispiel illustriert:
• Die Verwendung des Smart Tasks-Fensters.
2
• Das Ändern der Konfiguration einer Datenquelle.
• Das Ausführen einer Anwendung in einem Browser.
177
RAD Studio für .NET
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 3 (
page 192)
see
2.5 ASP.NET – Anleitungen
Dieses Beispiel zeigt die weitere Entwicklung einer Webseite, die ein GridViewund ein Datenbank-Steuerelement enthält. In diesem Teil wird ein
FormView-Steuerelement zum Einfügen von Zeilen hinzugefügt. Das Beispiel
illustriert:
• Das Hinzufügen einer ASP.NET-Komponente zu einem
Formular.
• Die Verwendung des Smart Tasks-Fensters.
• Die Bearbeitung der Auszeichnungssprache, um das
Aussehen einer Komponente zu ändern.
• Das Ausführen einer Anwendung in einem Browser.
ASP.NET-Anwendung "Hello World" erstellen (
Erstellen einer ASP.NET Sitemap (
see page 193)
Die ASP.NET-Anwendung "Hello World" ist zwar sehr einfach, zeigt aber
dennoch die wesentlichen Schritte, die zum Erstellen einer
ASP.NET-Anwendung erforderlich sind. Die Anwendung verwendet ein Web
Form, Steuerelemente und ein Ereignis, das in Reaktion auf eine Benutzeraktion
ein Ergebnis anzeigt.
see page 194)
Dieses Beispiel zeigt, wie eine Website mit einer Sitemap einem Menü, einem
SiteMapPath und einer Master-Seite erstellt wird. Eine web.sitemap-Datei ist
eine XML-Datei, die die Struktur einer Website beschreibt. Eine Master-Seite
dient als Template für Seiten in der Website. Ein Menü und ein SiteMapPath
ermöglichen die Navigation in einer Website. Das Beispiel illustriert:
• Das Erstellen einer Web-Sitemap.
• Das Erstellen einer Master-Seite.
• Das Hinzufügen eines Menüs und eines SiteMapPath zu
einer Master-Seite.
• Die Verwendung des Smart Tasks-Fensters.
• Das Hinzufügen von Inhaltsseiten, die auf die
Master-Seite der Site verweisen.
• Das Ausführen einer Anwendung in einem Browser.
Das Beispiel erstellt die... more (
Aktenkoffermodell-Anwendung mit DB Web Controls erstellen (
Anwendung mit DB Web Controls erstellen (
2
see page 199)
see page 198)
see page 194)
Sie können mit Hilfe von DB Web Controls, der XML-Zwischenspeicherung und
der BDP.NET-Datenadapter serverseitige Aktenkoffermodell-Anwendungen
erstellen. Für diese Anwendungsart ist eine Benutzerauthentifizierung zwingend
erforderlich, da jeder Benutzer über eine eigene Kopie der XML-Datei verfügen
muss.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
Die folgende Anleitung beschreibt, wie Sie mit wenigen Schritten eine einfache
ASP.NET-Datenbankanwendung mit DB Web Controls und BDP.NET erstellen
können. Wenn die erforderlichen Verbindungsobjekte generiert sind, werden die
Daten im Projekt in einer DBWebGrid-Komponente angezeigt, die über eine
DBWebNavigator-Komponente gesteuert wird. Zu anderen häufig verwendeten
DB Web Controls werden zusätzliche Informationen bereitgestellt.
Der Benutzer sollte bereits mit der Erstellung von ASP.NET-Projekten mit
BDP.NET vertraut sein.
Die Erstellung einer einfachen ASP.NET-Anwendung mit DB Web Controls und
BDP.NET umfasst drei grundlegende Schritte:
1. Ein ASP.NET-Projekt mit BDP.NET oder anderen
Verbindungskomponenten anlegen.
2. Eine DBWebDataSource-Komponente in den Designer
einfügen und deren Eigenschaft DataSource auf ein...
more ( see page 199)
178
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
HTML-Elemente in Server Controls konvertieren (
see page 200)
Im Gegensatz zu Web Controls unterstützen HTML-Elemente die
programmseitige Steuerung nicht standardmäßig. Es ist jedoch möglich, ein
HTML-Element in ein Server Control zu konvertieren, auf das per Programm
zugegriffen und das geändert werden kann. Die meisten HTML-Elemente, die in
der Tool-Palette angeboten werden, lassen sich mit Hilfe des Befehls Als
Server-Control ausführen konvertieren. HTML-Elemente, auf die nicht über die
Tool-Palette zugegriffen werden kann (z.B. body), können manuell konvertiert
werden.
Im Folgenden wird gezeigt, wie eine HTML-Tabelle (table-Element) mit dem
Befehl Als Server-Control ausführen, und wie ein body-Element manuell
konvertiert wird.
XML-Datei für DB Web Controls erstellen (
see page 201)
XML-Dateien können als Datenquelle verwendet werden. Dieses Vorgehen bietet
sich vor allem für die Erstellung von Prototypanwendungen an, die keine Leseund Schreibzugriffe auf eine Datenbank erfordern. Die betreffenden XML-Dateien
müssen aber vorher erstellt werden. Ideal geeignet für diesen Zweck ist die
DBWebDataSource-Komponente. Mit ihrer Hilfe können Sie eine XML-Datei
erstellen, die auf echten Datenbankdaten basiert. In der vorliegenden Anleitung
wird davon ausgegangen, dass Sie eine Verbindung zu der Datenbank herstellen
können, die die gewünschten Daten enthält.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
Metadaten für eine Datenmenge erstellen (
see page 203)
Wenn Sie in einer ASP.NET-Anwendung mit DB Web Controls eine XML-Datei
als Datenquelle verwenden, müssen Sie möglicherweise Metadaten erzeugen,
um die XML-Daten im DataSet-Objekt zu strukturieren. Wird die XML-Datei ohne
XML-Schemadatei (.xsd) erstellt, müssen die Metadaten manuell erzeugt
werden. In der vorliegenden Anleitung wird davon ausgegangen, dass bereits
eine XML-Datei mit Daten vorhanden ist.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
Virtuelle Verzeichnisse erstellen (
see page 204)
Wenn Sie eine ASP.NET-Anwendung erstellen, erzeugt die IDE ausgehend von
den Einstellungen im Dialogfeld Neue ASP.NET-Webanwendung automatisch
ein virtuelles Verzeichnis.
Die IDE kann jedoch auch ein virtuelles Verzeichnis für eine Anwendung
anlegen, die nicht in der IDE erstellt wurde, beispielsweise für die
Demo-Anwendungen im Ordner DBWeb.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
Aggregatwerte mit der DBWebAggregateControl-Komponente hinzufügen (
page 204)
ASP.NET-Anwendungen debuggen und aktualisieren (
see Sie können mit Hilfe einer DBWebAggregateControl-Komponente eine
Standard-Aggregatfunktion (Zusammenfassung) für eine Datenspalte
implementieren. Der Aggregatwert wird in einem Textfeld angezeigt, dem ein
Titel zugeordnet werden kann.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
see page 205)
Während der Installation von RAD Studio werden Sie gefragt, ob die Datei
machine.config auf Ihrem Computer aktualisiert werden soll. Dies ist für das
Debuggen von RAD Studio-Anwendungen unter IIS erforderlich. Wenn Sie auf
die Frage mit Ja antworten, werden Borland-Debugger-Informationen in die Datei
machine.config geschrieben und den Anwendungen zur Verfügung gestellt,
die mit Delphi 8 erstellt wurden. Sie müssen diese Anweisung nicht ausführen.
Sollten Sie die Frage mit Nein beantworten, werden die Debugger-Informationen
in die Datei web.config der Anwendung geschrieben, wenn Sie eine
ASP.NET-Anwendung mit RAD Studio erzeugen. Für Anwendungen, die mit
Delphi 8 erstellt wurden, müssen Sie diese Informationen... more ( see page
205)
Deployment einer ASP.NET-Anwendung mit Blackfish SQL an ein System ohne
RAD Studio ( see page 206)
Sie können eine ASP.NET-Anwendung mit Blackfish SQL an ein System ohne
RAD Studio weitergeben.
HTTP-Meldungen in ASP.NET erzeugen (
see page 207)
Beim Debuggen Ihrer ASP.NET-Anwendungen werden möglicherweise
unverständliche oder bedeutungslose Fehlermeldungen ausgegeben. Grund
hierfür ist die Einstellung einer bestimmten Option im Internet Explorer. Sie
können das Debuggen Ihrer Anwendung vereinfachen, indem Sie diese
Einstellung ändern.
Spalten in DBWebGrid-Objekten binden (
see page 207)
In bestimmten Situationen kann es notwendig sein, die Reihenfolge zu ändern, in
der die Spalten in einem DBWebGrid-Objekt angeordnet sind. Hierzu ist es
möglich, die Spalten im Property Builder manuell zu binden.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
179
2
ASP.NET-Anwendungen erstellen
RAD Studio für .NET
Berechtigungen für die Nutzung von XML-Dateien festlegen (
Fehlerbehebung in ASP.NET-Anwendungen (
Den DB Web Control-Experten verwenden (
see page 209)
see page 211)
Den ASP.NET-Deploymentmanager verwenden (
Mit dem HTML-Tag-Editor arbeiten (
ASP.NET User Controls verwenden (
see page 208)
see page 212)
see page 215)
see page 216)
2.5 ASP.NET – Anleitungen
Um bei Verwendung von XML-Dateien als Datenquelle Zugriffsfehler zu
vermeiden, müssen Sie Clients, die Ihre ASP.NET-Anwendungen nutzen,
Berechtigungen zuweisen. Sie haben hierzu zwei Möglichkeiten, die im
Folgenden beschrieben werden.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
Im Gegensatz zu herkömmlichen, fensterbasierten Anwendungen sind
Webanwendungen von Servern und Ressourcen abhängig, die nicht unmittelbar
durch die Anwendung oder den Benutzer gesteuert werden können. Viele
Webanwendungen greifen auf Client-, Server- und Netzwerkressourcen zu.
Um Fehler zu minimieren, müssen die Bereiche ASP.NET-Installation,
IIS-Installation und -Konfiguration und Sicherheit einer besonderen Überprüfung
unterzogen werden. Alle drei Bereiche sind sehr umfangreich und komplex. In
den folgenden Anleitungen werden Lösungen für die gängigsten Probleme
vorgestellt.
Anmerkung: Die folgenden Lösungen gelten nur für IIS 5.1.
Mit dem DB Web Control-Experten können Sie ein datensensitives Web Control
aus einem Standard-Web Control erstellen.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007
veraltet. Sie sollten statt dessen die Standard-Websteuerelemente verwenden.
Sie können einem ASP.NET-Anwendungsprojekt einen
ASP.NET-Deploymentmanager hinzufügen, um die Weitergabe der Anwendung
zu vereinfachen. Der Deploymentmanager bestimmt die Dateien, die für das
Deployment erforderlich sind, fordert den Namen des Zielverzeichnisses und die
Verbindungsinformationen an und kopiert die Dateien in das Zielverzeichnis. Der
Deploymentmanager erzeugt eine Liste der zu kopierenden Dateien basierend
auf den Namen der Dateien im Projektverzeichnis. Sie können dieser Liste aber
nach Bedarf weitere Dateien hinzufügen oder Dateien daraus entfernen.
Wenn Sie im Fenster des Deploymentmanagers mit der rechten Maustaste
klicken, werden die Optionen zum Anzeigen, Kopieren, Löschen, Ändern und
Filtern der Zieldateien angezeigt.
Ist die Option Assemblierungsreferenzen... more ( see page 212)
Sie können zur Erstellung oder Bearbeitung einer HTML-Datei den Tag-Editor
verwenden. Dieser Editor befindet sich unterhalb des Designer-Fensters. Für
ASP.NET Webformulare wird der Tag-Editor nicht unterstützt. Wenn Sie
beispielsweise ein HTML-Formular verwenden, können Sie den Tag-Editor im
Designer durch Auswahl von Ansicht Tag-Editor anzeigen.
Im Tag-Editor können Sie HTML-Tags überprüfen und ändern und gleichzeitig
die entsprechenden Steuerelemente im Designer-Fenster darüber beobachten.
Der Editor unterstützt die folgenden Funktionen des Quelltext-Editors:
Programmierhilfe, Fehlermarkierung und Live-Template-Vervollständigung.
Ausführliche Informationen zu diesen Funktionen finden Sie über die
entsprechenden Links am Ende dieses Themas.
Im Tag-Editor wird jeweils nur ein Tag bearbeitet, sofern... more ( see page
215)
User Controls ermöglichen es, eine häufig verwendete Funktionalität der
Benutzeroberfläche für alle ASP.NET-Webanwendungen bereitzustellen. Es ist
beispielsweise möglich, einen Anmeldebildschirm in einem User Control zu
kapseln. Wenn später in einem Web Form ein Anmeldebildschirm benötigt wird,
muss nur das betreffende User Control in das Web Form eingefügt werden.
Ausführliche Informationen über User Controls erhalten Sie über den Link am
Ende dieses Themas.
2
2.5.1 ASP.NET-Anwendungen erstellen
Die folgende Anleitung beschreibt die grundlegenden Schritte zum Erstellen eines einfachen ASP.NET-Projekts. Informationen
zu weiterführenden Themen finden Sie in den Hinweisen im Anschluss an diese Anleitung.
So erstellen Sie ein ASP.NET-Projekt:
1. Erstellen Sie ein neues ASP.NET-Projekt, indem Sie Datei Neu ASP.NET-Webanwendung wählen. Das Dialogfeld Neue
ASP.NET-Webanwendung wird geöffnet.
2. Geben Sie in das Feld Name einen Namen für das Projekt ein.
3. Geben Sie in das Feld Speicherort den Verzeichnispfad des Projekts ein, oder übernehmen Sie den Standardpfad.
180
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
ASP.NET-Datenbankanwendung erstellen
So ändern Sie die Webserver-Einstellungen (optional):
1. Klicken Sie im Dialogfeld Neue ASP.NET-Webanwendung auf Serveroptionen einblenden. Das Dialogfeld wird dann
erweitert und zeigt zusätzliche Optionen für Server an.
2. Setzen Sie die verschiedenen Lese- und Schreibattribute für das Projekt wie gewünscht, oder übernehmen Sie die
Voreinstellungen.
Tip: In den meisten Fällen sind die Voreinstellungen ausreichend.
3. Klicken Sie auf OK. Der Web Forms-Designer wird angezeigt.
So erstellen Sie eine ASP.NET-Seite:
1. Stellen Sie sicher, dass der Designer angezeigt wird.
2. Ziehen Sie Komponenten aus der Tool-Palette in den Designer, um die Benutzeroberfläche zu erstellen.
3. Fügen Sie die Codebehind-Logik für die Komponenten hinzu.
So programmieren Sie die Codebehind-Logik für eine Komponente:
1. Doppelklicken Sie im Designer auf die Komponente, die Sie mit einer Logik ausstatten möchten. Der Codebehind-Designer
wird angezeigt. Der Cursor steht bereits im Rumpf der Ereignisbehandlungsroutine.
2. Fügen Sie die erforderliche Logik ein.
So zeigen Sie die Auszeichnungssprache an und bearbeiten sie:
1. Klicken Sie im Quelltext-Editor auf die Registerkarte ApplicationName.aspx, um HTML- und
ASP.NET-Komponenteninformationen in der Auszeichnungssprache anzuzeigen.
2. Bearbeiten Sie die Auszeichnungssprache.
3. Speichern Sie die Datei.
So führen Sie die Anwendung aus:
1. Wählen Sie Start Start, um die Anwendung auszuführen.
2. Alternativ können Sie im Quelltext-Editor mit der rechten Maustaste klicken und im Kontextmenü Im Browser anzeigen
wählen.
3. Die Anwendung wird gespeichert und compiliert. Sobald Sie die Anwendung compilieren, zeigt die generierte .aspx-Datei
HTML im Standard-Webbrowser an.
Siehe auch
Überblick zu ASP.NET (
see page 85)
ASP.NET-Anwendung "Hello World" erstellen (
2
see page 193)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 1 (
see page 189)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 2 (
see page 191)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 3 (
see page 192)
Erstellen einer ASP.NET Sitemap (
see page 194)
181
ASP.NET-Datenbankanwendung erstellen
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
2.5.2 ASP.NET-Datenbankanwendung erstellen
Die folgende Anleitung beschreibt, wie Sie mit wenigen Schritten eine einfache ASP.NET-Datenbankanwendung, wie z.B.
BDP.NET, erstellen können. Wenn die erforderlichen Verbindungsobjekte generiert sind, werden die Daten im Projekt in einem
Datengitter (DataGrid) angezeigt.
Detailliertere Datenbankbeispiele, die andere Datenbanktechnologien für ASP.NET 2.0 verwenden, finden Sie unter
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 1 ( see page 189).
BDP.NET enthält Komponenten-Designer, mit deren Hilfe sich Datenbankanwendungen einfach erstellen lassen. Anstatt jede
einzelne Komponente in einem Designer zu platzieren und zu konfigurieren, lassen sich mit den BDP.NET-Designern
Datenbankkomponenten deutlich schneller erstellen und konfigurieren. Die folgende Anleitung zeigt die Funktionsweise der
Hauptkomponenten von ASP.NET, ADO.NET und BDP.NET.
Die Erstellung einer ASP.NET-Anwendung mit Datenbankkomponenten umfasst vier grundlegende Schritte:
1. Ein ASP.NET-Projekt erstellen.
2. Datenbankverbindungskomponenten und eine Datenquelle konfigurieren.
3. Einen Aufruf für die Datenbindung einfügen.
4. Eine DataGrid-Komponente mit den Verbindungskomponenten verbinden.
Tip: Zu Testzwecken können Sie die in Interbase enthaltene Datenbank EMPLOYEE.GDB verwenden, sofern diese in Ihrer
Produktversion enthalten ist.
So erstellen Sie ein ASP.NET-Projekt:
1. Wählen Sie Datei Neu ASP.NET-Webanwendung. Das Dialogfeld Neue ASP.NET-Webanwendung wird angezeigt.
2. Geben Sie in das Feld Name einen Namen für das Projekt ein.
3. Übernehmen Sie im Feld Speicherort den Standardpfad oder geben Sie einen anderen Projektpfad ein.
So ändern Sie die Webserver-Einstellungen (optional):
1. Klicken Sie im Dialogfeld Neue ASP.NET-Webanwendung auf Serveroptionen einblenden. Das Dialogfeld wird dann
erweitert und zeigt zusätzliche Optionen für Server an.
2. Setzen Sie die verschiedenen Lese- und Schreibattribute für das Projekt wie gewünscht, oder übernehmen Sie die
Voreinstellungen.
Tip: In den meisten Fällen sind die Voreinstellungen ausreichend.
2
3. Klicken Sie auf OK. Der Web Forms-Designer wird angezeigt.
So konfigurieren Sie die Datenkomponenten:
1. Ziehen Sie eine BdpDataAdapter-Komponente in den Designer. Stellen Sie sicher, dass die BdpDataAdapter-Komponente
ausgewählt ist.
2. Wählen Sie im Objektinspektor die Option Datenadapter konfigurieren. Das Dialogfeld Datenadapter-Konfiguration wird
geöffnet.
3. Falls erforderlich, aktivieren Sie die Registerkarte Anweisung. Wählen Sie in der Dropdown-Liste Verbindung den Eintrag
Neue Verbindung.
4. Das Dialogfeld Borland Daten-Provider: Verbindungseditor wird angezeigt.
Tip: Alternativ können Sie den Daten-Explorer verwenden, um eine Tabelle auf die Oberfläche des Designers zu ziehen. Der
182
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
ASP.NET-Datenbankanwendung erstellen
Daten-Explorer definiert den Verbindungsstring automatisch.
So richten Sie eine Verbindung ein:
1. Wählen Sie im Dialogfeld Borland Daten-Provider: Verbindungseditor das erforderliche Element in der Liste
Verbindungen aus.
2. Geben Sie unter Einstellungen den Pfad zur Datenbank ein.
Anmerkung: Soll der Bezug zu einer Datenbank auf der lokalen Festplatte hergestellt werden, stellen Sie der Pfadangabe
den Eintrag localhost:
voran. Wenn Sie mit Interbase arbeiten, können Sie beispielsweise den Pfad zu Ihrer Interbase-Datenbank wie folgt
eingeben: localhost:C:\Programme\Borland\Interbase\Examples\Database\employee.gdb (oder
entsprechend dem aktuellen Pfad auf Ihrem System).
3. Füllen Sie die Felder Benutzername und Passwort wie für die Datenbank erforderlich aus.
4. Klicken Sie auf Test, um die Verbindung zu überprüfen. Es wird ein Dialogfeld angezeigt, in dem der Verbindungsstatus
bestätigt wird.
5. Klicken Sie auf OK, um zum Dialogfeld Borland Daten-Provider: Verbindungseditor zurückzukehren.
6. Klicken Sie auf OK, um zum Dialogfeld Datenadapter-Konfiguration zurückzukehren. Auf der Registerkarte Anweisung
wurden die Bereiche für die Tabellen und Spalten mit den Informationen aus Ihrer Verbindung aktualisiert.
So legen Sie eine Anweisung fest:
1. Geben Sie im Bereich Auswählen eine SQL-Anweisung ein.
Tip: Wenn Sie mit der Interbase-Datenbank EMPLOYEE.GDB arbeiten, könnten Sie zum Beispiel select * from SALES
eingeben.
2. Aktivieren Sie die Registerkarte Daten in der Vorabansicht.
3. Klicken Sie auf Aktualisieren. Die Daten für Spalten und Zeilen werden angezeigt.
4. Klicken Sie auf die Registerkarte DataSet.
5. Stellen Sie sicher, dass Neues DataSet ausgewählt ist.
6. Klicken Sie auf OK. Im Designer werden neue Komponenten für DataSet und BdpConnection angezeigt.
7. Wählen Sie die Komponente BdpDataAdapter aus.
8. Öffnen Sie im Objektinspektor die Dropdown-Liste der Eigenschaft Active, und wählen Sie True.
So verbinden Sie ein Datengitter (DataGrid) mit einer Datenmenge:
1. Ziehen Sie das Web Control DataGrid in den Designer. Stellen Sie sicher, dass die DataGrid-Komponente ausgewählt ist.
2. Öffnen Sie im Objektinspektor die Dropdown-Liste der Eigenschaft DataSource. Wählen Sie die DataSet-Komponente aus,
die Sie zuvor generiert haben (die Voreinstellung ist DataSet1).
3. Öffnen Sie im Objektinspektor die Dropdown-Liste der Eigenschaft DataMember. Wählen Sie die passende Tabelle aus.
Das DataGrid-Objekt zeigt die Daten aus der DataSet-Komponente an.
So fügen Sie einen Aufruf für die Datenbindung ein:
1. Wählen Sie in der Dropdown-Liste im Objektinspektor das Web Form aus (WebForm1 ist die Standardeinstellung).
2. Aktivieren Sie im Objektinspektor die Registerkarte Ereignisse.
3. Setzen Sie das Ereignis Load auf Page_Load.
4. Doppelklicken Sie im Objektinspektor auf Page_Load. Der Codebehind-Designer wird angezeigt. Der Cursor steht bereits
im Rumpf der Ereignisbehandlungsroutine.
5. Geben Sie folgenden Code für die Datenbindung ein:
183
2
ASP.NET-Anwendung mit
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
this.dataGrid1.DataBind();
Self.dataGrid1.DataBind();
Anmerkung: Wenn Sie datensensitive Steuerelemente verwenden, beispielsweise von einem Fremdhersteller, müssen Sie
unter Umständen keinen Code für die Datenbindung eingeben.
6. Wählen Sie Start Start. Die Anwendung wird compiliert, und der HTTP-Server zeigt ein Web-Formular mit der
DataGrid-Komponente an.
In dieser Anleitung wurde gezeigt, wie sich mit wenigen Schritten ein Datenbankprojekt unter Verwendung der wesentlichen
Komponenten von ASP.NET, ADO.NET und der BDP.NET-Architektur erstellen lässt. Zu den wichtigsten Komponenten
zählen: Provider, Datenmengen und Adapter. Der Adapter stellt über einen Provider eine Verbindung zur eigentlichen
Datenquelle her und sendet eine Anweisung an sie, um die Daten aus der Datenquelle einzulesen und in eine Datenmenge
einzufügen. Sobald die Datenmenge gefüllt ist, zeigt ein Datengitter die Daten aus der Datenmenge an.
Ist dies alles einmal erstellt, können Sie mit anderen BDP.NET-Designern die Komponenten Ihres Projekts bearbeiten und
verwalten.
Siehe auch
Überblick zu ASP.NET (
see page 85)
Überblick zu ADO.NET (
see page 15)
Daten-Provider für .NET (
see page 28)
ADO.NET-Komponentendesigner (
see page 23)
Datenbank-Projekte mit dem Daten-Explorer erstellen (
see page 120)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 1 (
see page 189)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 2 (
see page 191)
ASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 3 (
see page 192)
2.5.3 ASP.NET-Anwendung mit Datenbanksteuerelementen
entwickeln, Teil 1
Dieses erweiterte Beispiel zeigt, wie eine Webseite erstellt wird, die ein GridView- und ein Datenbank-Steuerelement enthält.
Das Beispiel illustriert:
• Das Hinzufügen einer ASP.NET-Komponente zu einem Formular.
• Die Verwendung des Smart Tasks-Fensters.
2
• Das Konfigurieren und Verbinden mit einer Datenquelle.
• Die Verwendung von SQL zum Lesen von Daten aus einer Datenbank.
• Das Ausführen einer Anwendung in einem Browser.
Anmerkung: Sie können nur ASP.NET-Projekte in CodeGear RAD Studio erstellen (keine Win32-Personalities).
So erstellen Sie eine Seite, die ein GridView- und ein Datenbank-Steuerelement enthält:
1. Erstellen Sie ein neues ASP.NET-Projekt, indem Sie Datei Neu ASP.NET-Webanwendung wählen.
2. Geben Sie im Dialogfeld Neue ASP.NET-Webanwendung einen Namen für das Projekt ein.
• Geben Sie in das Feld Speicherort den Verzeichnispfad des Projekts ein, oder übernehmen Sie den Standardpfad.
• Wählen Sie in der Dropdown-Liste Server entweder Cassini oder IIS aus. Klicken Sie auf OK.
184
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
ASP.NET-Anwendung mit
3. (Optional) Klicken Sie im Dialogfeld Neue ASP.NET-Webanwendung auf Serveroptionen einblenden. Das Dialogfeld wird
dann erweitert und zeigt zusätzliche Optionen für Server an. Setzen Sie die verschiedenen Lese- und Schreibattribute für das
Projekt wie gewünscht, oder übernehmen Sie die Voreinstellungen.
Tip: In den meisten Fällen sind die Voreinstellungen ausreichend.
4. Wählen Sie im Quelltext-Editor die Registerkarte Design aus. Doppelklicken Sie in der Tool-Palette unter Daten-Web 2.0
auf eine GridView-Komponente, um sie der Anwendung hinzuzufügen.
5. Zeigen Sie das Smart Tasks-Fenster der GridView-Komponente an, indem Sie entweder auf den Pfeil in der rechten, oberen
Ecke der GridView-Komponente klicken oder im Kontextmenü der Komponente Smart Tasks auswählen.
6. Um die GridView-Komponente mit einer Datenquelle zu verbinden, klicken Sie in der Dropdown-Liste Datenquelle
auswählen auf <Neue Datenquelle>. Das Dialogfeld Datenquellentyp auswählen wird angezeigt, das Bestandteil des
Assistenten zum Konfiguration von Datenquellen ist.
7. Wählen Sie im Dialogfeld Datenquellentyp auswählen Datenbank. Geben Sie eine ID für die Datenquelle ein und klicken
Sie auf OK, um das Dialogfeld Wählen Sie Ihre Datenverbindung anzuzeigen.
8. Klicken Sie im Dialogfeld Wählen Sie Ihre Datenverbindung auf Neue Verbindung.
9. Das Dialogfeld Datenquelle auswählen enthält entsprechend Ihrer Konfiguration mehrere Datenquellen. Möglich sind:
• AdoDbx: AdoDbx Client
• Microsoft SQL Server: Microsoft SQL Server
• Blackfish SQL: Blackfish SQL Server Wählen Sie aus den Listen die Datenquelle und den Daten-Provider für diese
Datenquelle aus. Klicken Sie auf Fortsetzen
10. Geben Sie im Dialogfeld Verbindung hinzufügen die entsprechenden Verbindungsinformationen ein.
• Klicken Sie bei Bedarf auf Erweitert, um detailliertere Verbindungsinformationen für Ihre Datenquelle einzugeben.
• Klicken Sie auf die Schaltfläche Verbindung testen, um die Verbindung zu testen Klicken Sie auf OK, um das Dialogfeld zu
schließen.
11. Klicken Sie im Dialogfeld Wählen Sie Ihre Datenverbindung auf Weiter, um mit der Konfiguration der Datenquelle
fortzufahren.
12. Geben Sie im Dialogfeld Verbindungszeichenfolge in der Anwendungskonfigurationsdatei speichern einen Namen ein,
und markieren Sie das Kontrollkästchen Ja, diese Verbindung speichern als. Dadurch verweist die Eigenschaft
ConnectionString der Datenquelle auf den Namen, den Sie eingegeben haben, anstatt auf den tatsächlichen
Verbindungs-String. Die Datei web.config in diesem Projekt enthält den Verbindungs-String, der auf den hier eingegebenen
Informationen beruht. Klicken Sie auf Weiter.
13. Wählen Sie im Dialogfeld Die Select-Anweisung konfigurieren aus, ob Sie entweder eine benutzerdefinierte
SQL-Select-Anweisung angeben oder eine SQL-Select-Anweisung für die Datenbank erzeugen lassen möchten. Wenn Sie
die Anweisung erzeugen lassen, wählen Sie die Tabelle in der Dropdown-Liste Name aus, markieren die gewünschten
Spalten und klicken optional auf die Schaltflächen WHERE, ORDER BY oder Erweitert, um die SQL-Anweisung
einzugrenzen. Im Feld SELECT-Anweisung wird die erzeugte SQL-Anweisung angezeigt. Wenn Sie die SQL-Anweisung
direkt festlegen möchten, klicken Sie auf Weiter, um das Dialogfeld Benutzerdefinierte Anweisungen oder gespeicherte
Prozeduren definieren anzuzeigen und die Felder zu vervollständigen. Optional können Sie auf Abfrage-Generator klicken,
um ein Dialogfeld anzuzeigen, in dem Sie eine SELECT-Anweisung grafisch erstellen können. Indem Sie auf die
entsprechenden Registerkarten klicken, können Sie SQL-Anweisungen für SELECT-, UPDATE-, INSERT- und
DELETE-Anweisungen erstellen. Klicken Sie im jeweiligen Dialogfeld auf Weiter, um mit der Konfiguration der Datenquelle
fortzufahren.
Anmerkung: Wenn Sie die SQL-Anweisungen direkt eingegeben haben, können Sie die Funktion zum automatischen
Erstellen von INSERT-, UPDATE- und DELETE-Anweisungen nicht verwenden.
Anmerkung: Der Abfrage-Generator
kann keine SELECT-Anweisungen erstellen.
14. (Optional) Im Dialogfeld Testabfrage können Sie auf Testabfrage klicken, um Ihre SQL-Abfrage probeweise auszuführen.
Wenn Ihre Abfrage erfolgreich ist, werden die entsprechenden Daten in dem Dialogfeld angezeigt. Klicken Sie auf Fertig
185
2
ASP.NET-Anwendung mit
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
stellen, um die Konfiguration der Datenquelle abzuschließen.
15. (Optional) Beachten Sie, dass die Eigenschaft ConnectionString den Verbindungs-String enthält, wenn Sie auf der
Registerkarte Design die Komponente SQLDataSource auswählen. Die Verbindungs-String-Daten werden auch in der Datei
web.config im Element connectionStrings gespeichert:
16. (Optional) Klicken Sie im Quelltext-Editor auf die Registerkarte Default.aspx, um HTML- und
ASP.NET-Komponenteninformationen in der Auszeichnungssprache anzuzeigen. Die Eigenschaft GridView Columns enthält
Felder, die den Tabellenspaltennamen Ihrer Datenbank zugeordnet sind.
17. Zum Anzeigen der Seite in einem Webbrowser klicken Sie im Quelltext-Editor mit der rechten Maustaste und wählen aus
dem Kontextmenü Im Browser anzeigen. Das Projekt wird erzeugt und ein Fenster mit dem Build-Status angezeigt, das bei
Fertigstellung des Builds wieder geschlossen wird. Der Browser zeigt eine Tabelle für die Datenbank an, mit der Sie arbeiten.
Damit ist Teil 1 des Beispiels abgeschlossen.
Siehe auch
Überblick zu ASP.NET (
see page 85)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 191)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 192)
Erstellen einer ASP.NET Sitemap (
see page 194)
2.5.4 ASP.NET-Anwendung mit Datenbanksteuerelementen
entwickeln, Teil 2
Dieses Beispiel zeigt die weitere Entwicklung einer Webseite, die ein GridView- und ein Datenbank-Steuerelement enthält. In
den folgenden Schritten werden dem GridView-Steuerelement weitere Funktionen, einschließlich dem Bearbeiten, hinzugefügt.
Das Beispiel illustriert:
• Die Verwendung des Smart Tasks-Fensters.
• Das Ändern der Konfiguration einer Datenquelle.
• Das Ausführen einer Anwendung in einem Browser.
So fügen Sie dem GridView-Steuerelement Bearbeitungsfunktionen hinzu:
1. Öffnen Sie das Projekt oder setzen Sie dessen Entwicklung fort, das unter ASP.NET-Datenbankanwendung entwickeln (
see page 189) beschrieben ist. Am Ende dieser Phase zeigte der Designer ein GridView- und ein
SqlDataSource-Steuerelement in Bereich Design des Quelltext-Editors an.
2
2. Um die GridView-Anzeigefunktionen zu aktivieren, öffnen Sie das Smart Tasks-Fenster, indem Sie in der rechten, oberen
Ecke des GridView-Steuerelements auf den Pfeil klicken. Markieren Sie Sortieren aktivieren, Auswahl aktivieren und
Paging aktivieren. Die Darstellung des GridView-Steuerelements wird aktualisiert.
3. Zum Anzeigen der Seite in einem Webbrowser klicken Sie im Quelltext-Editor mit der rechten Maustaste und wählen aus
dem Kontextmenü Im Browser anzeigen. Paging, Sortierung und Auswahl werden nun von diesem Gitter unterstützt. Die
Spalten lassen sich sortieren, indem Sie den jeweiligen Spaltenamen am oberen Ende der Spalte anklicken. Auswahl scheint
nicht zu funktionieren, weil das Format des GridView-Steuerelements ausgewählte Zeilen nicht markiert. Das Paging ist nicht
aktiviert, wenn die Daten auf eine Seite passen.
4. Wechseln Sie zurück zum Bereich Design des Quelltext-Editors. Öffnen Sie das Smart Tasks-Fenster des
GridView-Steuerelements und klicken Sie auf Auto-Format, um das Dialogfeld Auto-Format zu öffnen. Wählen Sie
Klassisch. Die Beschreibung der Default.aspx-Datei für die asp:GridView-Komponente verfügt nun über Stileigenschaften,
die durch die Auswahl von Klassisch im Dialogfeld Auto-Format geändert wurden.
5. Bislang war die Zeilenauswahl aktiviert. Zum Aktivieren der Zeilenbearbeitung müssen Sie die Verbindung evtl. neu
186
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
ASP.NET-Anwendung mit
konfigurieren. Klicken Sie im Smart Tasks-Fenster des GridView-Steuerelements auf Datenquelle konfigurieren. Klicken
Sie im Dialogfeld Wählen Sie Ihre Datenverbindung auf Weiter. Klicken Sie im Dialogfeld Die Select-Anweisung
konfigurieren auf Erweitert. Markieren Sie im Dialogfeld Erweiterte SQL-Generierungsoptionen INSERT-, UPDATE- und
DELETE-Anweisungen generieren. Klicken Sie auf OK, um das Dialogfeld Erweiterte SQL-Generierungsoptionen zu
schließen.
Anmerkung: Sie können das Dialogfeld Erweiterte SQL-Generierungsoptionen
nicht verwenden, wenn Sie im Dialogfeld Die Select-Anweisung konfigurieren festgelegt haben, eigene SQL-Anweisungen
zu erstellen.
6. Klicken Sie im Dialogfeld Die Select-Anweisung konfigurieren auf Weiter und dann auf Fertig stellen, um den Assistenten
zu beenden.
7. Das Smart Tasks-Fenster enthält nun die Kontrollkästchen Bearbeiten aktivieren und Löschen aktivieren. Markieren Sie
beide. Das GridView-Steuerelement zeigt nun die Links Bearbeiten und Löschen an.
8. Zum Anzeigen der Seite in einem Webbrowser klicken Sie im Quelltext-Editor mit der rechten Maustaste und wählen aus
dem Kontextmenü Im Browser anzeigen. Die Links Bearbeiten, Löschen und Auswählen arbeiten für alle Zeilen.
Damit ist Teil 2 des Beispiels abgeschlossen.
Siehe auch
Überblick zu ASP.NET (
see page 85)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 189)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 192)
Erstellen einer ASP.NET Sitemap (
see page 194)
2.5.5 ASP.NET-Anwendung mit Datenbanksteuerelementen
entwickeln, Teil 3
Dieses Beispiel zeigt die weitere Entwicklung einer Webseite, die ein GridView- und ein Datenbank-Steuerelement enthält. In
diesem Teil wird ein FormView-Steuerelement zum Einfügen von Zeilen hinzugefügt. Das Beispiel illustriert:
• Das Hinzufügen einer ASP.NET-Komponente zu einem Formular.
• Die Verwendung des Smart Tasks-Fensters.
• Die Bearbeitung der Auszeichnungssprache, um das Aussehen einer Komponente zu ändern.
• Das Ausführen einer Anwendung in einem Browser.
2
So fügen Sie ein FormView-Steuerelement hinzu:
1. Öffnen Sie das Projekt oder setzen Sie dessen Entwicklung fort, das unter ASP.NET-Datenbankanwendung entwickeln (
see page 191) beschrieben ist. Am Ende dieser Phase wurde im Bereich Design des Quelltext-Editors ein GridView- und
ein SqlDataSource-Steuerelement angezeigt.
2. Wählen Sie im Quelltext-Editor die Registerkarte Design aus. Fügen Sie am Ende des Webentwurfs eine neue Zeile ein,
indem Sie die Tasten Strg+Ende und dann Eingabe drücken. Doppelklicken Sie in der Tool-Palette unter Daten-Web 2.0
auf eine FormView-Komponente, um sie dem Formular hinzuzufügen.
3. Zeigen Sie das Smart Tasks-Fenster für die FormView-Komponente an, indem Sie oben rechts in der Komponente auf den
kleinen Pfeil klicken. Wählen Sie in der Dropdown -Liste Datenquelle auswählen die Datenquelle aus, die Sie zuvor
hinzugefügt und konfiguriert haben. Die FormView-Komponente auf der Registerkarte Design zeigt die Datenfelder an.
4. Klicken Sie im Smart Tasks-Fenster der FormView-Komponente auf Auto-Format. Wählen Sie im Dialogfeld Auto-Format
Schiefer aus und klicken Sie auf OK.
187
ASP.NET-Anwendung "Hello World"
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
5. Wählen Sie auf der Registerkarte Design die FormView-Komponente aus. Ändern Sie im Objektinspektor den Wert von
DefaultMode in Insert. Diese Änderung ermöglicht, dass mit dem FormView-Steuerelement Zeilen zu der Datenbank
hinzugefügt werden können.
6. Ursprünglich wurden in dem FormView-Steuerelement Beschriftungen und Felder in derselben Zeile dargestellt: Das
Erscheinungsbild des FormView-Steuerelements wird in der Auszeichnungssprache im Eintrag InsertItemTemplate der
Datei Default.aspx definiert. Zeigen Sie den Text der Datei Default.aspx an, indem Sie auf die Registerkarte Default.aspx
klicken. Damit die Beschriftungen und Felder in separaten Zeilen angezeigt werden, bearbeiten Sie die Datei Default.aspx
und fügen <br/>-Tags hinter den Spaltenbeschriftungen ein. Das FormView-Steuerelement enthält nun die Beschriftungen
und Felder in unterschiedlichen Zeilen.
7. Zum Anzeigen der Seite in einem Webbrowser klicken Sie im Quelltext-Editor mit der rechten Maustaste und wählen aus
dem Kontextmenü Im Browser anzeigen. Das Formular wird nun mit dem Steuerelement FormView zum Einfügen von
Zeilen angezeigt.
Damit ist das Beispiel beendet.
Siehe auch
Überblick zu ASP.NET (
see page 85)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 189)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 191)
Erstellen einer ASP.NET Sitemap (
see page 194)
2.5.6 ASP.NET-Anwendung "Hello World" erstellen
Die ASP.NET-Anwendung "Hello World" ist zwar sehr einfach, zeigt aber dennoch die wesentlichen Schritte, die zum Erstellen
einer ASP.NET-Anwendung erforderlich sind. Die Anwendung verwendet ein Web Form, Steuerelemente und ein Ereignis, das
in Reaktion auf eine Benutzeraktion ein Ergebnis anzeigt.
So erstellen Sie ein ASP.NET-Projekt:
1. Erstellen Sie ein neues ASP.NET-Projekt, indem Sie Datei Neu ASP.NET-Webanwendung wählen. Das Dialogfeld Neue
ASP.NET-Webanwendung wird geöffnet.
2. Geben Sie in das Feld Name den Anwendungsnamen HelloWorld ein.
3. Übernehmen Sie im Feld Speicherort den Standardpfad oder geben Sie einen anderen Pfad ein.
So ändern Sie die Webserver-Einstellungen (optional):
2
1. Klicken Sie im Dialogfeld Neue ASP.NET-Webanwendung auf Serveroptionen einblenden. Das Dialogfeld wird dann
erweitert und zeigt zusätzliche Optionen für Server an.
2. Setzen Sie die verschiedenen Lese- und Schreibattribute für das Projekt wie gewünscht, oder übernehmen Sie die
Voreinstellungen.
Tip: Für die meisten ASP.NET-Projekte sind die Voreinstellungen ausreichend.
3. Klicken Sie auf OK. Der Web Forms-Designer wird angezeigt.
So erstellen Sie eine ASP.NET-Seite:
1. Stellen Sie sicher, dass die Ansicht Design aktiv ist.
2. Ziehen Sie aus der Kategorie Web Controls der Tool-Palette eine Button-Komponente in die Designer-Oberfläche. Die
Button-Komponente wird im Designer angezeigt. Stellen Sie sicher, dass sie ausgewählt ist.
188
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Erstellen einer ASP.NET Sitemap
3. Setzen Sie im Objektinspektor die Eigenschaft Text auf Hello World!.
So fügen Sie Quelltext für die Schaltfläche hinzu:
1. Doppelklicken Sie im Designer auf das Button-Steuerelement. Der Codebehind-Designer wird angezeigt. Der Cursor steht
bereits im Rumpf der Ereignisbehandlungsroutine.
2. Geben Sie den Quelltext für die Anwendungslogik ein:
button1.Text = "Hallo, Entwickler!";
button1.Text := 'Hallo, Entwickler!';
3. Wählen Sie Datei Speichern, um die Anwendung zu speichern.
So führen Sie die Anwendung "Hello World" aus:
1. Wählen Sie Start Start. Die Anwendung wird compiliert, und der HTTP-Server zeigt ein Web Form mit der Schaltfläche
"Hello World!" im Browser an.
2. Klicken Sie auf die Schaltfläche "Hello World!". Der Server aktualisiert die Seite mit der Antwort "Hallo Entwickler!".
3. Schließen Sie den Web-Browser, um in die IDE zurückzukehren.
Siehe auch
Überblick zu ASP.NET (
see page 85)
ASP.NET-Anwendung erstellen (
see page 186)
ASP.NET-Datenbankanwendung erstellen (
see page 187)
2.5.7 Erstellen einer ASP.NET Sitemap
Dieses Beispiel zeigt, wie eine Website mit einer Sitemap einem Menü, einem SiteMapPath und einer Master-Seite erstellt wird.
Eine web.sitemap-Datei ist eine XML-Datei, die die Struktur einer Website beschreibt. Eine Master-Seite dient als Template für
Seiten in der Website. Ein Menü und ein SiteMapPath ermöglichen die Navigation in einer Website. Das Beispiel illustriert:
• Das Erstellen einer Web-Sitemap.
• Das Erstellen einer Master-Seite.
• Das Hinzufügen eines Menüs und eines SiteMapPath zu einer Master-Seite.
• Die Verwendung des Smart Tasks-Fensters.
• Das Hinzufügen von Inhaltsseiten, die auf die Master-Seite der Site verweisen.
• Das Ausführen einer Anwendung in einem Browser.
2
Das Beispiel erstellt die Website in mehreren aufeinander aufbauenden Schritten
Anmerkung: Sie können nur ASP.NET-Projekte in CodeGear RAD Studio erstellen (keine Win32-Personalities).
So fügen Sie eine Sitemap hinzu:
1. Erstellen Sie ein neues ASP.NET-Projekt, indem Sie Datei Neu ASP.NET-Webanwendung wählen.
2. Geben Sie im Dialogfeld Neue ASP.NET-Webanwendung einen Namen für das Projekt ein oder übernehmen Sie den
Standardnamen. Geben Sie in das Feld Speicherort den Verzeichnispfad des Projekts ein, oder übernehmen Sie den
Standardpfad. Wählen Sie in der Dropdown-Liste Server entweder Cassini oder IIS aus.
3. (Optional) Klicken Sie im Dialogfeld Neue ASP.NET-Webanwendung auf Serveroptionen einblenden. Das Dialogfeld wird
dann erweitert und zeigt zusätzliche Optionen für Server an. Setzen Sie die verschiedenen Lese- und Schreibattribute für das
Projekt wie gewünscht, oder übernehmen Sie die Voreinstellungen.
Tip: In den meisten Fällen sind die Voreinstellungen ausreichend.
189
Erstellen einer ASP.NET Sitemap
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
4. Fügen Sie dem Projekt eine neue web.sitemap-Datei hinzu, indem Sie Datei Neu Weitere wählen. Wählen Sie im
Dialogfeld Objektgalerie unter Neue ASP.NET-Dateien Site-Übersicht aus und klicken Sie auf OK. Die IDE zeigt die neue
Registerkarte Web.sitemap mit dem Text einer Sitemap-Template an.
5. Ersetzen Sie den Text der Template auf der Registerkarte Web.sitemap mit dem folgenden Text:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" url="~/home.aspx" >
<siteMapNode title="Book 1" url="~/book1/book1.aspx" >
<siteMapNode title="Chapter 1" url="~/book1/chapter1/chapter1.aspx" >
</siteMapNode>
</siteMapNode>
</siteMapNode>
</siteMap>
Dieser XML-Code definiert die Seitenhierarchie in der Site. Wählen Sie Datei Speichern oder drücken Sie Strg+S, um den
neuen Text zu speichern.
So fügen Sie eine Master-Seite hinzu:
1. Fügen Sie dem Projekt eine neue Master-Seite hinzu, indem Sie Datei Neu Weitere wählen. Wählen Sie im Dialogfeld
Objektgalerie unter Neue ASP.NET-Dateien ASP.NET Master-Seite aus und klicken Sie auf OK. Im Dialogfeld Neue
Master-Seite lautet der Standardname der Master-Seite MasterPage1.master; Sie können einen anderen Namen angeben,
Sie müssen aber die Erweiterung .master beibehalten. Klicken Sie auf OK. Die IDE zeigt die neue Registerkarte
MasterPage1.master an, die eine neue Master-Seite mit Platzhaltern enthält. Der Standardinhalt einer Master-Seite ist ein
einziges ContentPlaceHolder-Steuerelement, mit dem angegeben wird, wo Inhalte in Inhaltsseiten eingefügt werden, die
diese Master-Seite referenzieren. Dieses Beispiel verwendet nur ein ContentPlaceHolder-Steuerelement, aber Sie können
mehrere davon auf einer Master-Seite platzieren.
2. Klicken Sie unten auf der Master-Seite auf das Register MasterPage1.master, um dessen Auszeichnungstext anzuzeigen.
Fügen Sie vor dem Hinzufügen des Menüs und des SiteMapPath-Steuerelements einige <div>-Elemente hinzu, um die
Positionierung der Steuerelemente festzulegen. Ersetzen Sie dazu den Text im body-Element der Master-Seite durch den
folgenden Text:
2
<body>
<form runat="server">
<div id="titlediv" style="WIDTH: 100%">
<h1>Beispiel</h1>
</div>
<div id="breadcrumbdiv" style="WIDTH: 100%">
</div>
<div id="menudiv" style="FLOAT: left; WIDTH: 33%">
</div>
<div id="contentdiv" style="FLOAT: left; WIDTH: 66%">
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
Wählen Sie Datei Speichern oder drücken Sie Strg+S, um den neuen Text zu speichern. Die Master-Seite enthält mehrere
Bereiche (<div>), die im Design-Fenster als Rechtecke angezeigt werden. Der Platzhalter für den Inhalt wurde auf der Seite
nach rechts verschoben. Master-Seiten werden zum Erstellen von Inhaltsseiten verwendet. Alles, was sich auf der Master-Seite
befindet, erscheint auf einer Inhaltsseite, die auf dieser Master-Seite basiert. Wenn die Master-Seite geändert wird, werden
diese Änderungen für allen davon abgeleiteten Inhaltsseiten übernommen.
So fügen Sie der Master-Seite ein Menü und einen SiteMapPath hinzu:
1. Zum Hinzufügen eines Menüs zeigen Sie das Fenster Design für die Master-Seite an. Ziehen Sie ein Menu-Steuerelement
aus der Kategorie Navigation der Tool-Palette in das <div>-Element links neben dem ContentPlaceHolder-Steuerelement.
Positionieren Sie das Menu-Steuerelement so, dass sein oberer Rand auf einer Linie mit dem oberen Rand des
190
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Erstellen einer ASP.NET Sitemap
ContentPlaceHolder-Steuerelements liegt.
2. Zeigen Sie das Smart Tasks-Fenster des Menu-Steuerelements an, indem Sie entweder auf den Pfeil in der rechten, oberen
Ecke der Menu-Komponente klicken oder im Kontextmenü der Komponente Smart Tasks auswählen.
3. Um die Menu-Komponente mit einer Datenquelle zu verbinden, klicken Sie im Smart Tasks-Fenster in der Dropdown-Liste
Datenquelle auswählen auf <Neue Datenquelle>. Daraufhin wird das Dialogfeld Datenquellentyp auswählen angezeigt
4. Wählen Sie im Dialogfeld Datenquellentyp auswählen den Datenquellentyp Sitemap aus. Geben Sie eine ID für die
Datenquelle ein oder belassen Sie die Vorgabe-ID, und klicken Sie auf OK, um die Datenquelle hinzuzufügen.
5. Zum Anpassen des Steuerelements Menu klicken Sie auf Menu. Ändern Sie im Objektinspektor die Eigenschaft
StaticDisplayLevels in 3. Dies ist die Anzahl der Ebenen, die in der Menu-Komponente angezeigt wird. Beachten Sie, dass
in dem Menü im Fenster Design Daten aus der Sitemap-XML-Datei angezeigt werden.
6. Zum Hinzufügen eines SiteMapPath-Steuerelements zeigen Sie das Fenster Design für die Master-Seite an. Ziehen Sie ein
SiteMapPath-Steuerelement aus der Kategorie Navigation der Tool-Palette auf die Master-Seite in das zweite
<div>-Element von oben direkt über dem <div>-Element, das das Menu-Steuerelement enthält. Ein SiteMapPath wird auch
Bread Crumbs (engl. für Brotkrumen) genannt und bezeichnet eine Standortanzeige, aus der der Benutzer ersehen kann,
über welchen Pfad er zu einer Seite gelangt ist.
Das Menü und das SiteMapPath-Steuerelement werden für die Navigation in der Site verwendet.
So fügen Sie eine Inhaltsseite hinzu:
1. Erstellen Sie eine neue Inhaltsseite, indem Sie Datei Neu Weitere auswählen. Wählen Sie im Dialogfeld Objektgalerie
unter Neue ASP.NET-Dateien ASP.NET Inhaltsseite aus und klicken Sie auf OK. Geben Sie der Seite im Dialogfeld Neue
Inhaltsseite als Seitennamen Home.aspx ein. Wählen Sie im Dropdown-Menü Master-Seitendatei den Eintrag
~/MasterPage1.master aus. In der resultierenden Inhaltsseite werden alle Elemente, die von der Master-Seite geerbt
sind, grau dargestellt: alles außer dem ContentPlaceHolder-Steuerelement. Diese Elemente werden grau dargestellt, um
anzuzeigen, dass sie schreibgeschützt sind. Nur das ContentPlaceHolder-Steuerelement kann bearbeitet werden.
2. Klicken Sie im Fenster Home.aspx unten auf das Register Home.aspx. Ändern Sie in der ersten Zeile das Attribut Title in
Title=”Home”. Wählen Sie Datei Speichern oder drücken Sie Strg+S, um den neuen Text zu speichern.
3. Die Inhaltsseite (home.aspx) hat ein einzelnen Content-Steuerelement, dass dem Steuerelement ContentPlaceHolder in der
Master-Seite (masterpage1.master) entspricht. Zum Anpassen der Inhaltsseite klicken Sie unten im Fenster Home.aspx auf
das Register Design. Klicken Sie in das ContentPlaceHolder-Element und geben Sie Home ein.
Diese Inhaltsseite dient als Homepage für die Site.
So erstellen Sie den Inhalt für die Site:
1. Um Inhalte für die Site zu erstellen, müssen Sie Inhaltsseiten und Ordner, die sie enthalten, anlegen. Erstellen Sie einen
neuen Ordner, in dem Sie das Projekt in der Projektverwaltung mit der rechten Maustaste anklicken und Neue
hinzufügen Ordner wählen. Geben Sie Book1 als Namen für den Ordner ein.
2. Klicken Sie den Ordner Book1 in der Projektverwaltung mit der rechten Maustaste an und wählen Sie Neue
hinzufügen Weitere. Wählen Sie im Dialogfeld Objektgalerie unter Neue ASP.NET-Dateien ASP.NET Inhaltsseite aus
und klicken Sie auf OK. Geben Sie im Dialogfeld Neue Inhaltsseite als Namen für die Seite Book1.aspx ein. Wählen Sie
~/MasterPage1.master in der Dropdown-Liste Master-Seitendatei aus.
2
3. Klicken Sie im Fenster Book1.aspx unten auf das Register Book1.aspx. Ändern Sie in der ersten Zeile das Attribut Title in
Title=”Book1”. Wählen Sie Datei Speichern oder drücken Sie Strg+S, um den neuen Text zu speichern.
4. Klicken Sie im Fenster Book1.aspx unten auf das Register Design. Klicken Sie in das ContentPlaceHolder-Element und
geben Sie Book1 ein.
5. Fügen Sie in den Ordner Book1 einen Ordner ein. Klicken Sie den Ordner Book1 in der Projektverwaltung mit der rechten
Maustaste an und wählen Sie Neue hinzufügen Ordner. Geben Sie Chapter1 als Namen für den Ordner ein.
6. Klicken Sie den Ordner Chapter1 in der Projektverwaltung mit der rechten Maustaste an und wählen Sie Neue
hinzufügen Weitere. Wählen Sie im Dialogfeld Objektgalerie unter Neue ASP.NET-Dateien ASP.NET Inhaltsseite aus
und klicken Sie auf OK. Geben Sie der Seite im Dialogfeld Neue Inhaltsseite als Seitennamen Chapter1.aspx ein. Wählen
Sie ~/MasterPage1.master in der Dropdown-Liste Master-Seitendatei aus.
7. Klicken Sie im Fenster Chapter1.aspx unten auf das Register Chapter1.aspx. Ändern Sie in der ersten Zeile das Attribut
191
Aktenkoffermodell-Anwendung mit DB Web
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
Title in Title=”Chapter1”. Wählen Sie Datei Speichern oder drücken Sie Strg+S, um den neuen Text zu speichern.
8. Klicken Sie im Fenster Chapter1.aspx unten auf das Register Design. Klicken Sie in das ContentPlaceHolder-Element und
geben Sie Chapter1 ein.
Die Seiten und Ordner wurden entsprechend der Einträge in der Sitemap-XML-Datei hinzugefügt. Damit ist das Hinzufügen von
Inhalt zu der Site abgeschlossen.
So stellen Sie die Site fertig:
1. Die Datei Default.aspx wird nicht mehr benötigt. Klicken Sie in der Projektverwaltung mit der rechten Maustaste auf
Default.aspx. Klicken Sie anschließend auf Löschen. Klicken Sie im Dialogfeld Bestätigen auf Ja.
2. Sie müssen eine Startseite definieren, die als erste Seite beim Ausführen der Anwendung angezeigt wird. Klicken Sie in der
Projektverwaltung mit der rechten Maustaste auf Home.aspx und wählen Sie im Kontextmenü Als Startseite festlegen.
Die Anwendung kann jetzt ausgeführt werden.
So zeigen Sie die Seite in einem Webbrowser an:
1. Um die Anwendung aus zuführen und in einem Browser anzuzeigen, wählen Sie Start Start. Das Projekt wird erzeugt und
ein Fenster mit dem Build-Status angezeigt, das bei Fertigstellung des Builds wieder geschlossen wird.
2. Die Homepage sollte nun in einem Webbrowser angezeigt werden.
3. Klicken Sie im Menü auf Book1, um diese Seite anzuzeigen. Klicken Sie auf Chapter1, um diese Seite anzuzeigen.
4. Beachten Sie, dass SiteMapPath aktualisiert wird, um die Position der aktuell angezeigten Seite in der Site darzustellen. Sie
können auf diese Knoten klicken, um zu den vorherigen Seiten im Pfad zu wechseln.
Damit ist das Projekt abgeschlossen.
Siehe auch
Überblick zu ASP.NET (
see page 85)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 189)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 191)
ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln (
see page 192)
2.5.8 Aktenkoffermodell-Anwendung mit DB Web Controls
erstellen
2
Sie können mit Hilfe von DB Web Controls, der XML-Zwischenspeicherung und der BDP.NET-Datenadapter serverseitige
Aktenkoffermodell-Anwendungen erstellen. Für diese Anwendungsart ist eine Benutzerauthentifizierung zwingend erforderlich,
da jeder Benutzer über eine eigene Kopie der XML-Datei verfügen muss.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So erstellen Sie eine Aktenkoffermodell-Anwendung:
1. Erstellen Sie eine BDP.NET-Anwendung.
2. Fügen Sie eine DBWebDataSource-Komponente hinzu, und verbinden Sie sie mit der BDP-Datenmenge.
3. Konfigurieren Sie die DBWebDataSource-Komponente so, dass sie eine XML- und eine XSD-Datei generiert.
4. Konfigurieren Sie die Eigenschaften AutoUpdateCache und UseUniqueFileName.
5. Schreiben Sie eine Ereignisbehandlungsroutine für OnApplyChangesRequest, in der die Methode AutoUpdate von
192
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Anwendung mit DB Web Controls erstellen
BdpDataAdapter aufgerufen wird.
6. Führen Sie die Anwendung aus.
So konfigurieren Sie die Eigenschaften AutoUpdateCache und UseUniqueFileName:
1. Erstellen Sie unter Verwendung der BDP.NET-Komponenten und der Komponente DBWebDataSource eine
ASP.NET-Standarddatenbankanwendung.
2. Geben Sie in der DBWebDataSource-Komponente die Namen nicht vorhandener XML- und XSD-Dateien an.
Anmerkung: Erstellen Sie diese Dateien wenn möglich im Projektverzeichnis oder einem Unterverzeichnis des
Projektverzeichnisses (normalerweise auf dem Webserver).
3. Setzen Sie die Eigenschaft AutoUpdateCache auf True.
4. Setzen Sie die Eigenschaft UseUniqueFileName auf True.
5. Aktivieren Sie für die DBWebDataSource-Komponente die Registerkarte Ereignisse.
6. Doppelklicken Sie auf das Feld OnApplyChangesRequest, um die Ereignisbehandlungsroutine im Quelltext-Editor
anzuzeigen.
7. Fügen Sie folgenden Quelltext hinzu:
BdpDataAdapter1.AutoUpdate;
8. Wählen Sie Start Start. Bei der erstmaligen Ausführung der Anwendung wird die XSD-Datei unter Verwendung der
Server-Metadaten erstellt.
Wenn ein Benutzer die Anwendung zum ersten Mal ausführt, werden Daten vom Server abgerufen. Ändert er anschließend
Daten und speichert diese, werden die Änderungen auf dem Server in einer Datei mit einem eindeutigen Namen abgelegt, der
auf dem Namen des Benutzers basiert. Wenn der Benutzer die Anwendung beendet und sie später erneut ausführt, werden
seine benutzerspezifischen Daten wiederhergestellt. Er kann dann Änderungen rückgängig machen oder die Daten
anderweitig bearbeiten. Bei jedem erfolgreichen Aufruf der OnApplyChangesRequest-Ereignisbehandlungsroutine löscht die
Anwendung die Dateien des Benutzer und erstellt sie neu.
Warnung: Werden die von der Anwendung genutzten Tabellen oder Spalten nach der Ausführung der Anwendung geändert,
muss die XSD-Datei gelöscht werden, damit keine Konflikte zwischen der XSD-Datei und den Server-Metadaten entstehen.
Erfolgt die Löschung nicht, kann dies zu Laufzeitfehlern oder einem unerwarteten Verhalten der Anwendung führen.
Siehe auch
Überblick zu Borland DB Web Controls (
see page 88)
XML-Dateien und DB Web Controls verwenden (
Anwendung mit DB Web Controls erstellen (
see page 99)
see page 199)
2
2.5.9 Anwendung mit DB Web Controls erstellen
Die folgende Anleitung beschreibt, wie Sie mit wenigen Schritten eine einfache ASP.NET-Datenbankanwendung mit DB Web
Controls und BDP.NET erstellen können. Wenn die erforderlichen Verbindungsobjekte generiert sind, werden die Daten im
Projekt in einer DBWebGrid-Komponente angezeigt, die über eine DBWebNavigator-Komponente gesteuert wird. Zu anderen
häufig verwendeten DB Web Controls werden zusätzliche Informationen bereitgestellt.
Der Benutzer sollte bereits mit der Erstellung von ASP.NET-Projekten mit BDP.NET vertraut sein.
Die Erstellung einer einfachen ASP.NET-Anwendung mit DB Web Controls und BDP.NET umfasst drei grundlegende Schritte:
1. Ein ASP.NET-Projekt mit BDP.NET oder anderen Verbindungskomponenten anlegen.
2. Eine DBWebDataSource-Komponente in den Designer einfügen und deren Eigenschaft DataSource auf ein DataSet-,
193
Anwendung mit DB Web Controls erstellen
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
DataView- oder DataTable-Objekt setzen.
3. Eine DBWebGrid-Komponente und ggf. weitere Komponenten in den Designer einfügen.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So legen Sie ein ASP.NET-Projekt für DB Web Controls an:
1. Erstellen Sie ein ASP.NET-Projekt.
2. Richten Sie BDP.NET- oder andere Datenzugriffskomponenten ein, wobei Sie deren DataSource-Eigenschaft ein
bestehendes DataSet-, DataView- oder DataTable-Objekt zuweisen.
Tip: Weitere Informationen über das Einrichten von BDP.NET-Datenzugriffskomponenten finden Sie in der Anleitung zum
Erstellen einer ASP.NET-Datenbankanwendung. Anstatt eine DataGrid-Komponente zu verwenden und zur Datenbindung
einen Aufruf von DataBind hinzuzufügen, werden in der folgenden Anleitung DB Web Controls ohne DataBind-Aufruf
eingesetzt.
So konfigurieren Sie eine DBWebDataSource-Komponente:
1. Ziehen Sie eine DBWebDataSource-Komponente in den Designer.
2. Wählen Sie im Objektinspektor die Eigenschaft DataSource aus.
3. Wählen Sie eine vorhandene Datenquelle aus (diese hat den Standardnamen dataSet1).
So konfigurieren Sie DB Web Controls:
1. Ziehen Sie eine DBWebNavigator-Komponente in den Designer.
2. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft DBDataSource eine Datenquelle aus.
3. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft TableName ein DataTable-Objekt aus.
Tip: Wenn kein Tabellenname (Eigenschaft TableName) verfügbar ist, stellen Sie sicher, dass die Eigenschaft Active des
BdpDataAdapter-Objekts auf True gesetzt ist.
4. Ziehen Sie eine DBWebGrid-Komponente in den Designer.
5. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft DBDataSource die Datenquelle aus.
6. Wählen Sie im Objektinspektor in der Dropdown-Liste der Eigenschaft TableName ein DataTable-Objekt aus. Im Gitter
werden Daten angezeigt.
7. Fügen Sie weitere DB Web Controls nach Bedarf hinzu.
8. Legen Sie die Werte von DBDataSource, TableName und weitere Eigenschaften nach Bedarf fest.
Anmerkung: Bei datensensitiven Spalten-Steuerelementen (z.B. DBWebTextBox, DBWebImage, DBWebMemo und
DBWebCalendar) stellen Sie zusätzlich die Eigenschaft ColumnName ein. Für datensensitive Komponenten, die
Nachschlagezwecken dienen (wie DBWebDropDownList, DBWebListBox und DBWebRadioButtonList) müssen zusätzlich die
Eigenschaften LookupTableName, DataTextField und DataValueField zugewiesen werden.
2
9. Wählen Sie Start Start. Die Anwendung wird compiliert, und der HTTP-Server zeigt ein Web Form mit der mit Daten
gefüllten DBWebGrid-Komponente an.
Tip: Wenn Sie Webkomponenten aus der Tool-Palette
ziehen, werden sie an einer absoluten Position im ASP.NET-Web Form eingefügt. Wenn Sie auf Komponenten in der
Tool-Palette doppelklicken, behalten sie ein fließendes ASP.NET-Layout. Das fließende Layout ist viel einfacher zu
handhaben. Beispielsweise können Controls an einer absoluten Position in einem Web Form andere Controls überlagern,
wenn sich zur Laufzeit ihre Größe verändert. Dieser Fall kann eintreten, wenn Sie Zeilen in ein Gitter einfügen oder daraus
entfernen und auf diese Weise die Größe des Gitters ändern.
194
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
HTML-Elemente in Server Controls
Siehe auch
ASP.NET-Datenbankanwendung erstellen
CodeGear DB Web Controls (
see page 88)
XML-Dateien und DB Web Controls verwenden (
Überblick zum DB Web Control-Experten (
Überblick zu ASP.NET (
see page 85)
Überblick zu ADO.NET (
see page 15)
Daten-Provider für .NET (
see page 99)
see page 93)
see page 28)
ADO.NET-Komponentendesigner (
see page 23)
2.5.10 HTML-Elemente in Server Controls konvertieren
Im Gegensatz zu Web Controls unterstützen HTML-Elemente die programmseitige Steuerung nicht standardmäßig. Es ist
jedoch möglich, ein HTML-Element in ein Server Control zu konvertieren, auf das per Programm zugegriffen und das geändert
werden kann. Die meisten HTML-Elemente, die in der Tool-Palette angeboten werden, lassen sich mit Hilfe des Befehls Als
Server-Control ausführen konvertieren. HTML-Elemente, auf die nicht über die Tool-Palette zugegriffen werden kann (z.B.
body), können manuell konvertiert werden.
Im Folgenden wird gezeigt, wie eine HTML-Tabelle (table-Element) mit dem Befehl Als Server-Control ausführen, und wie ein
body-Element manuell konvertiert wird.
So konvertieren Sie eine HTML-Tabelle in ein Server Control:
1. Öffnen Sie eine ASP.NET-Anwendung, und wechseln Sie in den Designer.
2. Ziehen Sie aus der Kategorie HTML-Elemente der Tool-Palette das Element HTML-Tabelle in den Designer.
3. Klicken Sie im Designer mit der rechten Maustaste auf das Table-Element, und wählen Sie Als Server-Control ausführen. Das
Symbol für Server Controls wird zum Table-Element hinzugefügt. In der .aspx-Datei werden dem table-Tag die Attribute
id="TABLE1" und runat="server" hinzugefügt. In der Codebehind-Datei wird TABLE1 mit
System.Web.UI.HtmlControls.HtmlTable deklariert.
4. Nun können Sie im Quelltext auf TABLE1 Bezug nehmen. Ziehen Sie aus der Kategorie Web Controls der Tool-Palette eine
Button-Komponente in den Designer.
5. Doppelklicken Sie auf die Schaltfläche. Der Quelltext-Editor wird geöffnet. Der Cursor befindet sich in der
Behandlungsroutine für das Klickereignis der Schaltfläche.
2
6. Fügen Sie der Ereignisbehandlungsroutine folgenden Quelltext hinzu, um die Hintergrundfarbe der Tabelle in Blau zu ändern.
Beachten Sie dabei, dass TABLE1 die ID ist, die dem table-Tag in Schritt 3 automatisch hinzugefügt wurde.
TABLE1.BgColor := 'blue';
TABLE1.BgColor = "blue";
7. Wählen Sie Start Ausführen, um die Anwendung auszuführen.
8. Klicken Sie auf die Schaltfläche, um die Farbe der Tabelle zu ändern.
So konvertieren Sie ein body-HTML-Element manuell in ein Server Control:
1. Öffnen Sie eine ASP.NET-Anwendung, und zeigen Sie die .aspx-Datei an.
2. Fügen Sie dem body-Tag die Attribute runat="server" und id="bezeichner" hinzu. Dabei steht bezeichner für einen
Bezeichner wie bodytag.
195
XML-Datei für DB Web Controls erstellen
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
3. Fügen Sie dem strict protected-Abschnitt der Codebehind-Datei folgende Deklaration hinzu:
bodytag: System.Web.UI.HtmlControls.HtmlGenericControl;
protected System.Web.UI.HtmlControls.HtmlGenericControl bodytag;
4. Nun können Sie im Quelltext auf bodytag Bezug nehmen. Ziehen Sie aus der Kategorie Web Controls der Tool-Palette
eine Button-Komponente in den Designer.
5. Doppelklicken Sie auf die Schaltfläche. Der Quelltext-Editor wird geöffnet. Der Cursor befindet sich in der
Behandlungsroutine für das Klickereignis der Schaltfläche.
6. Fügen Sie folgenden Quelltext hinzu, um die Hintergrundfarbe des Web Form in Gelb zu ändern:
bodytag.Attributes['bgcolor'] := 'yellow';
bodytag.Attributes["bgcolor"] = "yellow";
7. Wählen Sie Start Ausführen, um die Anwendung auszuführen.
8. Klicken Sie auf die Schaltfläche, um die Hintergrundfarbe des Formulars zu ändern.
Siehe auch
Zwischen HTML-Elementen und Server Controls wählen
2.5.11 XML-Datei für DB Web Controls erstellen
XML-Dateien können als Datenquelle verwendet werden. Dieses Vorgehen bietet sich vor allem für die Erstellung von
Prototypanwendungen an, die keine Lese- und Schreibzugriffe auf eine Datenbank erfordern. Die betreffenden XML-Dateien
müssen aber vorher erstellt werden. Ideal geeignet für diesen Zweck ist die DBWebDataSource-Komponente. Mit ihrer Hilfe
können Sie eine XML-Datei erstellen, die auf echten Datenbankdaten basiert. In der vorliegenden Anleitung wird davon
ausgegangen, dass Sie eine Verbindung zu der Datenbank herstellen können, die die gewünschten Daten enthält.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So erstellen und verwenden Sie eine XML-Datei:
1. Erstellen Sie eine ASP.NET-Anwendung mit DB Web Controls.
2. Verwenden Sie eine XML-Datei als Datenquelle für die neue ASP.NET-Anwendung.
So erstellen Sie eine ASP.NET-Anwendung mit DBWeb Controls:
1. Wählen Sie Datei Neu ASP.NET-Webanwendung (für Delphi für .NET).
2
2. Erstellen Sie mit Hilfe der BDP.NET-Steuerelemente oder mit anderen Datenadapter-Elementen eine Datenbankverbindung
und einen Datenadapter.
3. Ziehen Sie eine DBWebDataSource-Komponente aus dem Bereich DB Web der Tool-Palette in den Designer.
4. Geben Sie in der Eigenschaft XMLFileName oder XMLSchemaFile den Namen einer Datei an, die noch nicht vorhanden ist.
5. Erzeugen Sie ein DataSet-Objekt aus dem Datenadapter.
6. Setzen Sie die Eigenschaft DataSource der DBWebDataSource-Komponente auf dataSet1.
7. Setzen Sie die Eigenschaft Active des Datenadapters auf True.
8. Wählen Sie Start Start. Dadurch wird die Anwendung ausgeführt, und gleichzeitig wird die XML- bzw. XSD-Datei erstellt
und mit den Daten aus dem DataSet-Objekt gefüllt.
So verwenden Sie die XML-Datei als Datenquelle für eine neue ASP.NET-Anwendung:
1. Wählen Sie Datei Neu ASP.NET-Webanwendung (für Delphi für .NET).
196
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Metadaten für eine Datenmenge erstellen
2. Ziehen Sie eine DataSet-Komponente aus dem Bereich Datenkomponenten der Tool-Palette in den Designer.
3. Ziehen Sie eine DBWebDataSource-Komponente aus dem Bereich DB Web der Tool-Palette in den Designer.
4. Weisen Sie den Namen der XML-Datei der Eigenschaft XMLFileName der DBWebDataSource-Komponente zu .
Anmerkung: Wenn Sie anstatt einer XML-Datei eine XSD-Datei erstellt haben, verwenden Sie in diesem Schritt deren
Namen.
5. Setzen Sie die Eigenschaft DataSource der DBWebDataSource-Komponente auf die DataSet-Komponente.
6. Ziehen Sie eine DBWebGrid-Komponente aus dem Bereich DB Web der Tool-Palette in den Designer.
7. Setzen Sie die Eigenschaft DBDataSource der DBWebGrid-Komponente auf den Namen der
DBWebDataSource-Komponente.
8. Wählen Sie Start Ausführen, um die Anwendung auszuführen. Die Anwendung ruft nun Daten aus dem DataSet-Objekt
bzw. der XML-Datei ab und zeigt sie in der DBWebGrid-Komponente an.
Warnung: Sie können über die Eigenschaft XMLFileName der DBWebDataSource-Komponente auch den Namen einer
vorhandenen Datei zusammen mit einer aktiven BdpDataAdapter-Komponente und deren DataSet-Objekt angeben. Wenn
Sie die Anwendung dann ausführen, zeigen die DB Web Controls die Daten dieser XML-Datei an. Es ist jedoch nicht sinnvoll,
die XML-Funktionalität der DBWebDataSource-Komponente für diesen Zweck zu verwenden. Zwar werden die Daten der
XML-Datei richtig angezeigt, eine Aktualisierung oder andere Operationen mit den Daten liefern aber oft nicht das
gewünschte Ergebnis.
Siehe auch
XML-Dateien mit DBWeb Controls verwenden (
Überblick zu Borland DBWeb Controls (
see page 99)
see page 88)
Anwendung mit DBWeb Controls erstellen (
see page 199)
Berechtigungen für die Nutzung von XML-Dateien festlegen (
ASP.NET-Datenbankanwendung erstellen (
see page 208)
see page 187)
2.5.12 Metadaten für eine Datenmenge erstellen
Wenn Sie in einer ASP.NET-Anwendung mit DB Web Controls eine XML-Datei als Datenquelle verwenden, müssen Sie
möglicherweise Metadaten erzeugen, um die XML-Daten im DataSet-Objekt zu strukturieren. Wird die XML-Datei ohne
XML-Schemadatei (.xsd) erstellt, müssen die Metadaten manuell erzeugt werden. In der vorliegenden Anleitung wird davon
ausgegangen, dass bereits eine XML-Datei mit Daten vorhanden ist.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So richten Sie die Anwendung ein:
1. Wählen Sie Datei Neu ASP.NET-Webanwendung (für Delphi für .NET).
2. Ziehen Sie eine DBWebDataSource-Komponente in das Formular.
3. Ziehen Sie eine DataSet-Komponente in das Formular.
4. Klicken Sie auf die Ellipsen-Schaltfläche (...) neben der Eigenschaft XMLFileName der DBWebDataSource-Komponente, und
wechseln Sie zum Verzeichnis mit der XML-Datei.
5. Wählen Sie die DataSet-Komponente in der Komponentenablage aus.
6. Klicken Sie auf die Eigenschaft für Tabellensammlungen, um den Tabellensammlungs-Editor anzuzeigen.
197
2
Virtuelle Verzeichnisse erstellen
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
So erstellen Sie die Metadaten:
1. Klicken Sie auf Hinzufügen, um der Sammlung eine neue Tabelle hinzuzufügen. Zu Demonstrationszwecken werden hier die
folgenden XML-Datensätze verwendet:
<?xml version="1.0" standalone="yes">
<NewSongs>
/// XML-Deklaration
/// <song> wird zum Tabellennamen der Datenmenge.
<song>
/// <songid> wird zur 1. Spalte der Datenmenge.
<songid>1001</songid>
/// <title> wird zur 2. Spalte der Datenmenge.
<title>Mary Had a Little Lamb</title>
</song>
<song>
<songid>1003</songid>
<title>Twinkle, Twinkle Little Star</title>
</song>
</Newongs>
2. Ändern Sie die Eigenschaft TableName zu song.
3. Klicken Sie auf die Eigenschaft für Spaltensammlungen, um den Spaltensammlungs-Editor anzuzeigen.
4. Klicken Sie auf Hinzufügen, um eine neue Spalte hinzuzufügen.
5. Ändern Sie die Eigenschaft ColumnName zu songid.
6. Klicken Sie auf Hinzufügen, um eine weitere Spalte hinzuzufügen.
7. Ändern Sie die Eigenschaft ColumnName zu title.
8. Klicken Sie auf Schließen, um den Spaltensammlungs-Editor zu schließen.
9. Klicken Sie auf Schließen, um den Tabellensammlungs-Editor zu schließen. Sie haben nun die Metadaten für die Daten in
der XML-Datei erstellt.
Siehe auch
XML-Dateien mit DBWeb Controls verwenden (
see page 99)
2.5.13 Virtuelle Verzeichnisse erstellen
2
Wenn Sie eine ASP.NET-Anwendung erstellen, erzeugt die IDE ausgehend von den Einstellungen im Dialogfeld Neue
ASP.NET-Webanwendung automatisch ein virtuelles Verzeichnis.
Die IDE kann jedoch auch ein virtuelles Verzeichnis für eine Anwendung anlegen, die nicht in der IDE erstellt wurde,
beispielsweise für die Demo-Anwendungen im Ordner DBWeb.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So erstellen Sie ein virtuelles Verzeichnis für eine vorhandene Anwendung:
1. Öffnen Sie die Projektdatei der ASP.NET-Anwendung in der IDE.
2. Wählen Sie Projekt Optionen Debugger ASP.NET. Die Standard-Anwendungseinstellungen werden angezeigt.
Übernehmen Sie die Standardeinstellungen, oder ändern Sie sie nach Bedarf.
3. Wenn Sie ein virtuelles Verzeichnis zur Verwendung mit dem Internet Information Server (IIS) erstellen, klicken Sie auf die
198
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
ASP.NET-Anwendungen debuggen und
Schaltfläche Serveroptionen, um das Dialogfeld Virtuelles Verzeichnis konfigurieren zu öffnen. Wenn Sie den Namen des
virtuellen Verzeichnisses oder dessen Alias ändern, können Sie auch die Berechtigungen ändern, die mit dem virtuellen
Verzeichnis verbunden sind.
4. Klicken Sie auf OK, um zu den Projektoptionen zurückzukehren.
5. Klicken Sie auf OK, um die Projektoptionen zu verlassen.
Das virtuelle Verzeichnis wird angelegt, sodass Sie die Anwendung ausführen können.
2.5.14 Aggregatwerte mit der
DBWebAggregateControl-Komponente hinzufügen
Sie können mit Hilfe einer DBWebAggregateControl-Komponente eine Standard-Aggregatfunktion (Zusammenfassung) für eine
Datenspalte implementieren. Der Aggregatwert wird in einem Textfeld angezeigt, dem ein Titel zugeordnet werden kann.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So erstellen und konfigurieren Sie eine DBWebAggregateControl-Komponente:
1. Erstellen Sie eine neue ASP.NET-Webanwendung, und fügen Sie ihr eine Datenbankverbindung, einen Datenadapter, eine
Datenmenge und eine DBWebDataSource-Komponente hinzu.
2. Setzen Sie die Eigenschaft Active der BdpDataAdapter-Komponente auf True.
3. Ziehen Sie eine DBWebAggregateControl-Komponente in den Web Forms-Designer.
4. Setzen Sie die Eigenschaft DBDataSource der DBWebAggregateControl-Komponente auf DBWebDataSource1. Dies ist der
Standardname der DBWebDataSource-Komponente.
5. Weisen Sie der Eigenschaft TableName einen Wert zu.
6. Öffnen Sie die Dropdown-Liste der Eigenschaft AggregateType, und wählen Sie einen Wert aus.
7. Öffnen Sie die Dropdown-Liste der Eigenschaft ColumnName, und wählen Sie einen Wert aus. Welcher Wert im Textfeld
angezeigt wird, hängt von der gewählten Aggregatfunktion und den Werten in der ausgewählten Spalte ab.
Anmerkung: Falls die Spalte NULL-Werte enthält, setzen Sie die Eigenschaft IgnoreNullValues auf True, um Fehler zu
vermeiden.
So legen Sie den Titel für die DBWebAggregateControl-Komponente fest:
1. Geben Sie im Objektinspektor in das Feld für die Eigenschaft Caption einen Titel ein.
2
2. Legen Sie mit Hilfe der Dropdown-Liste der Eigenschaft CaptionPosition die Position für den Titel fest.
Siehe auch
CodeGear DB Web Controls (
see page 88)
Anwendung mit DB Web Controls erstellen (
see page 199)
2.5.15 ASP.NET-Anwendungen debuggen und aktualisieren
Während der Installation von RAD Studio werden Sie gefragt, ob die Datei machine.config auf Ihrem Computer aktualisiert
werden soll. Dies ist für das Debuggen von RAD Studio-Anwendungen unter IIS erforderlich. Wenn Sie auf die Frage mit Ja
199
Deployment einer ASP.NET-Anwendung
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
antworten, werden Borland-Debugger-Informationen in die Datei machine.config geschrieben und den Anwendungen zur
Verfügung gestellt, die mit Delphi 8 erstellt wurden. Sie müssen diese Anweisung nicht ausführen.
Sollten Sie die Frage mit Nein beantworten, werden die Debugger-Informationen in die Datei web.config der Anwendung
geschrieben, wenn Sie eine ASP.NET-Anwendung mit RAD Studio erzeugen. Für Anwendungen, die mit Delphi 8 erstellt
wurden, müssen Sie diese Informationen manuell in die Datei web.config einfügen. Andernfalls kann beim Versuch, die
Anwendung mit RAD Studio zu debuggen, folgende Fehlermeldung angezeigt werden:
Debugging kann auf dem Webserver nicht gestartet werden. Zu Arbeitsprozess ASP.NET kann nicht
verbunden werden (normalerweise aspnet_wp.exe oder w3wp.exe).
So aktualisieren Sie die Datei web.config für eine mit Delphi 8 erstellte ASP.NET-Anwendung:
1. Öffnen Sie die Datei web.config in der IDE oder in einem Texteditor.
2. Ersetzen Sie die Zeilen
<compilation
debug="true"
defaultLanguage="c#">
</compilation>
durch folgende:
<compilation defaultLanguage="c#" debug="true">
<assemblies>
<add assembly="Borland.dbkasp, Version=9.0.0.1,
Culture=neutral, PublicKeyToken=b0524c541232aae7"/>
</assemblies>
</compilation>
<httpModules>
<add name="DbgConnect" type = "Borland.DbkAsp.DbkConnModule,
Borland.dbkasp,Version=9.0.0.1, Culture=neutral,
PublicKeyToken=b0524c541232aae7"/>
</httpModules>
3. Speichern Sie die Datei web.config.
4. Öffnen Sie das Anwendungsprojekt in der IDE, und führen Sie es aus.
Anmerkung: Vor dem Deployment einer ASP.NET-Anwendung müssen Sie das Debugging deaktivieren und die
Debugger-Referenzen aus der Datei web.config
entfernen. Einzelheiten finden Sie im unten aufgeführten Thema.
Siehe auch
Den ASP.NET-Deploymentmanager verwenden (
see page 212)
2
2.5.16 Deployment einer ASP.NET-Anwendung mit Blackfish
SQL an ein System ohne RAD Studio
Sie können eine ASP.NET-Anwendung mit Blackfish SQL an ein System ohne RAD Studio weitergeben.
So geben Sie eine ASP.NET-Anwendung mit Blackfish SQL an ein System weiter, das nicht über CodeGear RAD Studio
verfügt:
1. Erstellen Sie eine ASP.NET-Anwendung . Setzen Sie in der Datei web.config des Projekts den Eintrag connectionString
auf Blackfish SQL Local Client. Im Folgenden finden Sie einen Beispieleintrag für die Datei web.config:
<connectionStrings>
200
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Spalten in DBWebGrid-Objekten binden
<!-- Lokaler Verbindungs-String : Mit dem folgenden String eine Verbindung zum Provider
mittels des lokalen Clients herstellen -->
<add name="BlackfishSqlAspNet"
connectionString="database=|DataDirectory|bsql_aspnetdb.jds;
user=user;password=password;create=true"
providerName="Borland.Data.BlackfishSQL.LocalClient"/>
</connectionStrings>
2. Compilieren Sie die Anwendung.
3. Geben Sie die Anwendung wie unter Den ASP.NET-Deploymentmanager verwenden (
see page 102) beschrieben weiter.
4. Kopieren Sie die folgenden Dateien in das Verzeichnis bin:
• Borland.Delphi.dll
• Borland.VclRtl.dll
• Borland.Web.Provider.dll
• Borland.Data.BlackfishSQL.LocalClient.dll
• BlackfishSQL.slip
5. Kopieren Sie eine Blackfish SQL-Datenbank in das Verzeichnis App_Data, das im Projektverzeichnis erstellt wird, wenn die
Anwendung ausgeführt wird.
6. Führen Sie die Anwendung aus.
Siehe auch
Deployment von ASP.NET-Anwendungen (
see page 102)
Den ASP.NET-Deploymentmanager verwenden (
see page 102)
2.5.17 HTTP-Meldungen in ASP.NET erzeugen
Beim Debuggen Ihrer ASP.NET-Anwendungen werden möglicherweise unverständliche oder bedeutungslose Fehlermeldungen
ausgegeben. Grund hierfür ist die Einstellung einer bestimmten Option im Internet Explorer. Sie können das Debuggen Ihrer
Anwendung vereinfachen, indem Sie diese Einstellung ändern.
So sorgen Sie für die Anzeige aussagekräftiger Fehlermeldungen:
1. Wählen Sie im Internet Explorer (sofern Sie diesen verwenden) Tools Internetoptionen.
2. Klicken Sie auf die Registerkarte Erweitert.
3. Deaktivieren Sie das Kontrollkästchen Kurze HTTP-Fehlermeldungen anzeigen.
4. Klicken Sie auf OK. Kurze HTTP-Fehlermeldungen sind nun deaktiviert, und es werden aussagekräftige ASP.NET-Meldungen
angezeigt.
Siehe auch
Überblick zu ASP.NET (
see page 85)
Fehlerbehebung in ASP.NET-Anwendungen (
see page 209)
2.5.18 Spalten in DBWebGrid-Objekten binden
In bestimmten Situationen kann es notwendig sein, die Reihenfolge zu ändern, in der die Spalten in einem DBWebGrid-Objekt
201
2
Berechtigungen für die Nutzung von
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
angeordnet sind. Hierzu ist es möglich, die Spalten im Property Builder manuell zu binden.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So öffnen Sie den Property Builder:
1. Starten Sie eine neue ASP.NET-Anwendung.
2. Fügen Sie einen Datenprovider hinzu.
3. Fügen Sie ein DBWebDataSource-Objekt hinzu, und verbinden Sie es mit einer generierten Datenmenge.
4. Fügen Sie eine DBWebGrid-Komponente in das Web Form ein.
5. Klicken Sie auf das Designer Verb Property Builder am unteren Rand des Objektinspektors. Der Property Builder wird
geöffnet.
So ändern Sie die Spaltenreihenfolge:
1. Klicken Sie im Property Builder auf das Register General.
2. Setzen Sie die Eigenschaft DataSource auf das DBWebDataSource-Objekt oder DataSet-Objekt, auf das
DBWebDataSource verweist.
3. Klicken Sie auf die Registerkarte Columns.
4. Wählen Sie in der Liste Available Columns die Spalten aus, die angezeigt werden sollen.
5. Klicken Sie auf die Schaltfläche mit dem Rechtspfeil, um die Spalten in die Liste Selected Columns zu übertragen.
6. Ordnen Sie die Spalten in der Liste Selected Columns nach Bedarf neu an.
7. Im Feld Header können Sie den Text festlegen, der später im Gitter als Spaltenüberschrift angezeigt wird.
8. Klicken Sie auf Apply.
9. Klicken Sie auf OK.
Warnung: Wenn Sie sich für dieses Verfahren zur Spaltenbindung entscheiden, muss die Eigenschaft
AutoGenerateColumns auf False gesetzt werden. Hat diese Eigenschaft den Wert True, wird ein Laufzeitfehler ausgelöst. Es
ist dann nicht möglich, während des Entwurfs die Anordnung der Spalten zu verändern. Ebenso kann ein Laufzeitfehler
ausgelöst werden, wenn eine Spalte mehr als einmal einem Gitter zugeordnet wird.
Siehe auch
CodeGear DBWeb Controls (
see page 88)
Anwendung mit DBWeb Controls erstellen (
see page 199)
2
2.5.19 Berechtigungen für die Nutzung von XML-Dateien
festlegen
Um bei Verwendung von XML-Dateien als Datenquelle Zugriffsfehler zu vermeiden, müssen Sie Clients, die Ihre
ASP.NET-Anwendungen nutzen, Berechtigungen zuweisen. Sie haben hierzu zwei Möglichkeiten, die im Folgenden beschrieben
werden.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
202
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Fehlerbehebung in
So weisen Sie Benutzern Berechtigungen zu, wenn die Eigenschaft UseUniqueFileName auf False gesetzt ist:
1. Klicken Sie mit der rechten Maustaste auf das Startmenü von Windows, und wählen Sie den Befehl Suchen.
2. Wählen Sie Tools Ordneroptionen.
3. Aktivieren Sie die Registerkarte Ansicht.
4. Deaktivieren Sie die Option Einfache Dateifreigabe verwenden.
5. Klicken Sie auf Für alle übernehmen.
6. Klicken Sie auf OK.
7. Wechseln Sie zu der XML-Datei, die im Projekt verwendet wird, klicken Sie mit der rechten Maustaste darauf, und wählen Sie
Eigenschaften.
8. Aktivieren Sie die Registerkarte Sicherheit.
9. Fügen Sie den Benutzer Jeder hinzu, und vergeben Sie für die Datei alle Zugriffsrechte.
So weisen Sie Benutzern Berechtigungen zu, wenn UseUniqueFileName den Wert True hat und die
Benutzerauthentifizierung verwendet wird:
1. Legen Sie in der Windows-Systemsteuerung im Dialogfeld Benutzerkonten einen neuen Benutzer an.
2. Erstellen Sie im virtuellen IIS-Verzeichnis, in dem sich Ihre Webanwendung befindet, einen neuen Ordner mit der
Bezeichnung CacheFiles. Die virtuellen IIS-Verzeichnisse befinden sich normalerweise im Verzeichnis
C:\Inetpub\wwwroot.
3. Wechseln Sie mit Hilfe des Windows-Explorers zum Ordner CacheFiles.
4. Klicken Sie mit der rechten Maustaste, und wählen Sie Eigenschaften.
5. Aktivieren Sie die Registerkarte Sicherheit, und fügen Sie den in Schritt 1 angelegten Benutzer hinzu.
6. Weisen Sie dem Ordner alle Zugriffsrechte zu.
7. Verschieben Sie die XML-Datei in diesen Ordner.
8. Weisen Sie der Eigenschaft XMLFileName der DBWebDataSource-Komponente in der Anwendung diese Datei zu.
Anmerkung: Stellen Sie sicher, dass in den Ordneroptionen
von Windows die Einstellung Einfache Dateifreigabe verwenden deaktiviert ist.
Siehe auch
XML-Dateien und DB Web Controls verwenden (
XML-Datei für DB Web Controls erstellen (
see page 99)
see page 201)
2
2.5.20 Fehlerbehebung in ASP.NET-Anwendungen
Im Gegensatz zu herkömmlichen, fensterbasierten Anwendungen sind Webanwendungen von Servern und Ressourcen
abhängig, die nicht unmittelbar durch die Anwendung oder den Benutzer gesteuert werden können. Viele Webanwendungen
greifen auf Client-, Server- und Netzwerkressourcen zu.
Um Fehler zu minimieren, müssen die Bereiche ASP.NET-Installation, IIS-Installation und -Konfiguration und Sicherheit einer
besonderen Überprüfung unterzogen werden. Alle drei Bereiche sind sehr umfangreich und komplex. In den folgenden
Anleitungen werden Lösungen für die gängigsten Probleme vorgestellt.
Anmerkung: Die folgenden Lösungen gelten nur für IIS 5.1.
203
Fehlerbehebung in
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
So beheben Sie Fehler in einer ASP.NET-Anwendung:
1. Führen Sie eine Installation bzw. eine erneute Installation von ASP.NET durch.
2. Erstellen oder überprüfen Sie Ihr ASP.NET-Benutzerkonto.
3. Führen Sie eine Installation bzw. eine erneute Installation von IIS durch.
4. Starten Sie IIS, oder starten Sie IIS neu.
5. Konfigurieren Sie IIS so, dass Ihre Anwendung erkannt wird.
6. Fügen Sie Dokumenttypen zu IIS hinzu.
7. Aktivieren Sie die anonyme Authentifizierung.
8. Überprüfen Sie gegebenenfalls die Datenbankverbindung.
So führen Sie eine Installation bzw. eine erneute Installation von ASP.NET durch:
1. Wählen Sie Start Ausführen, um das Dialogfeld Ausführen zu öffnen.
2. Geben Sie cmd /e in das Dropdown-Feld Öffnen ein.
3. Klicken Sie auf OK.
4. Wechseln Sie zum Verzeichnis c:\Windows\Microsoft.NET\Framework\v1.1.4322.
5. Geben Sie den Befehl aspnet_regiis.exe -i ein.
6. Drücken Sie die EINGABETASTE.
Anmerkung: Wenn Sie die verfügbaren Befehlsoptionen für das Dienstprogramm aspnet_regiis.exe
anzeigen möchten, geben Sie nach dem Basisbefehl anstelle von -i das Zeichen ? ein.
So erstellen oder überprüfen Sie Ihr ASP.NET-Benutzerkonto:
1. Wählen Sie Start Systemsteuerung Benutzerkonten, um die Liste der im System verwendeten Benutzerkonten
anzuzeigen.
2. Wenn noch kein ASPNET-Benutzerkonto vorhanden ist, erstellen Sie eines.
3. Starten Sie den Computer neu.
Warnung: Weisen Sie dem ASPNET-Benutzerkonto keine Administratorrechte zu. Dies würde ein Sicherheitsrisiko für das
System bedeuten und Hackern die Möglichkeit eröffnen, weitergegebene ASP.NET-Anwendungen zu manipulieren. Erstellen
Sie stattdessen ein Konto, das einen Identitätswechsel unterstützt.
So führen Sie eine Installation bzw. eine erneute Installation von IIS durch:
1. Wählen Sie Start Systemsteuerung Software. Das Dialogfeld Software wird geöffnet.
2
2. Klicken Sie auf Windows-Komponenten hinzufügen/entfernen. Der Assistent für Windows-Komponenten wird
angezeigt.
3. Aktivieren Sie das Kontrollkästchen Internet Information Services (IIS).
4. Klicken Sie auf Weiter.
5. Klicken Sie auf Fertig stellen.
6. Starten Sie IIS.
So starten Sie IIS neu:
1. Klicken Sie auf Start Systemsteuerung Verwaltung Internet Information Services.
2. Wählen Sie den Knoten für den lokalen Computer aus.
3. Klicken Sie mit der rechten Maustaste, und wählen Sie IIS erneut starten. Das Dialogfeld Beenden/Starten/Herunterfahren
wird geöffnet.
204
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Fehlerbehebung in
4. Wählen Sie die gewünschte Aktion in der Dropdown-Liste aus.
5. Klicken Sie auf OK.
So konfigurieren Sie IIS, damit Ihre Anwendung erkannt wird:
1. Wechseln Sie in der IIS-Konsole zu dem Ordner oder dem virtuellen Verzeichnis mit Ihrer Webanwendung. Ist weder ein
Ordner noch ein virtuelles Verzeichnis vorhanden, müssen Sie ein virtuelles Verzeichnis erstellen.
2. Wählen Sie den Ordner aus.
3. Klicken Sie mit der rechten Maustaste, und wählen Sie Eigenschaften.
4. Aktivieren Sie die Registerkarte Virtuelles Verzeichnis.
5. Klicken Sie auf die Schaltfläche Erstellen unter dem Bereich Anwendungseinstellung. Falls die Schaltfläche Entfernen
angezeigt wird, entfernen Sie gegebenenfalls das vorhandene virtuelle Verzeichnis und erstellen ein neues.
So fügen Sie Dokumenttypen zu IIS hinzu:
1. Klicken Sie auf Start Systemsteuerung Verwaltung Internet Information Services.
2. Wählen Sie Standardwebsite.
3. Klicken Sie mit der rechten Maustaste, und wählen Sie Eigenschaften.
4. Aktivieren Sie die Registerkarte Dokumente.
5. Klicken Sie auf Hinzufügen. Das Dialogfeld Standarddokument hinzufügen wird geöffnet.
6. Geben Sie WebForm1.aspx in das Feld Name des Standarddokuments ein.
7. Klicken Sie zweimal auf OK.
So aktivieren Sie die anonyme Authentifizierung:
1. Wechseln Sie in der IIS-Konsole zu dem Ordner oder dem virtuellen Verzeichnis mit Ihrer Webanwendung. Ist weder ein
Ordner noch ein virtuelles Verzeichnis vorhanden, müssen Sie ein virtuelles Verzeichnis erstellen.
2. Wählen Sie den Ordner aus.
3. Klicken Sie mit der rechten Maustaste, und wählen Sie Eigenschaften.
4. Aktivieren Sie die Registerkarte Verzeichnissicherheit.
5. Klicken Sie auf Bearbeiten.
6. Aktivieren Sie das Kontrollkästchen Anonymer Zugriff.
7. Geben Sie in das Feld Benutzername den Namen des ASPNET-Benutzerkontos ein, das Sie erstellt haben.
8. Aktivieren Sie das Kontrollkästchen Integrierte Windows-Authentifizierung, oder fügen Sie Ihr eigenes Passwort hinzu.
9. Klicken Sie zweimal auf OK.
2
So überprüfen Sie die Datenbankverbindung:
1. Aktivieren Sie die Registerkarte Daten-Explorer, um die Datenbankverbindungen anzuzeigen.
2. Erweitern Sie die Liste der Provider, um eine gültige Datenbankverbindung anzuzeigen.
3. Klicken Sie mit der rechten Maustaste, und wählen Sie Verbindung bearbeiten. Der Verbindungseditor wird angezeigt.
4. Wenn der Bezeichner localhost nicht im Datenbank-Verbindungsstring enthalten ist, fügen Sie ihn an den String an.
Beispiel:
localhost:C:\Programme\Gemeinsame Dateien\Borland Shared\Data\EMPLOYEE.GDB
5. Stellen Sie sicher, dass alle anderen Verbindungseinstellungen korrekt sind.
6. Klicken Sie auf Test, um die Verbindung zu überprüfen.
205
Den ASP.NET-Deploymentmanager
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
Siehe auch
Überblick zu ASP.NET (
see page 85)
Microsoft-Diskussionsgruppen
Virtuelle Verzeichnisse erstellen (
see page 204)
HTTP-Meldungen in ASP.NET erzeugen (
see page 207)
2.5.21 Den DB Web Control-Experten verwenden
Mit dem DB Web Control-Experten können Sie ein datensensitives Web Control aus einem Standard-Web Control erstellen.
Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen die
Standard-Websteuerelemente verwenden.
So starten Sie den DB Web Control-Experten:
1. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte DB Web Control-Bibliothek.. Der DB Web Control-Experte
wird geöffnet.
2. Geben Sie in das Textfeld Name des Steuerelements einen Namen für das Control ein.
3. Aktivieren Sie die Option An DataTable binden. Der Experte fügt dann automatisch Quelltext für die Implementierung des
Interface IDBWebDataLink in die Control-Datei ein. Über dieses Interface kann auf Datenquellen- und Tabelleninformationen
zugegriffen werden.
4. Wählen Sie die Option An DataColumn binden, wenn eine Bindung zu einer Spalte definiert werden soll (wenn das Control
z.B. nur einen bestimmten Datentyp unterstützt). Der Experte fügt dann automatisch Quelltext für die Implementierung des
Interface IDBWebColumnLink in die Control-Datei ein. Über dieses Interface wird auf eine Spalte in der Tabelle zugegriffen,
die über IDBWebDataLink zugänglich ist.
5. Wenn Sie eine Bindung zu einer Datenspalte für ein Control definieren, das Nachschlagezwecken dient (Listenfeld,
Optionsfeldgruppe, Kontrollkästchen usw.), und das neue Control ebenfalls ein Nachschlage-Control sein soll, aktivieren Sie
das Kontrollkästchen Lookup unterstützen. Der Experte fügt dann automatisch Quelltext für die Implementierung des
Interface IDBWebLookupColumnLink in die Control-Datei ein. Über dieses Interface wird auf die Nachschlagetabelle, das
Textfeld und den Feldwert der Spalte zugriffen, die über IDBWebColumnLink zugänglich ist.
Der DB Web Control-Experte erstellt eine Template-Datei und öffnet sie im Quelltext-Editor. Bearbeiten Sie diese Datei, und
leiten Sie Ihr Control von einem DB Web Control ab.
Siehe auch
Überblick zum DB Web Control-Experten (
2
Überblick zu Borland DB Web Controls (
see page 93)
see page 88)
2.5.22 Den ASP.NET-Deploymentmanager verwenden
Sie können einem ASP.NET-Anwendungsprojekt einen ASP.NET-Deploymentmanager hinzufügen, um die Weitergabe der
Anwendung zu vereinfachen. Der Deploymentmanager bestimmt die Dateien, die für das Deployment erforderlich sind, fordert
den Namen des Zielverzeichnisses und die Verbindungsinformationen an und kopiert die Dateien in das Zielverzeichnis. Der
Deploymentmanager erzeugt eine Liste der zu kopierenden Dateien basierend auf den Namen der Dateien im
Projektverzeichnis. Sie können dieser Liste aber nach Bedarf weitere Dateien hinzufügen oder Dateien daraus entfernen.
Wenn Sie im Fenster des Deploymentmanagers mit der rechten Maustaste klicken, werden die Optionen zum Anzeigen,
206
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Den ASP.NET-Deploymentmanager
Kopieren, Löschen, Ändern und Filtern der Zieldateien angezeigt.
Ist die Option Assemblierungsreferenzen anzeigen aktiviert, enthält das Fenster des Deploymentmanagers eine Liste mit allen
vom Projekt referenzierten Assemblierungen. Die Systemassemblierungen werden zwar angezeigt, sind aber deaktiviert (grau).
Dieses deaktivierten Assemblierungen können nicht weitergegeben werden.
Mit Hilfe der Option Externe Dateien können Sie die externen Dateien auswählen, die weitergegeben werden sollen. In einem
Dialogfeld mit einer Checkliste sind bereits die BDP-Datenbankbibliotheken markiert, da diese häufig weitergegeben werden
müssen. Sie können auch Datei Öffnen wählen und die gewünschten Dateien in einem separaten Dialogfeld der Liste
hinzufügen. Die Liste enthält eine Spalte, in der das Zielverzeichnis für die externe Datei angegeben ist. Sie können den Zielpfad
ändern. Die Dateien, die beim Klicken auf OK ausgewählt sind, werden im Deploymentmanager angezeigt.
Weitere Informationen zum Kontextmenü des Deploymentmanagers finden Sie über die entsprechenden Links am Ende dieses
Themas.
Vorbereitende Maßnahmen
• Um das IIS-Debugging von RAD Studio-Anwendungen zu ermöglichen, werden Sie während der Installation von RAD Studio
gefragt, ob die Datei machine.config auf Ihrem Computer aktualisiert werden soll. Wenn Sie diese Frage mit Ja
beantworten, werden CodeGear-Debugger-Informationen in die Datei machine.config geschrieben. Sollten Sie die Frage
mit Nein beantworten, werden die Debugger-Informationen in die Datei web.config der Anwendung geschrieben, wenn Sie
eine ASP.NET-Anwendung mit RAD Studio erzeugen. Vor dem Deployment einer Anwendung muss das Debugging wie in
der folgenden Anleitung beschrieben deaktiviert werden, um die Anwendung zu optimieren. Wenn Sie sich bei der Installation
gegen eine Aktualisierung der Datei machine.config entschieden haben, müssen Sie Verweise auf
CodeGear-Debugger-Module in der Datei web.config entfernen, da diese auf dem Zielcomputer möglicherweise nicht zur
Verfügung stehen.
• Sie sollten deshalb die Verwendung einer separaten web.config-Datei für Deployment-Zwecke in Betracht ziehen. So
könnten Sie beispielsweise eine Datei mit dem Namen web.config.deploy erstellen und diese während des Deployments
in web.config umbenennen. Verwenden Sie zum Umbenennen der Datei den Befehl Name der Zieldatei ändern des
Deploymentmanagers.
• Es ist möglich, das Zielverzeichnis während der Arbeit mit dem Deploymentmanager zu erstellen. Die Anwendung kann dann
aber erst verwendet werden, nachdem das virtuelle Verzeichnis mit IIS erstellt wurde. Alternativ können Sie das Deployment
auch in ein vorhandenes virtuelles Verzeichnis durchführen.
• Beim Deployment für eine FTP-Site behält der Deploymentmanager Ihre FTP-Verbindungsinformationen bei. Sie können Ihr
Passwort für die FTP-Verbindung speichern. Dies erfolgt dann aber unverschlüsselt als Text.
• Sie können einem ASP.NET-Projekt mehrere Deploymentmanager hinzufügen und diese für die Weitergabe an verschiedene
Zielverzeichnisse konfigurieren.
• Einige der im Deploymentmanager verfügbaren Befehle sind auch im Kontextmenü der Projektverwaltung enthalten.
So entfernen Sie Debugger-Verweise aus der web.config-Datei:
1. Öffnen Sie die Datei web.config für die ASP.NET-Anwendung, die Sie weitergeben möchten, in der IDE oder in einem
Texteditor.
2
2. Ändern Sie im Abschnitt <compilation> die Anweisung debug="true" in debug="false".
3. Übergehen Sie diesen Schritt, wenn Sie während der Installation von RAD Studio der Aktualisierung der Datei
machine.config zugestimmt haben (siehe den Abschnitt Vorbereitende Maßnahmen weiter oben). Entfernen Sie die
folgenden Verweise auf CodeGear-Debugger-Assemblierungen und -Module, oder kommentieren Sie diese aus:
<assemblies>
<add assembly="Borland.dbkasp, Version=9.0.0.1,
Culture=neutral, PublicKeyToken=b0524c541232aae7"/>
</assemblies>
<httpModules>
<add name="DbgConnect" type =
"Borland.DbkAsp.DbkConnModule,Borland.dbkasp,Version=9.0.0.1,
Culture=neutral,
PublicKeyToken=b0524c541232aae7"/>
207
Den ASP.NET-Deploymentmanager
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
</httpModules>
4. Speichern Sie die Datei, und compilieren Sie die Anwendung erneut.
So führen Sie das Deployment einer ASP.NET-Anwendung durch:
1. Öffnen Sie das ASP.NET-Anwendungsprojekt, das Sie weitergeben möchten, in der IDE.
2. Wählen Sie Datei Neu Weitere Deployment ASP.NET-Deployment, und klicken Sie auf OK. (Der Deployment-Knoten
wird nur dann im Dialogfeld Objektgalerie angezeigt, wenn ein ASP.NET-Projekt geöffnet ist.) Die Registerkarte
Weitergeben wird angezeigt, und dem Projektverzeichnis wird eine .bdsdeploy-Datei hinzugefügt. Die Datei wird in der
Projektverwaltung angezeigt. Auf der linken Seite der Registerkarte Weitergeben unter Quelldateien sehen Sie eine Liste
der Dateien, die für das Deployment erforderlich sind.
Tip: In dieser Liste sind nur gespeicherte Dateien enthalten. Speichern Sie alle neue Dateien, und aktualisieren Sie den
Deploymentmanager, damit diese Dateien angezeigt werden.
3. Wählen Sie in der Dropdown-Liste Ziel entweder Ordnerposition oder FTP-Speicherort. Bei Auswahl von Ordnerposition
wird das Dialogfeld Ordner suchen geöffnet. Sie können ein vorhandenes Verzeichnis auswählen oder auf Neues
Verzeichnis erstellen klicken. Wenn Sie FTP-Speicherort wählen, wird das Dialogfeld FTP-Site angezeigt. Geben Sie die
Verbindungsinformationen ein. Wenn Sie Informationen zu einem Feld benötigen, klicken Sie auf Hilfe. Klicken Sie
anschließend auf OK, um zum Deploymentmanager zurückzukehren.
4. Wenn Sie einen FTP-Speicherort ausgewählt haben, aktivieren Sie das Kontrollkästchen Verbunden, um die Dateien im
Zielverzeichnis (sofern vorhanden) zu verbinden und anzuzeigen.
5. Überprüfen Sie die Dateien in der Liste Quelldateien. Wenn Sie auf eine Datei klicken, werden im Textfeld unter der
Dateiliste Detailinformationen zu dieser Datei angezeigt.
6. Um alle Dateien in das Zielverzeichnis zu kopieren, klicken Sie auf die Schaltfläche Alle neuen und geänderten Dateien
nach Ziel kopieren in der Symbolleiste am oberen Rand des Deploymentmanagers. Die Dateien werden dann sofort in
das Zielverzeichnis kopiert und in der Liste Zieldateien angezeigt. Um die Dateiliste zu ändern, klicken Sie mit der rechten
Maustaste an einer beliebigen Stelle der Liste und wählen den gewünschten Befehl im Kontextmenü aus oder verwenden die
Dateistatus-Schaltflächen, wie unten beschrieben.
Tip: Um eine Datei in der Liste auszuwählen, klicken Sie auf ihren Namen. Sie können mehrere Dateien in der Liste
markieren, indem Sie bei gedrückter STRG
-Taste nacheinander auf die betreffenden Dateien klicken. Um einen Bereich mit Dateien auszuwählen, drücken Sie
STRG+UMSCHALT und klicken auf die erste Datei und anschließend auf die letzte Datei des Bereichs.
Kontextmenübefehl
Beschreibung
Aktualisieren
Der Deploymentmanager wird entsprechend der Änderungen in der Dateiliste aktualisiert.
Markierte
Datei(en) Die ausgewählten Dateien werden in das Zielverzeichnis kopiert.
nach Ziel kopieren
2
Markierte
löschen
Namen
ändern
Zieldatei(en) Die ausgewählten Dateien werden im Zielverzeichnis gelöscht (für jede Datei wird eine Bestätigung
des Vorgangs gefordert).
der
Zieldatei Ein Dialogfeld zum Umbenennen der ausgewählten Datei im Zielverzeichnis wird geöffnet.
Alle
neuen
und Alle mit
markierten Dateien werden in das Zielverzeichnis kopiert. Dieser Befehl steht auch in der
geänderten
Dateien Symbolleiste des Deploymentmanagers zur Verfügung oder kann durch Klicken mit der rechten
nach Ziel kopieren
Maustaste auf den .bdsdeploy-Knoten in der Projektverwaltung aufgerufen werden.
Alle nicht im Projekt Alle mit
markierten Dateien werden im Zielverzeichnis gelöscht (für jede Datei wird eine
enthaltenen Zieldateien Bestätigung des Vorgangs gefordert).
löschen
Ignorierte Gruppen und Alle Dateien im Projektverzeichnis werden angezeigt, auch diejenigen, die für das Deployment der
Dateien anzeigen
Anwendung nicht erforderlich sind.
Gruppe ignorieren
208
Die ausgewählte Datei wird vom Deploymentmanager ignoriert.
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
Mit dem HTML-Tag-Editor arbeiten
Datei(en) ignorieren
Alle Dateien eines Knotens in der Quelldateiliste werden vom Deploymentmanager ignoriert.
Protokollierung
aktivieren
Die Aktionen des Deploymentmanagers werden in der Datei DeployLog.txt im Projektverzeichnis
protokolliert.
Protokoll anzeigen
Die Protokolldatei wird im Standard-Texteditor geöffnet.
7. Wenn Sie die Kriterien für das Deployment festgelegt haben, speichern Sie die Einstellungen in der Datei .bdsdeploy. Nach
dem erneuten Öffnen des Projekts können Sie den Deploymentmanager in der Projektverwaltung öffnen und die
Anwendung mit den aktuellen Einstellungen weitergeben oder die Deployment-Kriterien ändern (siehe oben).
Die folgenden Schaltflächen zeigen den Status der Dateien in der Dateiliste an und können zum Kopieren oder Löschen von
Dateien verwendet werden (siehe unten).
Dateistatus-Schaltfläche
Beschreibung
Die Datei kann zum Kopieren ausgewählt werden (sie ist im Zielverzeichnis nicht vorhanden
oder wurde seit dem letzten Kopieren geändert).
Klicken Sie auf die Schaltfläche, um die Datei in das Zielverzeichnis zu kopieren.
Die Datei ist im Zielverzeichnis, nicht aber im Projektverzeichnis vorhanden. Dateien mit diesem
Symbol können in der Regel ohne nachteilige Auswirkungen aus dem Zielverzeichnis entfernt
werden.
Klicken Sie auf die Schaltfläche, um die Datei im Zielverzeichnis zu löschen.
Der Status der Datei ist nicht bekannt. Sie ist möglicherweise jüngeren Datums als die Datei im
Projektverzeichnis.
Klicken Sie auf die Schaltfläche, um die Datei im Zielverzeichnis zu ersetzen.
So erstellen Sie mit IIS ein virtuelles Verzeichnis für ein neues Zielverzeichnis:
1. Öffnen Sie IIS auf dem Computer, an den Sie die Anwendung weitergegeben haben. Wählen Sie beispielsweise unter
Windows XP Start Systemsteuerung Verwaltung Internet Information Services.
2. Erweitern Sie im Dialogfeld Internet Information Services die Baumstruktur, um den Knoten des lokalen Computers
anzuzeigen.
3. Klicken Sie mit der rechten Maustaste auf den Knoten Standardwebsite, und wählen Sie Neu Virtuelles Verzeichnis. Der
Assistent zum Erstellen virtueller Verzeichnisse wird angezeigt.
4. Folgen Sie den Aufforderungen auf den Seiten des Assistenten, um das virtuelle Verzeichnis zu erstellen.
Weitere Informationen zu virtuellen Verzeichnissen finden Sie in der Online-Hilfe von IIS.
Siehe auch
Deployment von ASP.NET-Anwendungen (
see page 102)
2
2.5.23 Mit dem HTML-Tag-Editor arbeiten
Sie können zur Erstellung oder Bearbeitung einer HTML-Datei den Tag-Editor verwenden. Dieser Editor befindet sich unterhalb
des Designer-Fensters. Für ASP.NET Webformulare wird der Tag-Editor nicht unterstützt. Wenn Sie beispielsweise ein
HTML-Formular verwenden, können Sie den Tag-Editor im Designer durch Auswahl von Ansicht Tag-Editor anzeigen.
Im Tag-Editor können Sie HTML-Tags überprüfen und ändern und gleichzeitig die entsprechenden Steuerelemente im
Designer-Fenster darüber beobachten. Der Editor unterstützt die folgenden Funktionen des Quelltext-Editors:
Programmierhilfe, Fehlermarkierung und Live-Template-Vervollständigung. Ausführliche Informationen zu diesen
Funktionen finden Sie über die entsprechenden Links am Ende dieses Themas.
Im Tag-Editor wird jeweils nur ein Tag bearbeitet, sofern nicht das Dokumentobjekt markiert oder ein Tag verkleinert ist (bei
209
Mit dem HTML-Tag-Editor arbeiten
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
ausgewähltem Dokumentobjekt wird im Objektinspektor der Eintrag "DOCUMENT" angezeigt).
Mit Hilfe der Zoom-Schaltflächen können Sie die Ansicht verkleinern, um das übergeordnete Tag anzuzeigen, oder die Ansicht
vergrößern und das ausgewählte untergeordnete Tag anzeigen. Die Zoomfunktion wird nicht für ein bestimmtes Tag ausgeführt,
sondern für die gesamte Auszeichnung im Dokument. Wenn Sie den Cursor beispielsweise auf ein Tag im HTML-Markup
platzieren und den Zoom-Befehl aufrufen, gelangen Sie zum äußeren Tag, d.h. auf die Ebene oberhalb des Attributs, auf dem
sich der Cursor befindet.
Die Überprüfung auf HTML-Standardregeln wird automatisch durchgeführt. Wenn diese Validierung fehlschlägt, wird das
fehlerhafte Element im Designer rot hervorgehoben. Gleichzeitig wird im Tag-Editor die Funktion Fehlermarkierung aktiviert,
um die Fehlerbehebung zu erleichtern.
Anmerkung: Der Tag-Editor
steht in einer ASP.NET-Anwendung nicht zur Verfügung.
So zeigen Sie den HTML-Quelltext für ein einzelnes Steuerelement an:
1. Ziehen Sie bei angezeigtem Designer ein HTML-Element aus der Tool-Palette in die Designer-Oberfläche. Der HTML-Code
wird im Tag-Editor angezeigt.
2. Sie können den Quelltext des Steuerelements einblenden, indem Sie auf eine beliebige Stelle der Designer-Oberfläche
klicken, um die Auswahl des Steuerelements aufzuheben. Der HTML-Quelltext wird im Tag-Editorfenster angezeigt, wobei
verschiedene Syntaxelemente unterschiedlich hervorgehoben werden. In der grauen Titelleiste des Tag-Editors wird jetzt das
übergeordnete Tag angezeigt. In der Regel handelt es sich hierbei um das Tag FORM, das zur Definition des betreffenden
Web Form dient.
Anmerkung: Falls die Definition des Steuerelements mehrere HTML-Quelltextzeilen umfasst, wird bei Auswahl des
Steuerelements die erste Quelltextzeile in der grauen Titelleiste des Tag-Editors angezeigt. Der weitere Quelltext wird
darunter im Tag-Editorfenster eingeblendet.
So zeigen Sie den HTML-Quelltext für alle Steuerelemente an:
1. Ziehen Sie bei angezeigtem Designer mehrere HTML-Elemente aus der Tool-Palette in die Designer-Oberfläche. Sobald Sie
ein Element im Designer ablegen, wird der zugehörige HTML-Quelltext im Editor angezeigt.
2. Klicken Sie auf eine beliebige Stelle der Designer-Oberfläche, um die Auswahl sämtlicher Steuerelemente aufzuheben.
Daraufhin wird der Quelltext für alle Steuerelemente mit Syntaxhervorhebungen im Tag-Editor angezeigt.
So bearbeiten Sie ein Steuerelement:
1. Klicken Sie auf eine beliebige Stelle der Designer-Oberfläche, um die Auswahl sämtlicher Steuerelemente aufzuheben.
2. Suchen Sie das Tag, das zu dem zu bearbeitenden Steuerelement gehört.
3. Bearbeiten Sie den Quelltext. Das Steuerelement im Designer wird sofort entsprechend aktualisiert.
4. Speichern Sie das Projekt, um die Änderungen festzuschreiben.
2
So ändern Sie Editoreigenschaften:
1. Wählen Sie Tools Optionen HTML-/ASP.NET-Optionen.
2. Ändern Sie die Eigenschaften des Quelltext-Editors nach Bedarf.
3. Klicken Sie auf OK. Die Änderungen sind sofort wirksam.
So wechseln Sie zwischen der Anzeige des Formulars und der Anzeige des Formularcontainers:
1. Um die Anzeige zu verkleinern, sodass die HTML-Formulardefinition angezeigt wird, klicken Sie auf den blauen Pfeil, der sich
am linken Rand der grauen Titelleiste des Tag-Editors befindet.
Anmerkung: Diese Funktion ist nur verfügbar, wenn sich der Cursor innerhalb des Tag-Editors und nicht innerhalb der
Designer-Oberfläche befindet.
210
2.5 ASP.NET – Anleitungen
RAD Studio für .NET
ASP.NET User Controls verwenden
2. Um die Anzeige zu vergrößern, sodass der innerhalb der FORM-Tags definierte Inhalt angezeigt wird, klicken Sie auf den
blauen Pfeil am rechten Rand der grauen Titelleiste des Tag-Editors.
Anmerkung: Diese Funktion ist nur verfügbar, wenn sich der Cursor innerhalb des Tag-Editors und nicht innerhalb der
Designer-Oberfläche befindet.
So schließen Sie den Tag-Editor:
1. Wählen Sie Tools Optionen HTML-/ASP.NET-Optionen.
2. Deaktivieren Sie die Option Tag-Editor anzeigen.
3. Klicken Sie auf OK.
Siehe auch
Den Quelltext-Editor verwenden
Quelltext-Editor anpassen
Verwendung von Live-Templates
Code Insight verwenden
2.5.24 ASP.NET User Controls verwenden
User Controls ermöglichen es, eine häufig verwendete Funktionalität der Benutzeroberfläche für alle
ASP.NET-Webanwendungen bereitzustellen. Es ist beispielsweise möglich, einen Anmeldebildschirm in einem User Control zu
kapseln. Wenn später in einem Web Form ein Anmeldebildschirm benötigt wird, muss nur das betreffende User Control in das
Web Form eingefügt werden. Ausführliche Informationen über User Controls erhalten Sie über den Link am Ende dieses
Themas.
So erstellen Sie ein ASP.NET User Control:
1. Öffnen Sie eine ASP.NET-Anwendung.
2. Wählen Sie Datei Neu Weitere Delphi für .NET-Projekte Neue ASP.NET-Dateien, und doppelklicken Sie auf
ASP.NET User Control. Der Projektverwaltung wird eine neue .ascx-Datei hinzugefügt, und die leere Seite wird im
Designer angezeigt. Sie können die .ascx-Datei bei Bedarf umbenennen. Klicken Sie dazu in der Projektverwaltung mit der
rechten Maustaste auf die Datei, und wählen Sie Umbenennen. Alle verknüpften Dateien (z.B. .pas- und .resx-Dateien)
werden ebenfalls umbenannt.
3. Entwerfen Sie die Seite, indem Sie Steuerelemente platzieren, Eigenschaften zuweisen und der Codebehind-Datei .pas
nach Bedarf Quelltext hinzufügen.
4. Speichern und compilieren Sie das Projekt.
2
So fügen Sie ein ASP.NET User Control zu einem Web Form hinzu:
1. Öffnen Sie das Web Form, dem Sie das User Control hinzufügen möchten. Stellen Sie sicher, dass der Designer angezeigt
wird.
2. Wählen Sie Einfügen User Control einfügen, um das Dialogfeld User Control einfügen zu öffnen.
3. Wählen Sie ein User Control aus der Dropdown-Liste, oder navigieren Sie mit der Schaltfläche Durchsuchen zu einer Datei
mit einem User Control (.ascx).
4. Klicken Sie auf OK, um das User Control in das Web Form einzufügen.
5. Sie können der User Control-Schaltfläche einen Namen zuweisen, indem Sie im Objektinspektor die Eigenschaft Id
entsprechend festlegen.
6. Speichern und compilieren Sie das Projekt.
211
ASP.NET User Controls verwenden
RAD Studio für .NET
2.5 ASP.NET – Anleitungen
Das Web Form wird im Browser angezeigt, und die User Control-Schaltfläche wird durch die gekapselten Steuerelemente
ersetzt.
Tip: Wie das User Control zur Laufzeit aussieht, hängt von der Seite und den Steuerelementen ab, die im Control gekapselt
sind. Die Position der User Control-Schaltfläche im Web Form spielt dabei keine Rolle. Wenn Sie einer Seite mehrere User
Controls hinzufügen, sollten Sie die Anwendung ausführen und überprüfen, ob sich Controls überlappen.
Siehe auch
User Controls in Web Forms
2
212
2.6 Web-Services-Anleitungen
RAD Studio für .NET
Auf die
2.6 Web-Services-Anleitungen
Dieser Abschnitt enthält Anleitungen zur Entwicklung und Verwendung von Web-Services.
Themen
Name
Beschreibung
Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen (
page 218)
Webreferenzen in ASP.NET-Projekte einfügen (
see
see page 220)
ASP.NET-Web-Services-Anwendung "Hello World" erstellen (
see page 222)
Web-Services-Client-Anwendung von Delphi für Win32 nach Delphi für .NET
portieren ( see page 223)
Wenn Sie die erstellte Web-Services-Anwendung benutzen möchten, müssen
Sie eine Client-Anwendung erstellen, über die auf die
ASP.NET-Web-Services-Anwendung zugegriffen werden kann. Um das
gewünschte Ergebnis zu erzielen, sind andere Entwicklungsschritte erforderlich.
Um einen Web-Service zu nutzen, müssen Sie eine Client-Anwendung erstellen
und eine Webreferenz hinzufügen. In diesen Anleitungen wird die Erstellung
einer ASP.NET-Client-Anwendung demonstriert, die einen Web-Service eines
Fremdherstellers nutzt. Dabei handelt es sich um den Web-Service
DeadOrAliveWS, der auf der XMethods-Website zur Verfügung steht. Mit Hilfe
dieses Web-Service können Sie auf eine einfache Datenbank mit den Geburtsund Todestagen berühmter Persönlichkeiten zugreifen.
Wenn Sie eine Anwendung mit ASP.NET-Web-Services erstellen, können Sie
über eine Internet-Verbindung der Client-Anwendung eine bestimmte
Funktionalität bereitstellen. Die folgenden Schritte zeigen, wie eine einfache
"Hello World"-Anwendung mit ASP.NET-Web-Services erstellt wird. Nach dem
Build stellt die Anwendung alle in ihr definierten Objekte und Methoden über eine
Webmethode zur Verfügung, die Sie definieren und auf die Sie über einen
Web-Browser zugreifen.
Im Folgenden werden die Schritte beschrieben, die zum Portieren einer mit
Delphi für Win32 erstellten Web-Services-Client-Anwendung nach Delphi für
.NET ausgeführt werden müssen.
2.6.1 Auf die ASP.NET-Web-Services-Anwendung "Hello
World" zugreifen
Wenn Sie die erstellte Web-Services-Anwendung benutzen möchten, müssen Sie eine Client-Anwendung erstellen, über die auf
die ASP.NET-Web-Services-Anwendung zugegriffen werden kann. Um das gewünschte Ergebnis zu erzielen, sind andere
Entwicklungsschritte erforderlich.
So greifen Sie auf eine einfache ASP.NET- Web-Services-Anwendung namens "Hello World" zu:
1. Erstellen Sie eine Client-Anwendung.
2. Fügen Sie eine Webreferenz für einen XML-Web-Service hinzu.
2
3. Erstellen Sie die Codebehind-Logik.
4. Führen Sie die Client-Anwendung aus.
So erstellen Sie eine Client-Anwendung:
1. Wählen Sie Datei Neu Weitere. Das Dialogfeld Objektgalerie wird geöffnet.
2. Wählen Sie einen beliebigen Anwendungstyp für den Client aus, zum Beispiel eine Windows Forms-Anwendung oder eine
ASP.NET-Webanwendung. In diesem Beispiel wird eine Windows Forms-Anwendung erstellt (mit Delphi für .NET oder C#).
3. Klicken Sie auf OK. Das Dialogfeld Neues Projekt wird geöffnet.
So fügen Sie eine Webreferenz für eine ASP.NET-Web-Services-Anwendung hinzu:
1. Wählen Sie Projekt Webreferenz hinzufügen.
213
Webreferenzen in ASP.NET-Projekte
RAD Studio für .NET
2.6 Web-Services-Anleitungen
2. Geben Sie in das Adressfeld im oberen Bereich des Web-Dialogfelds CodeGear UDDI Browser folgenden URL ein:
http://localhost/WebService1/WebService1.asmx
Anmerkung: Der Name Ihrer Anwendung lautet möglicherweise nicht WebService1. In diesem Fall ersetzen Sie WebService1
im vorstehenden Beispiel durch den Namen Ihrer Anwendung.
3. Drücken Sie die Taste EINGABE.
Anmerkung: Wenn Sie die richtige Pfadangabe ermitteln müssen und mit IIS arbeiten, können Sie den
Internetdienste-Manager im Modul Verwaltung der Windows XP-Systemsteuerung öffnen. Suchen Sie in der Liste der
IIS-Websites nach dem Web-Service, den Sie gespeichert und compiliert haben. Überprüfen Sie dann den Namen der
Website und den Namen der .asmx
-Datei. Wenn Sie den korrekten Pfad eingegeben haben, werden daraufhin Informationen zu den Webmethoden angezeigt.
4. Klicken Sie auf den Link Service Description, um das WSDL-Dokument anzuzeigen.
5. Klicken Sie auf Referenz hinzufügen, um das WSDL-Dokument in die Client-Anwendung einzufügen. Der Ordner Web
References wird in das Projektverzeichnis in der Projektverwaltung eingefügt. Er enthält die Datei WebService1.wsdl.
Das Dialogfeld wird geschlossen.
So erstellen Sie die Codebehind-Logik:
1. Fügen Sie dem Windows Form eine Button-Komponente hinzu.
2. Doppelklicken Sie auf die Button-Komponente, um die Quelltextdatei anzuzeigen.
3. Implementieren Sie für einen Delphi für .NET-Client im Quelltext-Editor folgende Behandlungsroutine für das Click-Ereignis:
procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
var
ws: TWebService1;
begin
ws := TWebService1.Create;
button1.Text := ws.HelloWorld();
end;
Beim Hinzufügen der Webreferenz hat RAD Studio mit WSDL eine Proxy-Klasse erzeugt, die den "Hello World"-Web-Service
repräsentiert. Das Click-Ereignis verwendet Methoden der Proxy-Klasse für den Zugriff auf den Web-Service. Für einen Delphi
für .NET-Client muss eventuell der Unit-Name der Proxy-Klasse (z.B. localhost.WebService1) in die uses-Klausel der
Windows Form-Unit aufgenommen werden, um Fehler beim Click-Ereignis zu verhindern.
4. Implementieren Sie für einen C#-Client im Quelltext-Editor folgende Behandlungsroutine für das Click-Ereignis:
private void button1_Click(object sender, System.EventArgs e)
{
TWebService1 ws = new TWebService1();
button1.Text = ws.HelloWorld();
}
2
So führen Sie die Client-Anwendung aus:
1. Speichern Sie die Anwendung.
2. Compilieren Sie das Projekt, und führen Sie es aus.
3. Klicken Sie in der Client-Anwendung auf die hinzugefügte Schaltfläche. Der Titel "Hello World" wird auf der Schaltfläche
angezeigt.
Siehe auch
Überblick zu den ASP.NET-Web-Services (
ASP.NET-Web-Services-Support (
see page 106)
see page 110)
ASP.NET-Web-Services-Anwendung "Hello World" erstellen (
214
see page 222)
2.6 Web-Services-Anleitungen
RAD Studio für .NET
Webreferenzen in ASP.NET-Projekte
2.6.2 Webreferenzen in ASP.NET-Projekte einfügen
Um einen Web-Service zu nutzen, müssen Sie eine Client-Anwendung erstellen und eine Webreferenz hinzufügen. In diesen
Anleitungen wird die Erstellung einer ASP.NET-Client-Anwendung demonstriert, die einen Web-Service eines Fremdherstellers
nutzt. Dabei handelt es sich um den Web-Service DeadOrAliveWS, der auf der XMethods-Website zur Verfügung steht. Mit Hilfe
dieses Web-Service können Sie auf eine einfache Datenbank mit den Geburts- und Todestagen berühmter Persönlichkeiten
zugreifen.
So erstellen Sie ein ASP.NET-Projekt:
1. Wählen Sie Datei Neu Weitere. Das Dialogfeld Objektgalerie wird geöffnet.
2. Doppelklicken Sie in der Elementkategorie Delphi für .NET-Projekte auf das Symbol ASP.NET-Webanwendung. Das
Dialogfeld Neue ASP.NET-Anwendung wird geöffnet.
3. Geben Sie in das Feld Name einen Namen für das Projekt ein.
4. Geben Sie in das Feld Speicherort den Verzeichnispfad des Projekts ein.
Tip: Die meisten ASP.NET-Projekte befinden sich im IIS-Verzeichnis Inetpub\wwwroot
.
5. Klicken Sie gegebenenfalls auf die Schaltfläche Serveropt. einblenden, um die Einstellungen für den Webserver zu ändern.
Tip: Dieser Schritt ist optional. Normalerweise können die Standard-Serveroptionen verwendet werden.
6. Klicken Sie auf OK. Der Web Forms-Designer wird angezeigt.
So entwerfen Sie die ASP.NET-Webseite:
1. Stellen Sie sicher, dass die Ansicht Design aktiv ist.
2. Ziehen Sie aus der Kategorie Web Controls der Tool-Palette eine Button-Komponente in die Designer-Oberfläche. Die
Button-Komponente wird im Designer angezeigt. Stellen Sie sicher, dass sie ausgewählt ist.
3. Setzen Sie im Objektinspektor die Eigenschaft Text auf Dead or Alive?.
4. Ziehen Sie aus der Kategorie Web Controls der Tool-Palette eine TextBox-Komponente in den Designer, und platzieren Sie
sie über der Button-Komponente. Hier wird die Abfrage für den Web-Service eingegeben.
5. Fügen Sie eine Label-Komponente unterhalb der Button-Komponente ein. Hier werden die Ergebnisse der
Web-Service-Abfrage angezeigt.
Lokalisieren Sie nun mit Hilfe des UDDI-Browsers den Web-Service DeadOrAlive im Internet. Dies ermöglicht Ihnen die Nutzung
der von WSDL (Web Service Definition Language) veröffentlichten Methoden und Objekte.
So fügen Sie die Webreferenz für DeadOrAliveWS hinzu:
1. Wählen Sie Projekt Webreferenz hinzufügen.
2. Klicken Sie im Web-Dialogfeld CodeGear UDDI Browser in der Liste der verfügbaren UDDI-Verzeichnisse auf den Link
Vollständige XMethods. Eine Liste der auf der XMethods-Website veröffentlichten Web-Services wird angezeigt.
3. Suchen Sie nach dem Link DeadOrAliveWS, und klicken Sie darauf.
Tip: Sie können für die Suche im CodeGear UDDI Browser
die Tastenkombination STRG+F verwenden.
4. Klicken Sie auf den Link zur WSDL-Datei:
http://www.abundanttech.com/webservices/deadoralive/deadoralive.wsdl
215
2
Webreferenzen in ASP.NET-Projekte
RAD Studio für .NET
2.6 Web-Services-Anleitungen
Ein WSDL-Dokument wird angezeigt. Dieses XML-Dokument beschreibt das Interface zum Web-Service DeadOrAliveWS.
5. Klicken Sie auf Referenz hinzufügen, um das WSDL-Dokument in die Client-Anwendung einzufügen. Der Ordner Web
References mit dem Knoten com.abundanttech.www wird in der Projektverwaltung in das Projektverzeichnis eingefügt.
So erstellen Sie die Anwendungslogik:
1. Stellen Sie sicher, dass die Ansicht Design aktiv ist.
2. Doppelklicken Sie auf die Schaltfläche Dead or Alive?, um die Codebehind-Datei anzuzeigen.
3. Implementieren Sie für eine Delphi für .NET-Web-Services-Anwendung im Quelltext-Editor folgende Behandlungsroutine für
das Click-Ereignis:
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
var
result: DataSet;
ws: DeadOrAlive;
currentTable: DataTable;
currentRow: DataRow;
currentCol: DataColumn;
begin
// Web-Service initialisieren
ws := DeadOrAlive.Create;
// Eingabe an den Web-Service senden
result := ws.getDeadOrAlive(TextBox1.Text);
// Ergebnisse analysieren und anzeigen
Label1.Text := '';
for currentTable in result.Tables do
begin
Label1.Text := Label1.Text + '<p>' + #13#10;
for currentRow in currentTable.Rows do
begin
for currentCol in currentTable.Columns do
begin
Label1.Text := Label1.Text + currentCol.ColumnName + ': ';
Label1.Text := Label1.Text + (currentRow[currentCol]).ToString;
Label1.Text := Label1.Text + '<br>' + #13#10;
end;
end;
Label1.Text := Label1.Text + '</p>';
end;
end;
2
Beim Hinzufügen der Webreferenz hat RAD Studio mit WSDL eine Proxy-Klasse erzeugt, die den "Hello World"-Web-Service
repräsentiert. Das Click-Ereignis verwendet Methoden der Proxy-Klasse für den Zugriff auf den Web-Service. Für Delphi für
.NET-Web-Services muss eventuell der Unit-Name der Proxy-Klasse (abundanttech.deadoralive) zur uses-Klausel der
Web Form-Unit hinzugefügt werden, um Fehler beim Click-Ereignis zu verhindern.
So führen Sie die Anwendung aus:
1. Wählen Sie Projekt Alle Projekte erzeugen. Das Projekt wird erstellt und befindet sich nun auf dem ASP.NET-Server.
2. Öffnen Sie einen Web-Browser.
3. Geben Sie den URL der .aspx-Datei Ihrer Webanwendung ein, und drücken Sie die EINGABETASTE.
Tip: Bei Verwendung von Microsoft IIS ist der URL der Pfad der .aspx
-Datei nach Inetpub\wwwroot. Ist beispielsweise c:\Inetpub\wwwroot\WebApplication1 der Pfad der
Webanwendung und WebForm1.aspx der Name der .aspx-Datei, lautet der URL
http://localhost/WebApplication1/WebForm1.aspx.
4. Geben Sie, falls erforderlich, Ihren Benutzernamen und das Passwort für den ASP.NET-Server ein. Die Webseite für Ihre
216
2.6 Web-Services-Anleitungen
RAD Studio für .NET
ASP.NET-Web-Services-Anwendung
Webanwendung wird angezeigt.
5. Geben Sie den Namen einer berühmten Persönlichkeit (z.B. Isaac Asimov) in das Textfeld ein, und klicken Sie auf die
Schaltfläche Dead or Alive?. Ihre Webanwendung fordert die Informationen vom Web-Service DeadOrAliveWS an und zeigt
das Ergebnis als Beschriftung an.
Anmerkung: Wird kein Ergebnis angezeigt, ist der eingegebene Name möglicherweise nicht in der Datenbank enthalten.
Prüfen Sie, ob die Schreibweise korrekt war, oder versuchen Sie es mit einem anderen Namen.
Siehe auch
ASP.NET-Webanwendungen erstellen
Überblick zu den ASP.NET-Web-Services (
see page 106)
ASP.NET-Web-Services-Anwendung "Hello World" erstellen (
see page 222)
Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen (
see page 218)
TDataset
2.6.3 ASP.NET-Web-Services-Anwendung "Hello World"
erstellen
Wenn Sie eine Anwendung mit ASP.NET-Web-Services erstellen, können Sie über eine Internet-Verbindung der
Client-Anwendung eine bestimmte Funktionalität bereitstellen. Die folgenden Schritte zeigen, wie eine einfache "Hello
World"-Anwendung mit ASP.NET-Web-Services erstellt wird. Nach dem Build stellt die Anwendung alle in ihr definierten Objekte
und Methoden über eine Webmethode zur Verfügung, die Sie definieren und auf die Sie über einen Web-Browser zugreifen.
So erzeugen Sie eine einfache ASP.NET- Web-Services-Anwendung namens "Hello World":
1. Erstellen Sie eine ASP.NET-Web-Services-Anwendung.
2. Erzeugen Sie eine Webmethode.
3. Testen Sie die ASP.NET-Web-Services-Anwendung, und führen Sie sie aus.
Anmerkung: Gegenwärtig können in RAD Studio nur mit dem Codebehind-Verfahren Web-Services erstellt werden. Sie
können nicht mit Inlinecode arbeiten, d.h. Sie können in die Datei <ServiceName>.asmx
keinen Quelltext für den Web-Service einfügen. Gegenwärtig wird die Inline-Methode zur Erstellung von Web-Services von
RAD Studio nicht unterstützt.
So erstellen Sie eine ASP.NET-Web-Services-Anwendung:
2
1. Wählen Sie Datei Neu Weitere. Das Dialogfeld Objektgalerie wird geöffnet.
2. Wählen Sie den Ordner ASP-Projekte für die von Ihnen verwendete Sprache.
3. Wählen Sie ASP.NET-Web-Service-Anwendung. Das Dialogfeld Anwendungsname wird geöffnet.
4. Geben Sie den Namen und die Verzeichnisposition der Anwendung in die Felder ein, und übernehmen Sie alle anderen
Voreinstellungen.
Anmerkung: Wenn Sie mit dem Cassini-Webserver arbeiten, müssen Sie die Angaben für Speicherort und Server ändern.
Außerdem müssen Sie den Cassini-Webserver entsprechend konfigurieren, bevor Sie diese Anwendung ausführen. Wählen
Sie Tools->Optionen
, und markieren Sie ASP.NET-Optionen, um den Pfad und den Port für den Cassini-Webserver einzustellen.
5. Klicken Sie auf OK. Die Dateien WebService1.asmx und WebService1.asmx.<Dateityp> werden automatisch erstellt.
217
Web-Services-Client-Anwendung von
RAD Studio für .NET
2.6 Web-Services-Anleitungen
So erstellen Sie eine Webmethode:
1. Aktivieren Sie die Registerkarte WebService.pas oder WebService.asmx.cs am unteren Rand des Quelltext-Editors. Falls
Sie der Web-Services-Anwendung einen anderen Namen als den vorgegebenen zugewiesen haben, dann wird dieser Name
auf der Registerkarte angezeigt. Der Code für die "Hello World"-Anwendung ist bereits in der Webmethode enthalten, die
während der Erstellung der Web-Services-Anwendung automatisch erzeugt wurde.
2. Kommentieren Sie die Beispiel-Webmethoden aus, die in der Codebehind-Datei enthalten sind. Bei Delphi für
.NET-Anwendungen müssen zwei "Hello World"-Webmethoden auskommentiert werden: eine im Interface-Modul und eine im
Implementation-Modul.
3. Wählen Sie Projekt <Projektname> erzeugen, um das Projekt zu compilieren.
4. Führen Sie das Projekt aus. Durch diesen Schritt wird der Browser mit dem Web-Service aufgerufen. Auf den angezeigten
Seiten ist auch der SOAP- und HTTP-Code enthalten, den Sie zum Zugriff auf die Webmethoden verwenden können. Sie
können diese Beispiele ausführen und beobachten, wie die Ergebnisse an eine XML-Ausgabedatei übertragen werden.
So testen Sie den XML-Web-Service und führen ihn manuell aus:
1. Geben Sie in einem Web-Browser die Speicherposition der Datei WebService1.asmx im localhost ein:
http://localhost/WebService1/WebService1.asmx
Auf den angezeigten Seiten ist auch der SOAP- und HTTP-Code enthalten, den Sie zum Zugriff auf die Webmethoden
verwenden können. Sie können diese Beispiele ausführen und beobachten, wie die Ergebnisse an eine XML-Ausgabedatei
übertragen werden.
Anmerkung: Möglicherweise müssen Sie eine etwas andere Syntax als in diesem Schritt angegeben verwenden. Bei manchen
Windows XP-Rechnern muss beispielsweise für localhost der Computername angegeben werden. Wenn der Rechner z.B. den
Computernamen MeinRechner hat, lautet die Syntax wie folgt: http://MeinRechner/WebService1/WebService1.asmx.
2. Testen Sie die beiden Methoden in einem Webbrowser.
Siehe auch
Überblick zu den ASP.NET-Web-Services (
ASP.NET-Web-Services-Support (
see page 106)
see page 110)
Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen (
see page 218)
2.6.4 Web-Services-Client-Anwendung von Delphi für Win32
nach Delphi für .NET portieren
2
Im Folgenden werden die Schritte beschrieben, die zum Portieren einer
Web-Services-Client-Anwendung nach Delphi für .NET ausgeführt werden müssen.
mit
Delphi
So portieren Sie einen Web-Service:
1. Ändern Sie die vorhandenen RIO-Formularkomponenten.
2. Ändern Sie die uses-Klausel.
3. Fügen Sie eine Webreferenz hinzu.
4. Ändern Sie den Quelltext, mit dem der Web-Service aufgerufen wird.
So ändern Sie vorhandene Formularkomponenten:
1. Kopieren Sie den Webreferenz-URL aus der vorhandenen RIO-Komponente, und speichern Sie ihn.
218
für
Win32
erstellten
2.6 Web-Services-Anleitungen
RAD Studio für .NET
Web-Services-Client-Anwendung von
2. Löschen Sie die HTTPRio-Komponente aus dem Formular, sofern sie nicht zur Laufzeit erstellt wird.
So ändern Sie die uses-Klausel:
1. Löschen Sie alle Delphi für Win32-SOAP-Units aus der Klausel. Hierzu gehören InvokeRegistry, RIO und SOAPHTTPClient
und möglicherweise noch andere Units.
Warnung: Die vorstehende Unit-Liste ist nicht vollständig. Stellen Sie sicher, dass Sie alle SOAP-Units identifizieren,
gleichgültig, welche Namenskonvention verwendet wurde. Sie werden feststellen, dass nicht alle Units das Wort SOAP im
Namen enthalten.
2. Entfernen Sie den Verweis auf die von der Delphi für Win32-Importfunktion für WSDL-Dateien erzeugte Interface-Proxy-Unit.
3. Entfernen Sie die Proxy-Unit aus dem Projekt.
So fügen Sie eine Webreferenz hinzu:
1. Öffnen Sie ein Delphi für Win32-Projekt in RAD Studio, und wählen Sie Projekt Webreferenz hinzufügen. Sobald Sie das
Projekt gespeichert haben, wird der UDDI-Browser angezeigt.
2. Geben Sie in das Listenfeld am oberen Rand des Browsers den zu verwendenden URL ein, wobei es sich um einen Ihnen
bekannten Dienst oder um den URL handeln kann, den Sie aus der RIO-Komponente kopiert und gespeichert haben.
Anmerkung: Wenn Sie die WSDL-Datei auf der lokalen Festplatte Ihres Rechners suchen möchten, klicken Sie auf die
Ellipsen-Schaltfläche neben dem Listenfeld und suchen nach dem Dokument. Sie können auch eine der im UDDI-Browser
aufgeführten Web-Service-Sites auswählen, wenn Sie einen veröffentlichten Service benutzen möchten.
3. Klicken Sie auf die Schaltfläche Referenz hinzufügen, um das WSDL-Dokument dem Projekt hinzuzufügen. RAD Studio
erstellt anhand des WSDL-Dokuments die erforderliche Webreferenz und die zugehörige Proxy-Unit. In der
Projektverwaltung wird ein neuer Knoten namens Web References angezeigt. Erweitern Sie den Knoten, damit die
zugehörigen WSDL- und die Proxy-Quelltextdateien angezeigt werden.
4. Wählen Sie Datei Unit verwenden.
So ändern Sie den Quelltext, mit dem der Web-Service aufgerufen wird:
1. Machen Sie in der Quelltextdatei Ihrer Anwendung den Code ausfindig, mit dem der Web-Service aufgerufen wird.
Angenommen, dieser Quelltext sieht folgendermaßen aus:
procedure TForm1.Button1Click(Sender: TObject);
var
HelloService: Service3Soap;
begin
// Die nächste Zeile sieht etwas anders aus, wenn
// Sie eine Komponente verwendet haben oder die Methode zur Laufzeit erstellt wird.
// Wenn Sie eine Komponente verwendet haben, sieht der Code so aus.
HelloService := (HTTPRIO1 as Service3Soap);
2
// So sieht der Code für eine zur Laufzeit erzeugte Methode aus.
// GetService3Soap ist die globale Methode der Proxy-Unit.
HelloService := GetService3Soap;
Caption := HelloService.HelloWorld;
end;
2. Ändern Sie den var-Abschnitt von seiner ursprünglichen Form:
var
// Typ des alten Proxy-Interface.
HelloService: Service3Soap;
in
219
Web-Services-Client-Anwendung von
RAD Studio für .NET
2.6 Web-Services-Anleitungen
var
// Typ der neuen Proxy-Klasse.
HelloService: Service3;
Hier wird vorausgesetzt, dass Ihr Web-Service Service3 heißt. Ändern Sie den Namen entsprechend.
Anmerkung: Sie werden feststellen, dass jetzt das als Klasse erstellt wird, was zuvor ein Interface war. Das .NET Framework
stellt eine automatische Garbage Collection zur Verfügung, sodass bestimmte Beschränkungen, die in früheren
Delphi-Versionen für die Verwendung von Klassen galten, möglicherweise beim Einsatz von RAD Studio nicht mehr gelten.
3. Ändern Sie die erste Zeile im Prozedurblock von seiner ursprünglichen Form:
HelloService := (HTTPRIO1 as Service3Soap);
in:
HelloService := Service3.Create;
Der aktualisierte Quelltext sollte wie folgt aussehen:
procedure TForm1.Button1Click(Sender: TObject);
var
HelloService: Service3;
begin
HelloService := Service3.Create;
Caption := HelloService.HelloWorld;
end;
Ihr Code ist wahrscheinlich etwas komplizierter als dieses Beispiel. Diese Anleitung beschreibt jedoch die grundlegenden
Schritte, mit denen sich jede Delphi für Win32-Anwendung, die Web-Services nutzt, nach RAD Studio portieren lässt.
Siehe auch
Web-Services nach Delphi für .NET portieren (
Überblick zu Web-Services (
2
220
see page 106)
see page 80)
3
RAD Studio für .NET
Index
hinzufügen 204
Aktenkoffermodell-Anwendung
AutoUpdateCache (Eigenschaft) 198
.
.NET-Datentypen
ADO.NET 12
.NET-Steuerelemente
VCL und .NET-Steuerelemente 180
Aktenkoffermodell-Anwendung mit DB Web Controls erstellen
198
Aktionen in einer VCL-Formularanwendung erstellen 163
Ä
.NET-Steuerelemente in VCL.NET importieren 180
Änderungen aufgrund der Unterstützung von 64-Bit .NET 2.0 63
A
A
Abgerundete Rechtecke in einer VCL-Formularanwendung
zeichnen 177
Anleitung zum Hinzufügen eines Dialogfelds zur
Fehlerbehebung zu einer BDP-Anwendung. 116
ADO.NET
Anleitungen 113
Anweisungstext-Editor 137, 138
Anleitungen für die Modellierung 152
Architektur 15
Anweisungstext-Editor verwenden 137
ASP.NET 85
Anwendung mit DB Web Controls erstellen 199
Datenadapter-Vorschau 136
Anwendungen mit nicht verwaltetem Code entwickeln 41
Datenbankanwendungen 161
Anwendungen mit VCL.NET-Komponenten entwickeln 62
Namespace 15
Anwendungen mit XML-Komponenten erstellen 169
Überblick 15, 77
ASP.NET
Übersicht 63
Architektur 85
Verbindungskomponenten 161
DB Web Controls 199
ADO.NET-Anwendungen 187
ADO.NET-Datenbankanwendungen mit VCL.NET-Formularen
erstellen 161
ADO.NET-Komponentendesigner 23
AdoDbx
BDP-Migration 18
AdoDbx.NET
Übersicht 85
ASP.NET – Anleitungen 182
ASP.NET installieren
erneut installieren 209
ASP.NET User Control
ASP.NET 216
ASP.NET ASP.NET User Control 216
Datenprovider 28
ASP.NET User Controls verwenden 216
Datentypen 12
ASP.NET-Anwendung 186, 189, 191, 192, 193, 194
AdoDbx.NET-Datentypen 12
ASP.NET-Anwendung "Hello World" erstellen 193
AdoDbx.NET-Komponenten
ASP.NET-Anwendung mit Datenbanksteuerelementen
entwickeln, Teil 1 189
ADO 28
AdoDbx-Client
Überblick 6
AdoDbx-Client-Verbindung
herstellen 119
Aggregatwerte mit der DBWebAggregateControl-Komponente
ASP.NET-Anwendung mit Datenbanksteuerelementen
entwickeln, Teil 2 191
ASP.NET-Anwendung mit Datenbanksteuerelementen
entwickeln, Teil 3 192
ASP.NET-Anwendungen debuggen und aktualisieren 205
ASP.NET-Anwendungen erstellen 186
a
RAD Studio für .NET
ASP.NET-Benutzerkonto
Bitmaps
Sicherheitslücken 209
ASP.NET-Datenbankanwendung erstellen 187
Kombinationsfeld 178
Blackfish SQL - Überblick 21
ASP.NET-Fehler
HTTP-Meldungen 207
ASP.NET-Lebenszyklus
C
Callback-Funktionen
ASP.NET-Verarbeitung 93
Funktionen 48
ASP.NET-Projekt 186, 193
ClearSessionChanges (Methode) 101
ASP.NET-Seite 186, 193
Client-Datenmenge
ASP.NET-Web-Services-Anwendung "Hello World" erstellen 222
TClientDataSet 167
ASP.NET-Web-Services-Support 110
Codebehind-Logik 186, 193
Auf die ASP.NET-Web-Services-Anwendung "Hello World"
zugreifen 218
Code-Visualisierung 58, 152, 154, 155
Diagramme exportieren 152
Auflösung
mehrere Tabellen 132
Ausführen von Änderungen, die wegen der Unterstützung von
64-Bit .NET 2.0 erforderlich sind 171
Code-Visualisierung - Überblick 58
Code-Visualisierungsdiagramme als Grafik exportieren 152
COM Interop 41, 150
Interop-Assemblierungen in der IDE 41
AutoUpdateCache
SDK-Tools 41
UseUniqueFileName 198
Terminologie 41
B
COM Interop in verwalteten Anwendungen 41
BDE.NET
COM-Interfaces
Interfaces 48
Datenbanken 7
BDP-Migration 18
BDP-Migration: Überblick 18
D
Beispiele
DataHub (Komponente)
ASP.NET-Anwendung "Hello World" 193
Benutzerauthentifizierung
UseUniqueFileName 208
Benutzeroberflächen
ADO.NET 15
konfigurieren 132
DataSet
Tabellenzuordnungen 120
DataSnap .NET-Client
Datenbanken 7
Berechtigungen für die Nutzung von XML-Dateien festlegen 208 DataSync (Komponente)
Berichte für .NET-Anwendungen entwickeln 60
Bindung
Komponenten 211
Bitmap-Grafik in ein Steuerelement einer
VCL-Formularanwendung einfügen 178
Bitmap-Grafik in einer VCL-Formularanwendung anzeigen 175
Bitmap-Grafiken 178
Bitmap-Grafiken anzeigen 175
b
konfigurieren 132
DataView-Einschränkungen
Datensätze einfügen 101
DataView-Objekte
Laufzeiteigenschaften 101
Daten
migrieren 124
Remoting-Komponenten 147
3
3
RAD Studio für .NET
Daten zwischen Datenbanken migrieren 124
Datenadapter-Vorschau verwenden 136
Datenbank
Datenadapter-Vorschau verwenden 136
Datenprovider
Architektur 28
Datenprovider für .NET (AdoDbx)
ADO.NET 28
Datenmengen-Designer verwenden 143
Datenprovider für Microsoft .NET 28
Fehlerbehebung hinzufügen 116
Datentypen
neue Verbindung hinzufügen 116
Projekte erstellen 132
Datenbank durchsuchen 118
Datenbank im Daten-Explorer durchsuchen 118
ADO.NET 28
DB Web Control-Experte
benutzerdefinierte Controls 93
DB Web Controls
Datenbankanleitungen 114
Architektur 88
Datenbankanwendungen mit ADO.NET entwickeln 3
ASP.NET 88
Datenbanken
Bibliothek 211
Anweisungstext-Editor 137
erweitern 93
DataAdapter-Designer 138
konfigurieren 199
DataSet-Designer 140
Namespace 88
dbExpress 32, 34
Projekte vorbereiten 199
dbExpress für .NET 10
WebDataLink-Interfaces 103
dbGo für .NET 11
DB Web Controls in Haupt-/Detail-Anwendungen verwenden 90
neue Verbindung hinzufügen 139
DB Web-Interfaces 93
Objekte suchen 118
DB2
Projekte erstellen 120, 147
AdoDbx.NET 12
SQL ausführen 122
dbExpress Framework-Kompatibilität 34
Verbindungen 126
dbExpress.NET
Verbindungen bearbeiten 125
Datenbankkomponenten
konfigurieren 120
Datenbank-Projekte mit dem Daten-Explorer erstellen 120
Datenbankverbindungen bearbeiten 126
Datenbindung
DB Web Control 93
Daten-Explorer
Definition 23
ISQLDataSource 23
SQL ausführen 122
Verbindungen bearbeiten 125
Datengitter verbinden 161
Datenmenge
XML-Dateien 203
Datenbanken 7
dbExpress.NET-Datenbankanwendungen mit VCL-Formularen
erstellen 167
dbExpress-Framework 32
dbGo
Datenbanken 7
DBWebAggregateControl
Aggregatwerte 204
DBWebDataSource
konfigurieren 199
Delphi für .NET
Web Forms 85
Den ASP.NET-Deploymentmanager verwenden 212
Den DB Web Control-Experten verwenden 211
Deployment
ASP.NET-Deploymentmanager 206, 212
c
RAD Studio für .NET
BDE-Anwendungen für .NET 27
BDP.NET-Anwendungen 27
COM Interop-Anwendungen 47
Datenbankanwendungen 27
H
Haupt
Detail-Beziehungen/DataView-Objekte 101
DB Web Controls 88
dbExpress-Anwendungen für .NET 27
Herstellen einer Verbindung zu einer Datenbank mit dem
dbExpress Treiber-Framework 145
dbGo-Anwendungen für .NET 27
Hinzufügen einer J2EE-Referenz 150
Deployment einer ASP.NET-Anwendung mit Blackfish SQL an
ein System ohne RAD Studio 206
Deployment von ASP.NET-Anwendungen 102
HTML-Elemente in Server Controls konvertieren 200
HTML-Tag-Editor
HTML-Tags bearbeiten 215
Deployment von COM Interop-Anwendungen 47
Deployment von Datenbankanwendungen für das .NET
Framework 27
Designer für Datenadapter verwenden 138
HTTP
Meldungen 209
HTTP-Meldungen
Fehler 207
DrInterop verwenden 46
HTTP-Meldungen in ASP.NET erzeugen 207
E
ECO-Framework 153
Eine Datenbankanwendung für die Auflösung in mehrere
Tabellen erstellen 132
Eine neue VCL.NET-Komponente erstellen 174
I
IBX.NET
InterBase 7
IDBWebColumnLink
Eine verteilte Datenbankanwendung erstellen 147
IDBWebDataLink 103
Einführung in InterBase Express 35
Ereignisbehandlungsroutinen
OnPaint 176, 177
IDBWebLookupColumnLink 103
IDBWebDataLink 103
IIS
erstellen
Anwendungen mit XML-Komponenten 169
Fehlerbehebung 209
VCL-Formularanwendung "Hello World" 165
Importieren und Exportieren eines Modells mit XMI Metadata
Interchange (XMI) 153
VCL-Formularmenüs 166
Interbase
Verbindungen 126
Erstellen einer ASP.NET Sitemap 194
InterBase
F
ADO.NET 12
Komponenten 35
Fehler in Tabellenzuordnungen behandeln 123
Fehlerbehebung in ASP.NET-Anwendungen 209
Interfaces
AdoDbx.NET 28
G
Interfaces für virtuelle Bibliotheken 56
Interoperative Anwendungen – Anleitungen 150
Gerade Linien in einer VCL-Formularanwendung zeichnen 177
K
Kombinationsfeldereignisse
d
3
3
RAD Studio für .NET
OnDrawItem 178
migrieren
Komponenten
datensensitive 88
Tabellen 124
MissingMappingAction (Eigenschaft)
importieren 77
Verbindung 88
Fehler 123
MissingSchemaAction (Eigenschaft)
Komponentendesigner
Fehler 123
Anweisungstext-Editor 23
Mit DataView-Objekten arbeiten 101
Beziehungen 23
Mit dem Aktionsmanager Aktionen in einer
VCL-Formularanwendung erstellen 166
Datenadapter konfigurieren 23
Datenmenge 23
Stored Procedures (Dialogfeld) 23
Verbindungseditor 23
Mit dem HTML-Tag-Editor arbeiten 215
Modellierung 58
MS SQL
ADO.NET 12
konfigurieren
Datenkomponenten 187
IIS 161, 186
N
Verbindungskomponenten 187
Neue Funktionen der Programmiersprache 75
Web-Server 187, 193
Neue Verbindung in Daten-Explorer einfügen 116
Konstruktoren
Nicht verwaltete Funktionen
Win32 API 48
Destruktoren 64
Konzepte 1
Nullwerte in Aggregaten
Caption (Eigenschaft) 204
L
Logische Datentypen
AdoDbx.NET 12
O
Objektreferenzen
Referenzen übergeben 48
M
Oracle
ADO.NET 12
Mehrstufige Aktualisierungen
Datenbanken 90
Mehrstufige Löschvorgänge
Datenbanken 90
Menüs
P
Parameter
Datenbanken 134
Aktionen 163
Parameterübergabe in einer Datenbankanwendung 134
Beispielanwendung 163
Pascal
Standardaktionen 163
VCL-Formulare 163
Metadaten
Änderungen der Programmiersprache 75
PInvoke
Platform Invoke 48
XML-Schemadateien 203
Platform Invoke mit Delphi für .NET verwenden 48
Zuordnung zu Datenmengen 203
Polygone
Metadaten für eine Datenmenge erstellen 203
zeichnen 177
e
RAD Studio für .NET
Portieren
Tabellenzuordnungen
VCL.NET portieren 77
Fehler 123
Portieren von VCL-Anwendungen nach RAD Studio 64
konfigurieren 120
Property Builder
Löschen 120
DB Web Controls 207
Protokoll-Stack von Web-Services 108
Tabellenzuordnungen erstellen 120
Tag-Editor 215
TDataSetProvider
R
dbExpress-Provider 167
Rave Reports 60
TDataSource
dbExpress-Datenquelle 167
neue Berichte erstellen 60
Rave Reports in RAD Studio verwenden 60
TDBGrid
dbExpress-Verbindung 167
Rechtecke und Ellipsen in einer VCL-Formularanwendung
zeichnen 176
Text löschen 166
Referenzen zu einem COM-Server hinzufügen 150
Typisierte Datenmengen verwenden 143
Render (Methode)
Typumwandlungen
Seite aufbauen 93
Cracker 64
Ressourcen
Migration 64
Ü
Überblick über AdoDbx Client 6
S
Überblick zu ADO.NET 15
senden
Befehle 187
ServerSupport
ASP.NET 85
Überblick zu ASP.NET 85
Überblick zu CodeGear DB Web Controls 88
Überblick zu dbExpress-Komponenten 10
Überblick zu dbGo-Komponenten 11
Spalten in DBWebGrid-Objekten binden 207
Überblick zu den ASP.NET-Web-Services 106
SQL im Daten-Explorer ausführen 122
Überblick zu Stored Procedures 31
Standarddatenmengen verwenden 140
Überblick zu VCL für .NET 77
Stored Procedures
Überblick zum BDP-Verbindungs-Pooling 9
Überblick 31
String
Überblick zum DB Web Control-Experten 93
Überblick zur Navigations-API der DB Web Controls 92
char 64
Strukturen
Zeiger 48
Sybase
ADO.NET 12
unidirektionale Datenmengen
TSQLDataSet 167
Unidirektionale Datenmengen
dbExpress-Komponenten 167
T
untergeordnete Knoten anzeigen 169
Tabellen
Zuordnungen 120
f
U
3
3
RAD Studio für .NET
DataBind 187
DataGrid 187
V
Datenquelle 187
Varianten
Verbindungen
TVarRec 64
Datenbankverbindungen 126
VCL
MS Access-Verbindung 126
portieren 75
MS SQL Server-Verbindung 126
VCL für .NET
Grafiken 175
VCL für .NET – Anleitungen 157
VCL für .NET-Datenbanktechnologien 7
VCL und .NET-Steuerelemente
.NET-Steuerelement-Package 180
VCL.NET
Sybase-Verbindung 126
Verbindungen im Daten-Explorer bearbeiten 125
Verbindungseditor verwenden 139
Verwenden des Modellansichtfensters und des
Code-Visualisierungsdiagramms 154
Verwenden des Übersichtsfensters 155
Virtuelle Verzeichnisse erstellen 204
Architektur 77
Virtuelles Verzeichnis, erstellen in der IDE 204
Namespace 77
Vorfahr
portieren 64
Basis 174
VCL.NET-Komponenten
VCL.NET 77
VCL-Anwendungen
Client-Datenmengen 161
DataSet-Provider 161
Datenquellen 161
dbExpress-Datenbankanwendungen 167
Ereignisse 163
Formulare 163
Grafiken 161
Windows Forms-Projekt 163
VCL-Anwendungen portieren 75
VCL-Formularanwendung "Hello World" erstellen 165
VCL-Formularanwendung erstellen 163
VCL-Formularanwendungen mit Grafiken erstellen 161
VCL-Formulare
Beispielanwendung ausführen 165
Bitmap-Grafiken 178
Menüs 163
neue erstellen 165
Schaltflächen- und Ereignisquelltext hinzufügen 165
Verbinden mit AdoDbx Client 119
W
Webanwendungen mit ASP.NET entwickeln 83
WebDataLink-Interfaces verwenden 103
Webreferenzen 220
Webreferenzen in ASP.NET-Projekte einfügen 220
Web-Service-Clients
portieren 75
Web-Service-Clients portieren 80
Web-Services
Anwendung erstellen 222
Anwendungen portieren 80
Architektur 106
ASP.NET 85, 106
Client 218
Client-Anwendung erstellen 218
Client-Support 110
Dateien 106
finden 108
Namespaces 110
portieren 80, 223
Protokoll 108
Verbindung einrichten
g
RAD Studio für .NET
Server-Support 110
Service-Beschreibung 108
Service-Transport 108
Szenarien 106
UDDI-Browser 220
Voraussetzungen 106
Webreferenzen 220
Web-Services-Anwendung zugreifen auf 218
Web-Services-Formulare portieren 80
Win32 zu .NET portieren 223
XML-Messaging 108
Zugriff 220
Web-Services mit ASP.NET entwickeln 105
Web-Services-Anleitungen 218
Web-Services-Client-Anwendung von Delphi für Win32 nach
Delphi für .NET portieren 223
Win32 API
nicht verwalteter Code 64
WinForms Control-Importexperte
.NET-Steuerelemente in VCL 180
X
XML
DB Web Controls 201
XML-Authentifizierung
XML-Zwischenspeicherung 99
XML-Datei für DB Web Controls erstellen 201
XML-Datei-Berechtigungen
Berechtigungen 208
XML-Dateien
DB Web-Datenquellen 99
DBWeb-XML-Dateien 201
Vorteile 99
XML-Dateien und DB Web Controls verwenden 99
Z
zeichnen
gerade Linien 177
Rechtecke und Ellipsen 176
h
Zeigertypen
portieren 64
3
Herunterladen