RAD Studio für - Embarcadero...

234
RAD Studio für .NET Copyright© 2008 CodeGear™. Alle Rechte vorbehalten.

Transcript of RAD Studio für - Embarcadero...

RAD Studio für .NET

Copyright© 2008 CodeGear™. Alle Rechte vorbehalten.

Inhalt

Konzepte 1Datenbankanwendungen mit ADO.NET entwickeln 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 58

Code-Visualisierung - Überblick 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

RAD Studio für .NET

iii

Webanwendungen mit ASP.NET entwickeln 83

Ü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 113Datenbankanleitungen 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

iv

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

RAD Studio für .NET

v

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 218

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 a

RAD Studio für .NET

vi

1 Konzepte

Themen

Name Beschreibung

Datenbankanwendungen mit ADO.NET entwickeln ( see page 3) 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)

Anwendungen mit nicht verwaltetem Code entwickeln ( see page 41) 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.

Modellierung ( see page 58)

Berichte für .NET-Anwendungen entwickeln ( see page 60) 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.

Anwendungen mit VCL.NET-Komponenten entwickeln ( see page 62) 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)

Webanwendungen mit ASP.NET entwickeln ( see page 83) 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

1

1

Web-Services mit ASP.NET entwickeln ( see page 105) 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.

RAD Studio für .NET 1

2

1

1.1 Datenbankanwendungen mit ADO.NET entwickeln

ADO.NET ist ein kohärentes Programmiermodell, das den Datenzugriff innerhalb des .NET Framework bereitstellt. Neben derUnterstützung für MS SQL, Oracle und OLE DB-Verbindungskomponenten, die bereits im .NET Framework verankert ist, enthältRAD Studio Datenprovider für .NET (AdoDbxClient-Provider). AdoDbx ermöglicht einen Zugriff auf MS SQL, Oracle, DB2 undInterbase. Mit den AdoDbx-Komponentendesignern wird die Generierung und Konfiguration von AdoDbx-Komponentenvereinfacht.

Sie können problemlos neue VCL-Formularanwendungen für das .NET Framework erstellen oder vorhandeneWin32-VCL-Formularanwendungen zum .NET Framework migrieren, da die konventionellen Delphi-Datenbanktechnologien wiedbExpress 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 Beschreibung

Überblick über AdoDbx Client ( 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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET

3

1

AdoDbx.NET-Datentypen ( see page 12) 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) 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-Migration: Überblick ( see page 18) 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)

RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

4

1

Blackfish SQL - Überblick ( 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

• 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 ( see page 21)

ADO.NET-Komponentendesigner ( see page 23) 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)

Deployment von Datenbankanwendungen für das .NET Framework ( see page 27)

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.

Datenprovider für Microsoft .NET ( see page 28) 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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET

5

1

Überblick zu Stored Procedures ( see page 31) 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)

dbExpress-Framework ( see page 32) 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)

dbExpress Framework-Kompatibilität ( see page 34) 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.

Einführung in InterBase Express ( see page 35) 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ütztdie neueren erweiterten Metadaten von dbExpress 4. Alle mit Delphi ausgelieferten dbExpress-Treiber implementieren dieneueren 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 undAnwendungsdaten. Sie können mit ADO.NET Frontend-Datenbankanwendungen genauso wie mehrschichtigeGeschä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.

Überblick über AdoDbx Client RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

6

1

• 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

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 zurDatenbank zu implementieren. Zur Erstellung neuer VCL-Formulare-Anwendungen für das .NET Framework oder zum Migrierenvorhandener Win32-VCL-Formulare-Anwendungen in das .NET Framework unterstützt RAD Studio aber weiterhin dieDatenbanktechnologien von Delphi.

RAD Studio ermöglicht die Migration von Delphi-Datenbanktechnologien für Win32-Clients auf das .NET Framework. Sie könnenalso nicht nur neue Datenbankanwendungen mit ADO.NET erstellen, sondern auch vorhandene migrieren. RAD Studiounterstü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 vondbExpress für Win32, wurde aber für die Ausführung in VCL-Formulare im .NET Framework aktualisiert. Wie die früherenVersionen des Produkts unterstützt auch dbExpress für .NET unidirektionale Datenmengen und die Erstellung kompakterClient-Anwendungen.

.NET-Anwendungen mit dem DataSnap .NET-Client (DCOM) erstellen

In dreischichtigen Anwendungen unterstützt RAD Studio den Datenbankzugriff über den DataSnap-Client (DCOM).

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET VCL für .NET-Datenbanktechnologien

7

1

.NET-Anwendungen mit IBX.NET erstellen

RAD Studio ermöglicht den Zugriff auf InterBase-Datenbanken über InterBase Express-Steuerelemente. Außerdem kann überden BDP.NET-Standarddatenadapter und die ADO.NET-Provider des .NET Framework auf diesen Datenbanktyp zugegriffenwerden. Mit Hilfe von IBX.NET-Steuerelementen können Sie eine Verbindung zu einer InterBase-Datenbank aufbauen und aufTabellen zugreifen usw.

NET-Anwendungen mit dem AdoDbxClient-Provider erstellen

AdoDbx ist Datenzugriffsmechanismus, der von mehreren Anwendungen gemeinsam genutzt werden kann. AdoDbx definierteine leistungsfähige Bibliothek von API-Aufrufen, mit denen Daten erstellt, neu strukturiert, von lokalen und externenDatenbankservern abgerufen, aktualisiert und auf andere Weise bearbeitet werden können. Ado stellt eine einheitlicheSchnittstelle für den Zugriff auf eine Vielzahl von Datenbankservern zur Verfügung.

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 dbGofür Win32, wurde aber für die Ausführung in VCL-Formulare im .NET Framework aktualisiert. dbGo für .NET unterstützt dasselbeleistungsstarke und logische Objektmodell wie die früheren Versionen des Produkts.

Themen

Name Beschreibung

Überblick zum BDP-Verbindungs-Pooling ( 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:

VCL für .NET-Datenbanktechnologien RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

8

1

Überblick zu dbExpress-Komponenten ( see page 10) 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)

Überblick zu dbGo-Komponenten ( see page 11) 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. BeiVerwendung von BDP werden alle Verbindungen vom BDP-Pool-Manager verwaltet. Dies ist auch dann der Fall, wenn Sie dasPooling für Ihre Verbindung nicht aktiviert haben. Sie können für jede Verbindung das Pooling aktivieren oder deaktivieren, dieminimale und maximale Pool-Größe festlegen, die Vergrößerung des Pools bei Verbindungsanforderungen aktivieren unddeaktivieren 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. Diefolgenden 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. DieVorgabewert ist 100. Wenn GrowOnDemand auf False gesetzt und MaxPoolSize erreicht ist, führt jedeweitere Verbindungsanforderung zu einer Exception.

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET VCL für .NET-Datenbanktechnologien

9

1

GrowOnDemand Legt fest, ob der Pool vergrößert wird, wenn MaxPoolSize erreicht ist und eine weitereVerbindungsanforderung eingeht.

Verbindungen, für die GrowOnDemand auf True gesetzt ist, werden dem Pool nicht wieder zugeführt,sondern von BdpConnection.Close() freigegeben.

ConnectionLifetime(Timeout)

Die Lebensdauer einer Verbindung, für die das Pooling aktiviert ist. Wenn eine Verbindung wieder demPool zugeführt wird, erfolgt eine Überprüfung der Lebensdauer. Ist diese abgelaufen, wird dieVerbindung nicht wieder in den Pool aufgenommen, sondern freigegeben. ConnectionLifetime wird inSekunden angegeben. Voreingestellt ist der Wert 0.

1.1.2.2 Überblick zu dbExpress-Komponenten dbExpress setzt sich aus mehreren "schlanken" Datenbanktreibern zusammen, die schnellen Zugriff auf SQL-Datenbankserverbieten. dbExpress stellt für jede unterstützte Datenbank einen Treiber zur Verfügung, der die serverspezifische Software an eineMenge einheitlicher dbExpress-Interfaces anpasst. Wenn Sie eine Datenbankanwendung weitergeben, die dbExpressverwendet, müssen Sie evtl. eine DLL (den serverspezifischen Treiber) in die von Ihnen erstellten Anwendungsdateienaufnehmen. 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 einminimaler Zusatzaufwand entsteht. Wie andere Datenmengen können sie einen SQL-Befehl an den Datenbankserver sendenund, 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 keineZwischenspeicherung der Daten vor, wodurch sie schneller und weniger ressourcenaufwendig als andere Datenmengentypenwerden. Weil sie jedoch die Datensätze nicht zwischenspeichern, sind unidirektionale Datenmengen weniger flexibel als andereDatenmengen.

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. Verbindungsstringsermö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 rechtenMaustaste auf die Verbindung klicken und den entsprechenden Menübefehl wählen. Dadurch wird ein Parametereintraggeneriert (Parameters['ConnectionString']), der alle Verbindungseigenschaften in der INI-Datei enthält. Sie können auf dieseWeise 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 enthält die folgenden Komponenten, die mittels dbExpress aufDatenbankinformationen zugreifen:

Komponente Funktion

TSQLConnection Diese Komponente kapselt eine dbExpress-Verbindung zu einem Datenbankserver.

VCL für .NET-Datenbanktechnologien RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

10

1

TSQLDataSet Diese Komponente wird verwendet, um alle über dbExpress verfügbaren Daten darzustellen oder umBefehle 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 esAnwendungen 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 einemDatenbankserver definierte Stored Procedure ausführt.

TSQLMonitor Diese Komponente fängt die zwischen einer SQL-Verbindungskomponente und einem Datenbankservergesendeten Informationen ab und speichert diese in einer Stringliste.

TSimpleDataSet Hierbei handelt es sich um eine Client-Datenmenge, die interne Objekte des Typs TSQLDataSet undTDataSetProvider 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 MicrosoftADO-Schnittstellen abgerufen, bearbeitet und aktualisiert werden können. Meist wird dbGo eingesetzt, um Abfragen für Tabelleneiner relationalen Datenbank zu stellen, die Ergebnisse abzurufen und in einer Anwendung anzuzeigen und Benutzern dieMö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 (beiSQL-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 vollfunktionsfähig ist. Microsoft Data Access Components (MDAC) 2.1 und höher enthält diese erforderlichen Elemente. RAD Studiounterstützt MDAC 2.8.

Der dbGo-Abschnitt der Tool-Palette enthält die folgenden Komponenten, die über dbGo auf Datenbankinformationenzugreifen:

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 Befehlean 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 esAnwendungen ermöglicht, auf die resultierenden Datensätze (sofern vorhanden) in einemADO-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 einemDatenbankserver definierte Stored Procedure ausführt.

TADOCommand Diese Komponente repräsentiert ein ADO-Befehlsobjekt, mit dem Anweisungen für einen Datenspeicherausgeführt werden können, auf den über einen ADO-Provider zugegriffen wird.

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET VCL für .NET-Datenbanktechnologien

11

1

TADODataSet 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.3 AdoDbx.NET-Datentypen

AdoDbx Client-Datentypen entsprechen logischen .NET-Typen. Je nach Datenbanktyp bilden die AdoDbx Client-Datentypen dienativen 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-Typenarbeiten, 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 sorgtintern für eine den unterstützten Datenbanken entsprechende Zuordnung der Datentypen. AdoDbx Client unterstützt dieZuordnung logischer Datentypen für DB2, InterBase, MS SQL, MSDE und Oracle.

DB2

AdoDbx Client unterstützt folgende DB2-Typzuordnungen.

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

AdoDbx.NET-Datentypen RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

12

1

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

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[]

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET AdoDbx.NET-Datentypen

13

1

TIMESTAMP VarBytes NV Byte[]

UNIQUEIDENTIFIER Guid NV Guid

Oracle

AdoDbx Client unterstützt die folgenden Oracle-Typzuordnungen.

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.

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[]

AdoDbx.NET-Datentypen RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

14

1

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.4 Überblick zu ADO.NET

ADO.NET ist die .NET-Programmierumgebung für das Erstellen von Datenbankanwendungen, die auf nativenDatenbankformaten 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 .NETFramework 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) mitEigenschaften, Methoden und Ereignissen bereits bekannt sind, werden Sie keine größeren Probleme mit dem ADO.NET-Modellzum Erstellen von Anwendungen haben. Für traditionelle Datenbankentwickler stehen auch in ADO.NET die bekanntenKonzepte von Tabellen, Zeilen und Spalten mit relationaler Navigation bereit. XML-Programmierer werden es vermutlichvorziehen, 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 andereProgrammiermodelle des .NET Framework sowie die Leistungsmerkmale, die RAD Studio für die Unterstützung von ADO.NETbereitstellt.

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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Überblick zu ADO.NET

15

1

repräsentiert die eigentliche Datenbank oder XML-Datei, der Datenprovider stellt die Verbindungen her und übergibt die Befehleund die Datenmenge (Objekt DataSet) stellt eine oder mehrere Datenquellen im Arbeitsspeicher dar. Weitere Informationen überdas 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 dabeimit den komplexen und oft unterschiedlichen Oberflächen einzelner Hersteller umgehen. Mit ADO.NET arbeitet derDatenbankentwickler immer mit demselben Satz von Komponenten, mit dessen Hilfe er auf die Datenquelle zugreift und Befehlean sie übergibt.

Die Datenprovider

Die Datenprovider-Komponenten stellen eine Verbindung zur Datenbank oder den XML-Dateien her und halten dabei einzelneImplementierungsdetails 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 ProduktAdoDbx Client and BDP.NET zur Verfügung. Diese bieten die Möglichkeit, unter Verwendung einer konsistentenProgrammierumgebung Verbindungen zu verschiedenen Standarddatenbanken herzustellen. Weitere Informationen finden Sieim 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 mehrerenDatenquellen, im Arbeitsspeicher. Das DataSet-Objekt ist also eine Art temporärer Arbeitsbereich oder virtueller Notizblock fürdie Bearbeitung von Daten. ADO.NET-Anwendungen manipulieren Datentabellen zunächst im Arbeitsspeicher und nicht in dereigentlichen Datenbank. Das DataSet-Objekt stellt - über direkte Verbindungen zu physischen Datenbanken hinaus - zusätzlicheFlexibilität bereit. Ähnlich wie das von vielen Datenbanksystemen unterstützte Datenmengenobjekt kann auch dasDataSet-Objekt mehrere DataTable-Objekte enthalten, die Tabellen oder Ansichten aus einer beliebigen Zahl von Datenquellenrepräsentieren. Das DataSet-Objekt arbeitet asynchron in einem nicht mit den Datenbanken verbundenen Modus. Erst zu einemspä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 Fallauf 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 derDatenquelle abgerufen werden. Eine typisierte Datenmenge ist von einer DataSet-Klasse abgeleitet. Der Zugriff auf Tabellenund 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 typisierterDatenmengen werden bereits zur Compilierzeit und nicht erst zur Laufzeit auf Typübereinstimmung überprüft. Wenn Sie einetypisierte Datenmenge erstellen, werden einige neue Objekte erzeugt, auf die Sie über die Projektverwaltung zugreifenkönnen. Hierzu gehören zwei Dateien, die entsprechend der Datenmenge benannt sind. Eine dieser Dateien ist eine XML-Dateimit der Erweiterung .xsd, die andere enthält Quelltext in der verwendeten Sprache. Alle Daten der Datenmenge, einschließlichder Tabellen- und Spaltendaten aus der Datenbankverbindung, werden in der .xsd-Datei gespeichert. Die Quelltextdatei wirdbasierend auf den XML-Daten in der .xsd-Datei erzeugt. Sie können die Struktur einer typisierten Datenmenge ändern, indemSie Elemente in der .xsd-Datei modifizieren. Die Quelltextdatei wird dann beim Compilieren basierend auf den geändertenXML-Daten neu erstellt.

Weitere Informationen zu Datenmengen finden Sie in der Dokumentation des Microsoft .NET Framework SDK.

Überblick zu ADO.NET RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

16

1

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.NETverwendet ADO.NET, um die Funktionen des Datenzugriffs auszuführen.

.NET, AdoDbx Client- und BDP.NET-Verbindungskomponenten vereinfachen das Zusammenspiel von Web Forms undADO.NET. DB Web Controls unterstützen sowohl ADO.NET- als auch AdoDbx Client- und BDP.NET-Komponenten. DieEntwicklung von Webanwendungen wird dadurch wesentlich beschleunigt.

Windows Forms

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 Errorund Exceptions, Datentypaufzählungen, Provideroptionen und Interfaces für die Entwicklung eigenerCommand-, Connection- und Cursor-Klassen.

Borland.Data.Provider Enthält die wichtigsten BDP.NET-Klassen, wie BdpCommand, BdpConnection, BdpDataAdapter undandere 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 Datenbankschemensowie 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 ( see page 187)

Datenprovider für Microsoft .NET ( see page 28)

AdoDbx.NET-Datentypen ( see page 12)

ADO.NET-Komponentendesigner ( see page 23)

Typisierte Datenmengen verwenden ( see page 143)

Tabellenzuordnungen erstellen ( see page 120)

.NET Framework Developer's Guide ADO.NET (MSDN)

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET BDP-Migration: Überblick

17

1

1.1.5 BDP-Migration: Überblick

BDP (Borland Daten-Provider) ist veraltet und Sie sollten BDP nicht für neue Entwicklungen verwenden. Verwenden Siestattdessen 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 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 Errorund Exceptions, Datentypaufzählungen, Provider-Optionen und Interfaces für die Entwicklung eigenerCommand-, 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 wieOracle-, DB2-, Interbase- und MS SQL Server-Datenbanken bereitstellen.

Borland.Data.Schema Enthält Interfaces für die Entwicklung eigener Klassen zur Manipulation von Datenbankschemensowie 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 erforderlichist:

• 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 inAdoDbx Client implementiert. Der meiste Quelltext, der diese Klassen verwendet, muss mit geringem Aufwand nach AdoDbxClient konvertiert werden.

Die folgende Tabelle zeigt die Zuordnungen von Klassen in ADO.NET, BDP und AdoDbx Client:

ADO.NET BDP.NET ADODbx Client

DbCommand BdpCommand TAdoDbxCommand

DbCommandBuilder BdpCommandBuilder TAdoDbxCommandBuilder

BDP-Migration: Überblick RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

18

1

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 dieMethode, die Sie verwendet haben, in der korrespondierenden AdoDbx Client-Klasse unterstützt wird. Falls ja, müssen Siewahrscheinlich gar nichts tun. Wenn die Methode nicht unterstützt wird, müssen Sie Ihren Quelltext ändern und die Methodenverwenden, die von AdoDbx Client oder von ADO.NET unterstützt werden.

Die Klasse BdpDataReader greift beispielsweise auf Datenbankdatensätze zu. Die meisten Datenzugriffsmethoden dieserKlasse haben korrespondierende TAdoDbxDataReader.Methoden, wie im ISQLCursor-Abschnitt beschrieben. MitBdpDataReader.GetSchemaTable können Cursor-Metadaten als Datentabelle abgerufen werden. Eine Beschreibung desZugriffs 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 Clientnicht 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 dasVerbindungs-Pooling.

BdpError und BdpErrorCollection

Alle Fehler werden in AdoDbx Client in der Klasse TAdoDbxException als Exceptions behandelt, daher sind diese Klassen nichterforderlich.

BdpException, BdpParameter und BdpParameterCollection

Diese Klassen sind Implementierungen der ADO.NET-Klassen. Diese Klassen sind auch in AdoDbx Client implementiert. Dermeiste 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 dieMethode, die Sie verwendet haben, in der korrespondierenden AdoDbx Client-Klasse unterstützt wird. Falls ja, müssen Siewahrscheinlich gar nichts tun. Wenn die Methode nicht unterstützt wird, müssen Sie Ihren Quelltext ändern und die Methodenverwenden, 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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET BDP-Migration: Überblick

19

1

DbResolver

DbResolver ist eine Implementierung des ISQLResolver-Interface in dem Namespace Borland.Data.Schema (wird weiter untenin diesem Thema beschrieben).

ISQLCommand, IAQLConnection und ISQLCursor

Diese Interfaces werden hauptsächlich von Treiberentwicklern verwendet, und es gibt kein AdoDbx Client-Äquivalent. Siemüssen den Treiber erneut unter Verwendung des dbExpress-Frameworks schreiben.

Migration von Borland.Data.Schema

Diese Namespace enthält fünf Interfaces.

ISQLDataSource

Die Methode GetProviders gibt eine Liste der Daten-Provider zurück. Ähnliches führt die MethodeTAdoDbxProviderFactory.CreateDataSourceEnumerator aus, die einen Enumerator für alle Provider erstellt. Für die MethodenGetConnections 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 vonGetSchema legt die Art der zu ermittelnden Metadaten fest. Die von DbConnection.GetSchema unterstützten Standardnamenwerden in AdoDbx Client unterstützt.

Zusätzlich können Sie eine der Namenskonstanten in der Klasse TDBXMetaDataCollectionName festlegen, um eine bestimmteMetadatenkollektion zu erhalten. Mit der korrespondierenden Klasse im Namespace DBXMetaDataNames lassen sich dann diefür diese Metadatenkollektion gewünschten Spalteninformationen ermitteln.

Um beispielsweise den Quelltext für Prozeduren in einer Datenbank zu ermitteln, verwenden Sie die KonstanteProcedureSources. Dadurch erhalten Sie eine Datentabelle mit Quelltextinformationen zu den Prozeduren. Über dieDBXMetaDataNames-Klassen TDBXProcedureSourcesColumns und TDBXProcedureSourcesIndex mit der zurückgegebenenDatentabelle 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 dieEigenschaften, 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 derADO.NET-Klasse DbCommandBuilder und einer TAdoDbxDataReader-Eigenschaft erbt.

ISQLResolver ADODbx Client

Eigenschaft QuotePrefix Eigenschaft TAdoDbxCommandBuilder.QuotePrefix

Eigenschaft QuoteSuffix Eigenschaft TAdoDbxCommandBuilder.QuoteSuffix

Eigenschaft Row Eigenschaft TAdoDbxDataReader.Item

BDP-Migration: Überblick RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

20

1

ISQLSchemaCreate

Dieses Interface ermöglicht das Erstellen eines Datenbankschemas in Ihrem eigenen Provider. Der AdoDbx Client stellt diesesFeature nicht bereit.

Siehe auch

Überblick zu ADO.NET ( see page 15)

.NET Framework Developer's Guide ADO.NET (MSDN)

TAdoDbxCommand

TAdoDbxCommandBuilder

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 strengeKompatibilitä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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Blackfish SQL - Überblick

21

1

• 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 Produktgehö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 vonBlackfish SQL für Windows und Blackfish SQL für Java sind binär-kompatibel. Darüber hinaus sind auch die Datenbank-Clientsund die -Server austauschbar. Windows-Clients können mit Java-Servern eine Verbindung herstellen, und Java-Clients mitWindows-Servern.

Da die Blackfish SQL für Windows-Implementierung neuer als die für Java ist, werden einige der in Blackfish SQL für Javavorhandenen Funktionen noch nicht unterstützt. Die folgenden Funktionen werden nicht unterstützt:

• ISQL SQL-Befehlszeileninterpreter

• 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

Blackfish SQL - Überblick RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

22

1

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. Jenachdem, welche Anwendung Sie mit ADO.NET entwickeln, werden verschiedene Anforderungen an die Arbeit mit den Datengestellt. Es kann zum Beispiel sein, dass Sie eine einfache Anwendung entwickeln möchten, die lediglich Daten in einemFormular anzeigt. Oder Sie möchten eine Anwendung entwickeln, die es ermöglicht, Daten mit einem anderen Unternehmenauszutauschen. 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 sichVerbindungen zu den meisten gängigen Standarddatenbanken einrichten und konsistente und zuverlässige Operationen mit denDaten 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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET ADO.NET-Komponentendesigner

23

1

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 demVerbindungseditor können Sie Datenbankverbindungen hinzufügen, entfernen, löschen, umbenennen und testen. Änderungender Verbindungsinformationen werden in der Datei ADoDbxConnections.xml gespeichert. Auf diese Informationen kann beimErstellen eines neuen Verbindungsobjekts zugegriffen werden. Nach der Auswahl einer Verbindung erzeugt derVerbindungseditor den Verbindungsstring und die erforderlichen Verbindungsoptionen und weist diese der EigenschaftConnectionString bzw. ConnectionOptions zu.

Zum Anzeigen des Dialogfelds Verbindungseditor ziehen Sie die Komponente TAdoDbxConnection aus der Tool-Palette indas Formular und klicken auf das Designer Verb der Komponente am unteren Rand des Objektinspektors.

Anweisungstext-Editor

Im Anweisungstext-Editor geben Sie den Anweisungstext für Befehlskomponenten ein, die über die EigenschaftCommandText verfügen. In dem mehrzeiligen Bearbeitungsfeld des Editors können Sie Anweisungen manuell bearbeiten oderden 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 Verbder Komponente am unteren Rand des Objektinspektors.

Der Anweisungstext-Editor ist ein einfacher SQL-Builder, mit dem SQL-Anweisungen für eine einzelne Tabelle erstellt werdenkö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 alleObjekte angezeigt, die für den aktuell angemeldeten Benutzer verfügbar sind. Die Einstellung QuoteObjects der EigenschaftConnectionOptions bestimmt, ob die Objekte in das datenbankspezifische Anführungszeichen eingeschlossen werden. Dies istbeispielsweise 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 eineLive-TAdoDbxConnection definiert worden sein. Andernfalls können die Daten nicht abgerufen werden. DerAnweisungstext-Editor unterstützt die Auswahl von Tabellen- und Spaltennamen aus entsprechenden Listen. Nach derAuswahl erzeugt der Editor eine SQL-Anweisung. Er verwendet hierzu eine Instanz der Klasse TAdoDbxCommandBuilder. Beider Erstellung optimierter SQL-Anweisungen generiert der Editor die WHERE-Klausel für SELECT-, UPDATE- undDELETE-Anweisungen basierend auf Indexinformationen. Ansonsten wird die WHERE-Klausel mit Hilfe vonNicht-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 Procedureanzeigen und eingeben sowie die Stored Procedure ausführen. Um das Dialogfeld für Stored Procedures zu öffnen, ziehen Sieeine TAdoDbxCommand-Komponente aus der Tool-Palette in das Formular, setzen die Eigenschaft CommandType derTAdoDbxCommand-Komponente auf StoredProcedure und klicken auf das Designer Verb Anweisungstext-Editor am unterenRand des Objektinspektors.

Das Dialogfeld für Stored Procedures enthält eine Auswahlliste mit den verfügbaren Stored Procedures. Der Inhalt dieser Listehängt von der TAdoDbxConnection-Komponente ab, die in der Eigenschaft Connection der TAdoDbxCommand-Komponenteangegeben ist. Nach Auswahl einer Stored Procedure werden im Dialogfeld die zugehörigen Parameter eingeblendet. Für denausgewählten Parameter werden die Parameter-Metadaten angezeigt. Sie können Werte für die Eingabe- oderEingabe-/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 unterenTeil des Dialogfelds angezeigt. Nachdem die Eigenschaften CommandText und Parameters für dieTAdoDbxCommand-Komponente festgelegt wurden, kann die Stored Procedure zur Laufzeit durch einen Aufruf vonExecuteReader oder ExecuteNonQuery ausgeführt werden.

ADO.NET-Komponentendesigner RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

24

1

Datenmenge erzeugen

Mit dem Designer Datenmenge erzeugen können Sie eine Datenmenge (DataSet) generieren. Wenn Sie mit diesem Designerarbeiten, haben Sie folgende Vorteile: strikte Typisierung, sauberer Quelltext und die Möglichkeit, die Code-Vervollständigung zuverwenden. Eine Datenmenge wird zunächst von der Basisklasse DataSet abgeleitet und verwendet dann die Informationen ineiner 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 eineTAdoDbxDataAdapter-Komponente aus der Tool-Palette in das Formular und klicken auf das Designer Verb der Komponenteam unteren Rand des Objektinspektors. Wenn diese Komponente nicht angezeigt wird, wählen SieKomponenten 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-Anweisungenerstellen. Nachdem die SQL-Anweisungen generiert wurden, erzeugt der Designer Datenadapter konfigurieren neueTAdoDbxCommand-Objekte und fügt sie den Eigenschaften SelectCommand, DeleteCommand, InsertCommand undUpdateCommand des TAdoDbxDataAdapter-Objekts hinzu.

Nach der Erstellung einer SQL SELECT-Anweisung können Sie sich Daten in der Vorschau ansehen und eine neueDatenmenge (DataSet) erzeugen. Es ist auch möglich, eine neues DataTable-Objekt mit einer vorhandenen Datenmenge zufüllen. Neue DataSet-Objekte werden automatisch dem Designer-Host hinzugefügt. Es besteht die Möglichkeit, typisierteDataSet-Objekte zu erstellen.

Die Datenadapter sind ein integraler Bestandteil der von ADO.NET verwalteten Provider. Adapter werden im Wesentlichen dazuverwendet, den Datenaustausch zwischen einer Datenquelle und einer Datenmenge auszuführen. Dies impliziert die folgendenbeiden Vorgänge: Das Einlesen von Daten aus einer Datenbank in ein DataSet-Objekt und das Zurückschreiben der geändertenDaten aus dem DataSet-Objekt in die Datenbank. Ein Datenadapter transferiert Daten zwischen einer beliebigen Quelle undeinem DataSet-Objekt. Um das Dialogfeld Datenadapter konfigurieren zu öffnen, ziehen Sie eineTAdoDbxDataAdapter-Komponente aus der Tool-Palette in das Formular und klicken auf das Designer Verb der Komponenteam unteren Rand des Objektinspektors.

Daten-Explorer

Der Daten-Explorer ist ein hierarchischer Datenbank-Browser mit Bearbeitungsfunktionen. Der Daten-Explorer ist in die IDEintegriert, kann aber auch als eigenständiges Programm ausgeführt werden. Um in der IDE auf den Daten-Explorerzuzugreifen, wählen Sie Ansicht Daten-Explorer. Mit Hilfe der Kontextmenüs des Daten-Explorers können Sie folgendeAufgaben 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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET ADO.NET-Komponentendesigner

25

1

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.

Siehe auch

Überblick zu ADO.NET ( see page 15)

AdoDbx.NET-Datentypen ( see page 12)

Anweisungstext-Editor verwenden ( see page 137)

Verbindungseditor verwenden ( see page 139)

Designer für Datenadapter verwenden ( see page 138)

Datenadapter-Vorschau verwenden ( see page 136)

Designer "Datenmenge erzeugen" verwenden ( see page 143)

Daten zwischen Datenbanken migrieren ( see page 124)

Tabellenzuordnungen erstellen ( 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 zurLaufzeit erforderlich sind, in ein Verzeichnis für das Deployment. Im Folgenden werden die Namen dieser Assemblierungen undDLLs 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:

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

Deployment von Datenbankanwendungen RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

26

1

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

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, diemit Client-Datenmengen arbeiten.

GAC

Borland.Common.Driver.dll Alle GAC

Zugehörige dbExpress.NET-Treiber und DataSnap-DLLs können mit der Anwendung weitergegeben werden. Nicht verwalteteDatenbanktreiber-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 verlangt, die mitClient-Datenmengen arbeiten.

Suchpfad

Anmerkung: * Der Treiber ist für diese Datenbankversion nicht vollständig zertifiziert.

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Deployment von Datenbankanwendungen

27

1

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 istMicrosoft Data Access Components (MDAC) Version 2.1 oder höher erforderlich. Dies gilt sowohl für Win32-VCL-Anwendungenals 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 derAnwendung und macht das Deployment komplizierter, hat aber den Vorteil, dass die BDE auch von anderen BDE-Anwendungengenutzt werden kann und eine umfassende Unterstützung von Datenbankoperationen bietet. Obwohl Sie die API der BDE direktin der Anwendung verwenden können, wird diese Funktionalität fast vollständig von den Komponenten im Abschnitt BDE derTool-Palette übernommen.

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 .NETenthalten. AdoDbx Client ist eine Implementierung des .NET-Providers und stellt Verbindungen zu verschiedenen bekanntenDatenbanken 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.

Datenprovider für Microsoft .NET RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

28

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ürIhre eigene Datenbank implementieren und auf diese Weise Entwurfszeit-Tools und Tools für den Laufzeitdatenzugriff in dieCodeGear-IDE integrieren. Von AdoDbx.NET verwaltete Komponenten kommunizieren mit diesen Interfaces, um diegrundlegende Funktionalität für den Datenzugriff bereitzustellen. Durch die Implementierung dieser Interfaces werdendatenbankspezifische, native Client-Bibliotheken mittels Platform Invoke-Services (P/Invoke) gekapselt. Je nach Verfügbarkeitverwalteter 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 desVerbindungsstrings an die AdoDbxConnection-Komponente übergeben wird. Wenn die Eigenschaft ConnectionString einenentsprechenden Assemblierungseintrag enthält, lädt AdoDbx.NET den datenbankspezifischen Provider dynamisch undverwendet die Implementierung für ISQLConnection, ISQLCommand und ISQLCursor. Um die Datenbank zu wechseln, müssenSie 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.

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Datenprovider für Microsoft .NET

29

1

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 abernach 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ügenkö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 implementierenmöchten:

• AdoDbxConnection — Richtet eine Datenbankverbindung ein.

• AdoDbxCommand — Stellt Methoden und Eigenschaften für die Ausführung von SQL-Anweisungen und Stored Procedures bereit.

• 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 ihrenNamespaces 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 einemdatenbankspezifischen Typsystem befassen. Bei der Weiterentwicklung des Produkts wurde größter Wert auf eine konsistenteTypzuordnung für die einzelnen Datenbanktypen gelegt, sodass derselbe Quelltext für verschiedene Datenbanken verwendetwerden kann. Eine ähnliche Wirkung erreichen Sie bei den Datenprovidern des .NET Framework, indem Sie direkt auf derenInterfaces zugreifen und untypisierte Vorfahren verwenden. Die Verwendung streng typisierter Zugriffsfunktionen wirkt sichnachteilig auf die Portierbarkeit der Anwendung aus. AdoDbx.NET unterstützt keine datenbankspezifischen typisierten

Datenprovider für Microsoft .NET RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

30

1

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.NETweitestgehend 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 einzelneProvider mit den zugehörigen Objekten DataAdapter, DataReader und Connection sowie weiteren erforderlichen Objekten zuerstellen, können Sie eine Sammlung von AdoDbx.NET-Interfaces implementieren, um eigene Plug-Ins für Datenquellen in denAdoDbx-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. Inden Interfaces des AdoDbx-Client-Provider ist bereits ein Großteil der Funktionalität definiert, die zum Verbinden mitDatenquellen, 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 ( see page 23)

AdoDbx.NET-Datentypen ( see page 12)

1.1.10 Überblick zu Stored Procedures

Alle relationalen Datenbanken verfügen über bestimmte gemeinsame Funktionsmerkmale, die es den Anwendungenermöglichen, Daten zu speichern und zu bearbeiten. Stored Procedures sind eigenständige Programme, die jeweils in einerdatenbanksystemspezifischen Sprache geschrieben wurden. In der Regel dienen sie zur Bearbeitung häufig auftretenderdatenbankbezogener Aufgaben und sind besonders bei der Verarbeitung von großen Datensatzmengen oder bei Verwendungvon Zusammenfassungs- oder mathematischen Funktionen hilfreich. Stored Procedures werden normalerweise auf demDatenbankserver gespeichert.

Stored Procedures werden ähnlich aufgerufen wie SQL-Anweisungen. Das Bearbeiten und Erstellen von Stored Procedures inRAD 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, Sicherheitund 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.

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Überblick zu Stored Procedures

31

1

Siehe auch

ADO.NET-Komponentendesigner ( see page 23)

Provider für Microsoft .NET ( see page 28)

1.1.11 dbExpress-Framework

Das dbExpress-Framework (DBX-Framework) ist eine Menge abstrakter Klassen, die in der Unit DBXCommon bereitgestelltsind.. Anwendungen können mit dem Framework über verschiedene Wege in Verbindung treten: Sie können das Frameworkdirekt oder die dbExpress VCL-Komponenten, die sich in der oberen Schicht des Framework befinden, für native und verwalteteAnwendungen einsetzen.

Obwohl viele Anwendungen mit dbExpress-Treibern über die dbExpress VCL-Komponenten in Verbindung treten, bietet dasDBX-Framework eine bequeme, einfachere Option für die Kommunikation mit einem Datenbanktreiber. Sie können auch fürdbExpress 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 Treiberunterscheiden sich in der Art und Weise, wie sie geladen werden und in den Leistungsmerkmalen, die Sie für eine Anwendungbereitstellen. Dies wird weiter unten detaillierter beschrieben.

Sie können das DBX-Framework auch erweitern, um Delegattreiber zu schreiben, die eine Extra-Schicht zwischen derAnwendung und dem eigentlichen Treiber bereitstellen. Delegattreiber sind beim Verbindungs-Pooling, beim Erstellen vonTreiberprofilen, bei der Ablaufverfolgung und beim Auditing hilfreich. Eine weitere mögliche Anwendung der Treiberdelegation istdas Erstellen eines Thread-sicheren Treiberdelegaten. Ein solcher Delegat könnte einen Thread-synchronisierten Zugriff auf allepublic Methoden bereitstellen.

Absolute Thread-Sicherheit bleibt den Anwendungen überlassen, die dbExpress verwenden. GewisseThread-Sicherheitsbelange werden aber vom dbExpress-Framework ausgezeichnet gehandhabt. Zu den Thread-sicherenOperationen von dbExpress zählen das Laden und Entladen von Treiber und die Verbindungserstellung. Wie weiter obenerwähnt, kann ein Delegattreiber erstellt werden, um das gesamte public Interface von dbExpress bei Bedarf Thread-sicher zumachen.

Ein dbExpress 4-Treiber kann Treiber, die als Delphi-Packages erstellt wurden, statisch oder dynamisch linken. Der einfachsteWeg ein Treiber-Package zu linken ist, es einfach in den "uses"-Klausel aufzunehmen. Der Treiberlader lädt auch Packages, diein einer config- oder ini-Datei angegeben sind, mit der Methode LoadPackage. Dies ermöglicht das dynamische Laden vonTreibern, die in keiner uses-Klausel in den Units der Anwendung angegeben sind. Beachten Sie bitte, dass die MethodeLoadPackage nur für Anwendungen eingesetzt werden kann, die für die Verwendung von Packages vorgesehen sind.

dbExpress-Framework RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

32

1

Entwickler von dbExpress 4-Treibern sollten den Abschnitt "initialization" der Units DBXDynalink und DBXTrace im mitdbExpress ausgelieferten Quelltext studieren. Diese Abschnitte registrieren sich selbst mit einer Singleton-Unit namensClassRegistry. ClassRegistry wird von den dbExpress 4-Treiberladern zum Instantiieren der Treiberladeklassen anhand desNamens (ein String) verwendet. ClassRegistry ist ein einfacher, schmaler Mechanismus zum Registrieren und Instantiieren einerKlasse über ihren Namen.

DBXDynalink-Treiber

DBXDynalink wird für vorhandene dbExpress 3-Treiber und für neue Treiber verwendet. Es wird als natives Delphi-Packageoder 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 alsdas COM-basierte Interface von dbExpress 3 bereit. Daher können Methoden zu zukünftigen Produktgenerationen hinzugefügtwerden, 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-Interfaceadaptiert. 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 einerDBXCommon-Exception zu.

Die Unit DBXDynalink enthält einen dbExpress 4-Treiber. Dieser Treiber delegiert an Nicht-Delphi-Treiber, die das lineareExport-Interface DBXDynalinkExport implementieren. DBXTrace ist ein Delegattreiber für die Ablaufverfolgung. DieDbExpress-VCL verwendet DBXCommon, DBXDynalink und DbxTrace als "Standardtreiber". Dies kann jedoch für statischgelinkte 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. Dieuses-Klausel in DBXDefaultDrivers enthält DBXCommon, DBXDynalink und DBXTrace. DBXCommon muss immer verwendetwerden. Eine statisch gelinkte Anwendung kann aber DBXTrace entfernen und DBXDynalink durch einen anderen Treiberersetzen.

DBXDirect-Treiber

Ein DBXDirect-Treiber ist ein beliebiger Treiber, der durch Erweiterung der abstrakten DBXCommon-Basisklassen implementiertwird. Diese Klassen sind für native Implementierungen in Delphi geschrieben. Für verwaltete Implementierungen können Sie injeder 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 stellenjedoch 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) entwickeltwurden, mussten für die Zusammenarbeit mit dem DBX-Treiber-Framework verändert werden. Dies hat zu einigenKompatibilitätsproblemen geführt.

Allgemein

dbExpress 2.5-Treiber können nicht mit dem DBX-Framework verwendet werden.

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET dbExpress Framework-Kompatibilität

33

1

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-Frameworkerkennt dbExpress 3-Treiber automatisch und passt mithilfe des DBXAdapter-Treibers (dbxadapter30.dll) einen dbExpress3-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.

• 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 gibtjedoch einige lokalisierte Änderungen an VCL-Komponenten, weil die VCL jetzt mit dem mehr objektorientiertenDBX-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 aucheinige 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. DieUnit 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 werdenkann. Die InterBase-Verwaltungskomponenten, für die InterBase 6 erforderlich ist, werden nach denInterBase-Datenzugriffskomponenten beschrieben.

Einführung in InterBase Express RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

34

1

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 kann eine InterBase-SQL-Anweisungausgeführt werden.

TIBStoredProc Diese Komponente kapselt eine Stored Procedure auf einemDatenbankserver.

TIBDatabase Diese Komponente kapselt eine InterBase-Datenbankverbindung.

TIBTransaction Diese Komponente ermöglicht die Transaktionssteuerung bei eineroder mehreren Datenbankverbindungen in einerDatenbankanwendung.

TIBUpdateSQL Diese Komponente stellt ein Objekt für die Aktualisierung vonschreibgeschützten Datenmengen bereit, wenn dasZwischenspeichern von Aktualisierungen aktiviert ist.

TIBDataSet Diese Komponente führt InterBase-SQL-Anweisungen aus.

TIBSQL Mit dieser Komponente kann eine InterBase-SQL-Anweisung mitminimalem Overhead ausgeführt werden.

TIBDatabaseInfo Dieses Komponente dient zum Abrufen von Informationen über dieverknü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 InterBaseExpress abgerufene Daten repräsentieren.

Trotz ähnlicher Namen bestehen gewisse Unterschiede zwischen BDE- und IBX-Komponenten. In den folgenden Abschnittenwerden diese Unterschiede erläutert.

Die Migration von BDE- zu IBX-Anwendungen ist mit einem gewissen Aufwand verbunden. Sie müssen die BDE-Komponentendurch entsprechende IBX-Komponenten ersetzen und danach die Anwendung neu compilieren. Der zusätzlicheMigrationsaufwand wird jedoch durch die höhere Ausführungsgeschwindigkeit und den Zugriff auf die leistungsstarkenInterBase-Funktionen ausgeglichen.

IBDatabase

Mit der TIBDatabase-Komponente werden Verbindungen zu Datenbanken eingerichtet, die eine gleichzeitige Abwicklungmehrerer Transaktionen unterstützen. Im Gegensatz zur BDE verfügt IBX über eine gesonderte Transaktionskomponente, dieeine 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

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Einführung in InterBase Express

35

1

Systemadministrator anmelden und LoginPrompt auf False setzen, könnte die Eigenschaft Params Folgendes enthalten:

user_name=sysdbapassword=masterkey

IBTransaction

Im Gegensatz zur Borland Database Engine steuert IBX Transaktionen mit einer speziellen Komponente namensTIBTransaction. Damit haben Sie die Möglichkeit, Transaktionen und Datenbankverbindungen getrennt zu verwalten und denZweiphasen-Mechanismus von InterBase für das Eintragen zu verwenden (Transaktionen können mehrere Verbindungenumfassen). 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, eineIBTransaction-Komponente. In der Regel kann aber das Modell "Eine Datenbank/Eine Transaktion" verwendet werden.

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

Einführung in InterBase Express RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

36

1

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)

Anmerkung: Im Dialekt 3 wird bei Parametern und Feldern, die an Funktionen übergeben werden, zwischen Groß- undKleinschreibung 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 mitDaten. Verwenden Sie für Stored Procedures, die mehrere Datenzeilen zurückgeben, und für "Select"-Prozeduren entwedereine IBQuery- oder eine IBDataSet-Komponente.

IBSQL

Verwenden Sie TIBSQL-Komponenten für kompakte Datenoperationen, die schnell ausgeführt werden. Hierzu gehörtbeispielsweise 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önnenbeispielsweise 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.

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Einführung in InterBase Express

37

1

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.

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; // Delphi-BeispielMemo1->Text = IBDatabaseInfo->UserNames->Text; // C++ Beispiel

IBEvents

Mit Hilfe einer IBEvents-Komponente kann eine Anwendung Ereignisse eines InterBase-Servers empfangen und asynchronbehandeln.

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

Einführung in InterBase Express RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

38

1

TIBValidationService

TIBStatisticalService

TIBLogService

TIBSecurityService

TIBLicensingService

TIBServerProperties

TIBInstall

TIBUnInstall

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 dieAngabe verschiedener Parameter. Sie können beispielsweise einen Blockierungsfaktor, den Namen der Sicherungsdatei undverschiedene Sicherungsoptionen angeben.

IBRestoreService

TIBRestoreService-Objekte werden zur Wiederherstellung von Datenbanken eingesetzt. Sie können verschiedene Parameterangeben, 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 vonInformationen 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 einesIBSecurityService-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 zuentfernen.

IBServerProperties

Mit Hilfe einer TIBServerProperties-Komponente können Informationen zum Datenbankserver abgerufen werden

1.1 Datenbankanwendungen mit ADO.NET RAD Studio für .NET Einführung in InterBase Express

39

1

(Konfigurationsparameter, Versions- und Lizenzinformationen usw.).

IBInstall

TIBInstall-Komponenten dienen zum Einrichten von InterBase-Installationen. Sie können das Quell- und das Zielverzeichnis fürdie Installation sowie die zu installierenden Komponenten festlegen.

IBUnInstall

Ein TIBUnInstall-Objekt wird zur Konfiguration einer Deinstallationskomponente eingesetzt.

Einführung in InterBase Express RAD Studio für .NET 1.1 Datenbankanwendungen mit ADO.NET

40

1

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 ErstellungIhrer Anwendungen auf die .NET COM Interop-Funktionen in RAD Studio zurückgreifen.

Themen

Name Beschreibung

COM Interop in verwalteten Anwendungen ( see page 41) 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)

DrInterop verwenden ( 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 ( see page 47) 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)

Platform Invoke mit Delphi für .NET verwenden ( see page 48) 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)

Interfaces für virtuelle Bibliotheken ( see page 56) 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 Codeermöglicht. Der Service COM Interop ist mit einer zweiseitig befahrbaren Brücke vergleichbar: Das heißt, Sie können sowohl

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET COM Interop in verwalteten Anwendungen

41

1

vorhandene COM-Server und ActiveX-Elemente in neue .NET-Anwendungen integrieren, als auch .NET-Komponenten invorhandene, nicht verwaltete Anwendungen übernehmen.

In der RAD Studio-IDE stehen Tools zur Verfügung, die Sie bei der Integration vorhandener COM-Server und ActiveX-Elementein 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 lassensich 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.

• 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 RCWbildet eine eigene Kommunikationsschicht zwischen Ihrer verwalteten Anwendung und dem aktuell nicht verwaltetenCOM-Server.

Terminologie von COM Interop

Das .NET Framework besteht aus zahlreichen Fachbegriffen und Akronymen. Dieser Abschnitt soll dabei helfen, dieTerminologie 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önnenTypinformationen auf verschiedene Arten gespeichert sein. Zum Beispiel ist eine Headerdatei in C++ ein sprachspezifischerContainer für Typinformationen. Eine Typbibliothek ist ebenfalls ein Container für Typinformationen. Da Bibliotheken jedoch einBinärformat aufweisen, sind sie in Bezug auf die Programmiersprache neutral. Anders als bei der COM-Entwicklung, bei derkeine 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 derprivate deklarierten Typen und Klassenelemente.

Benutzerdefinierte Attribute

Entwickler zeichnen Programmentitäten (wie Klassen und ihre Methoden) häufig mit beschreibenden Attributen aus, wie zumBeispiel 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 werdenbenutzerdefinierte 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 verlorengehen. Stattdessen werden alle Metadaten, einschließlich benutzerdefinierter Attribute, vom Compiler in die endgültigeOutput-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

COM Interop in verwalteten Anwendungen RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

42

1

und die darin deklarierten Typen inspizieren. Reflexions-Tools bieten Programmierern die Möglichkeit, eine direkte Darstellungdes IL-Codes, der vom Compiler generiert wird, zu erzeugen. In der IDE von RAD Studio ist ein eigenes integriertesReflexions-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. EinInstallationsscript der Komponente zeichnet deren Position in der Systemregistrierung auf. Befehlszeilen-Tools wie regsvr32 undtregsvr können COM-Komponenten auch in die Registrierung einfügen oder daraus entfernen. Die Registrierung derKomponenten ist in der COM-Programmierung erforderlich, auch wenn die Komponenten nicht von mehreren Anwendungengemeinsam genutzt werden sollen.

Das Modell der .NET-Programmierung sieht eine drastische Vereinfachung des Deployment von Anwendungen undKomponenten vor. Das Deployment von nicht gemeinsam genutzten Komponenten erfolgt auf der .NET-Plattform direkt imlokalen Installationsverzeichnis der Anwendung, und es ist keine Registrierung erforderlich. Eine nicht gemeinsam genutzteKomponente kann alternativ auch in das Verzeichnis weitergegeben werden, in dem sich die Konfigurationsdatei derAnwendung 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 vollkommengetrennten Mechanismus handelt, der in keinster Weise mit der Registrierung verbunden ist). Der GAC befindet sich imDateisystem im Ordner \WINDOWS\ASSEMBLY. Das .NET Framework unterstützt das simultane Deployment verschiedenerVersionen derselben Komponente. Wenn Sie den Globalen Assemblierungs-Cache im Windows Explorer öffnen, sehen Sie denInhalt des GAC durch eine spezielle Oberflächenerweiterung. In dieser Darstellungsform werden alle im GAC installiertenAssemblierungen 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 desFramework SDK mit dem Namen gacutil verwenden, das nachstehend erläutert wird. Die zweite Möglichkeit eineKomponente im GAC zu installieren besteht darin, den Ordner \WINDOWS\ASSEMBLY im Windows Explorer zu öffnen unddann die Assemblierung direkt mit der Maus in das Verzeichnis zu ziehen. Und drittens können Sie dazu das .NET-Tool zurVerwaltung 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 auseinem Text, einer Versionsnummer und Kulturinformationen (sofern vorhanden) besteht. Bei gemeinsam genutzten, im GACinstallierten Assemblierungen reicht der Basisname alleine nicht aus, um die einmalige Benennung einer Assemblierung zugarantieren. Um einen weltweit einmaligen Namen zu erzeugen, wird eine Verschlüsselungstechnik mit öffentlichen und privatenKomponenten 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 einenCOM-Server in einer .NET-Anwendung verwenden, wird dieser ähnlich jeder anderen .NET-Komponente dargestellt. Genausowird auch jede .NET-Komponente in einer nicht verwalteten Anwendung mit Hilfe von COM Interop so dargestellt wie einCOM-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) einenRCW (Runtime Callable Wrapper), der als Schnittstelle zwischen verwaltetem und nicht verwaltetem Code dient. Die gesamtekomplexe Aufgabe des Daten-Marshaling und der Referenzzählung wird von dem RCW gehandhabt. Der RCW greift dafür nichteinmal auf die Interfaces IUnknown und IDispatch zurück.

Wenn Sie eine .NET-Komponente in einer nicht verwalteten Anwendung benutzen, erzeugt das System einen Stellvertreter, denso genannten COM Callable Wrapper (CCW).

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET COM Interop in verwalteten Anwendungen

43

1

Primäre Interop-Assemblierung

Sobald im Modell der COM-Programmierung einem Typ ein GUID zugewiesen ist, bezieht sich dieser immer auf jenen speziellenTyp, unabhängig davon, wo der Typ auftritt. Zum Beispiel: Ein allgemeines Interface kann in vielen verschiedenenTypbibliotheken definiert sein, aber jede einzelne Typbibliothek würde das Interface mit demselben GUID definieren, weshalb dieDuplizierung 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ürdedann (sofern es die allgemeine Laufzeitumgebung betrifft) eindeutige Typen enthalten. In diesem Fall wirkt sich also die starkeIdentität und die selbstbeschreibende Natur der .NET-Assemblierungen negativ aus. Dies führt zu einem GAC, der mitInterop-Assemblierungen überfüllt ist, die alle RCWs für dieselbe Typbibliothek enthalten. Besonders negativ für die allgemeineLaufzeitumgebung ist dabei, dass jede Assemblierung eindeutige und inkompatible Typen enthält, denn jeder Typ hat einenanderen starken Namen.

Um diese Auswüchse von Assemblierungen sowie die potenziellen Inkompatibilitäten von Typen zu vermeiden, steht imFramework die Möglichkeit zur Verfügung, eine Assemblierung als primäre Interop-Assemblierung für eine Typbibliothek zudefinieren. Eine primäre Interop-Assemblierung ist immer mit einem starken Namen signiert, wofür der ursprüngliche Herstellerder 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 Abschnittsoll keine komplette Referenz für diese Tools darstellen, sondern eher als Ausgangspunkt für weitere Erkundungen des .NETFramework 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. Tlbimpverwendet entweder direkt eine Typbibliothek oder eine nicht verwaltete DLL, die eine Typbibliothek als eingebettete Ressourceenthält. Beachten Sie, dass die mit dem Tool tlbimp erstellte Assemblierung nur den Quelltext für den RCW, nicht aber für dasursprüngliche COM-Objekt selbst enthält. Aus diesem Grund müssen das Deployment und die Registrierung des COM-Objektsdennoch auf dem Computer des Endanwenders erfolgen. Die Assemblierung enthält auch diejenigen Typen, die in derTypbibliothek als Metadaten beschrieben sind. Das Tool Tlbimp bietet zusätzlich einen Befehlszeilenschalter für das Erstelleneiner 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 inein Windows Form können nur Steuerelemente eingefügt werden, die von der Klasse System.Windows.Forms.Control abgeleitetsind, 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ängigenAssemblierungen) als auch die ActiveX-Wrapper-Assemblierung. Ebenso wie tlbimp verfügt auch aximp überBefehlszeilenschalter, um die Assemblierungen mit einem starken Namen zu versehen. Anders als tlbimp kann das Toolaximp 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üsselzuweisen. Dies lässt sich mit dem Befehlszeilen-Tool sn des .NET Framework SDK ausführen. Einer Assemblierung kann miteiner der drei folgenden Möglichkeiten ein starker Name zugewiesen werden:

COM Interop in verwalteten Anwendungen RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

44

1

• 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 undAnzeigen von Komponenten im GAC verwenden lässt. Der Befehl gacutil kann sowohl von Installationsscripts als auch vonBatchdateien genutzt werden. Mit dem Befehl gacutil installieren und entfernen Sie gemeinsam genutzte Assemblierungenmit und ohne Referenzzählung. Es empfiehlt sich, die Befehlsschalter für das Auslassen der Referenzzählung nur während derEntwicklung zu verwenden. Installationsscripts, die gacutil für die Installation gemeinsamer Komponenten verwenden, solltengrundsä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 Grundevon der Klassenbibliothek des .NET Framework selbst bereitgestellt. Die IDE von RAD Studio nutzt die Klassen des .NETFramework auch für die Funktionen der Interoperabilität (Interop). Dabei gehen die Möglichkeiten der IDE weit über jene derBefehlszeilen-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 zueiner DLL einfügen, können Sie aus den registrierten Typbibliotheken und den nicht verwalteten DLLs auswählen oder nacheiner nicht registrierten Komponente suchen.

Die IDE erstellt für jede importierte Typbibliothek oder DLL eine eigene Interop-Assemblierung. Diese Assemblierungen tragenden Namen Interop.LibraryName.DLL, wobei LibraryName der Name der Typbibliothek ist. Der Name der Bibliothek wird in derBibliotheksanweisung im IDL-Quelltext angegeben, weshalb sich der Dateiname der generierten Assemblierung von dem derursprünglichen DLL oder Typbibliothek unterscheiden kann. Jede Interop-Assemblierung (und alle zugehörigenAssemblierungen) werden als referenzierte Assemblierungen in das Projekt eingefügt. Die in der Interop-Assemblierungenthaltenen Typen werden in einen Namespace eingefügt, der denselben Namen wie die Typbibliothek hat. Auch dieser wirdwiederum von der Bibliotheksanweisung im IDL-Quelltext abgeleitet.

Wenn die referenzierte Assemblierung eine primäre Interop-Assemblierung besitzt, erkennt die IDE dies und erstellt keine neueInterop-Assemblierung. In diesem Fall fügt die IDE eine Referenz zu der betreffenden primären Interop-Assemblierung in denGAC 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 dieTool-Palette einfügen. Dadurch wird sowohl eine Interop-Assemblierung als auch eine ActiveX-Assemblierung mit einerWrapperklasse erstellt, die von System.Windows.Forms.AxHost abgeleitet ist. Die ActiveX-Wrapper-Assemblierung erhält denNamen AXINTEROP.LibraryName.DLL, wobei LibraryName der Name der Typbibliothek ist. Wenn Sie das ActiveX-Elementdann von der Tool-Palette in das Windows Form ziehen, werden automatisch die Referenzen zu beiden Assemblierungen in dasProjekt eingefügt.

Sobald es sich im Formular befindet, kann das ActiveX-Element wie jede andere .NET-Komponente behandelt werden. Siekönnen das Element markieren und dessen Eigenschaften und Ereignisbehandlungsroutinen im Objektinspektor setzen. DerActiveX-Element-Wrapper stellt die Eigenschaften der Klasse Windows.Forms.Control bereit, während die Eigenschaften, dievon dem betreffenden ActiveX-Element bereitgestellt werden, in der Kategorie Sonstiges im Objektinspektor zu finden sind.

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET COM Interop in verwalteten Anwendungen

45

1

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 generierteAssemblierung ist die Eigenschaft Lokal kopieren gesetzt. Dies bedeutet, dass die Assemblierung beim Build eines Projekts inden Ordner kopiert wird, in dem sich das endgültige Build des Projekts befindet. Lediglich die primären Interop-Assemblierungenbetrifft dies nicht, denn ihr Deployment findet im GAC statt. Wenn Sie eine Referenz zu einer primären Interop-Assemblierunghinzufügen, kopiert die IDE die Assemblierung nicht in den Ordner COMImports. Die Assemblierung wird zwar in derProjektverwaltung angezeigt, aber wenn Sie mit der rechten Maustaste darauf klicken, sehen Sie, dass die Einstellung Lokalkopieren nicht aktiv ist.

Die Liste der referenzierten Assemblierungen (einschließlich derjenigen, die keine Interop-Assemblierungen sind) ist ein Attributdes Projekts. Existiert der Ordner COMImports (oder eine der darin enthaltenen Interop-Assemblierungen) nicht, wenn Sie einProjekt öffnen, versucht die IDE diesen neu zu erstellen. Wenn die IDE eine Interop-Assemblierung nicht erstellen kann, ist diesezwar 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.

Siehe auch

Referenzen zu einem COM-Server hinzufügen ( see page 150)

ActiveX-Steuerelemente zur Tool-Palette hinzufügen

Platform Invoke mit Delphi verwenden ( see page 48)

Interfaces für virtuelle Bibliotheken ( see page 56)

1.2.2 DrInterop verwenden

Das Befehlszeilenprogramm drinterop überprüft eine Assemblierung und generiert Diagnosemeldungen, die bei derVorbereitung 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 Befehlaufgerufen:

drinterop assembly

Meldung Ursache

Assembly ComVisible attribute is true when itshould be false. (Das AssemblierungsattributComVisible ist True, muss aber False sein.)

Das Attribut [assembly:ComVisible(bool)] ist auf True gesetztoder nicht vorhanden.

Assemblierungen sollten vor COM verborgen werden, um Problememit der Registrierung zu vermeiden.

Setzen Sie das Attribut ComVisible auf False, und stellen SieKlassen und Interfaces selektiv bereit.

Assembly, class, or interface is exposed to COM butdoes not contain the Guid attribute. (Assemblierung,Klasse oder Interface ist für COM bereitgestellt, enthältaber kein Guid-Attribut.)

Das Attribut ComVisible für die Assemblierung, die Klasse oder dasInterface ist auf True gesetzt, es ist aber kein Guid-Attributvorhanden.

DrInterop verwenden RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

46

1

A type library should be generated and registered forassembly. (Für die Assemblierung muss eineTypbibliothek generiert und registriert werden.)

Diese Meldung wird erzeugt, wenn eine erforderliche Typbibliotheknicht in demselben Verzeichnis wie die Assemblierung vorhanden ist.

Assembly does not contain the TypeLibVersionattribute. (Die Assemblierung enthält keinTypeLibVersion-Attribut.)

Das Attribut [assembly: TypeLibVersion(x,y)] ist in derAssemblierung nicht vorhanden.

Die Versionsnummern für Typbibliotheken werden standardmäßigaus den ersten beiden Stellen der Assemblierungsversion erzeugt.Durch die Verwendung des Attributs TypeLibVersion lassen sichKonflikte vermeiden, wenn die beiden ersten Stellen derVersionsnummern zweier Assemblierungen identisch sind.

Reduce registry size by adding attribute[ClassInterface(ClassInterfaceType.None)]to class. (Registrierungsgröße durch Hinzufügen desAttributs[ClassInterface(ClassInterfaceType.None)]zur Klasse verringern.)

Die Klasse enthält kein ClassInterface-Attribut.

Standardmäßig wird für jede Klasse ein entsprechendes Interfaceerzeugt, wobei dem Klassennamen ein Unterstrich vorangestellt wird.Dem Interface sind keine Methoden zugeordnet.

Sie können die Größe der Registrierung verringern, indem Sie derKlasse 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 Siegrundsätzlich, dass eine Interop-Assemblierung kein wirklicher Ersatz für den COM-Server ist, sondern sein Stellvertreter oderProxy. Die von tlbimp und RAD Studio generierten Interop-Assemblierungen transformieren den nicht verwalteten Code einerKomponente in keinster Weise in verwalteten Code. Alle Dateien, die für eine Komponente in einer nicht verwaltetenDeployment-Umgebung erforderlich sind, müssen zusätzlich zu den Interop-Assemblierungen auch in einer verwaltetenUmgebung weitergegeben werden. Zweitens bieten die Interop Services des .NET Framework keine Umgehungsmöglichkeit fürdie Registrierung des COM-Servers auf dem Computer des Endanwenders. Beachten Sie, dass eine Registrierung auchwährend der Entwicklung einer verwalteten Anwendung erforderlich ist.

Das Deployment einer Interop-Assemblierung erfolgt, ebenso wie bei jeder anderen .NET-Assemblierung, zusammen mit derverwalteten ausführbaren Datei im Installationsordner oder im GAC. Erfolgt das Deployment einer Interop-Assemblierung imGAC, müssen Sie ihr während der Entwicklung einen starken Namen geben. Das Deployment primärerInterop-Assemblierungen erfolgt grundsätzlich im GAC. Doch dies bedeutet nicht umgekehrt, dass es sich durch dasDeployment einer Assemblierung im GAC bereits automatisch um eine primäre Interop-Assemblierung handelt. Um eineInterop-Assemblierung als primäre Interop-Assemblierung auszuzeichnen, müssen Sie die Befehlszeilenoption /primary desUtilitys tlbimp verwenden. Die IDE verfügt aktuell über keine integrierte Funktion zum Erstellen primärerInterop-Assemblierungen. Das Deployment nicht verwalteter COM-Server lässt sich auf dem Computer des Endanwenders aneiner beliebigen Position vornehmen. Doch wie bereits erwähnt, müssen Sie die nicht verwalteten Komponenten bei derInstallation der Anwendung nach wie vor registrieren.

Siehe auch

CodeGear – Übersicht zum Deployment von Anwendungen

Microsoft – Übersicht zum Deployment von Anwendungen

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET Platform Invoke mit Delphi für .NET

47

1

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 aufeinige der üblichen Fehlerquellen hingewiesen. Eine Schnellübersicht für die Übersetzung von Delphi-Datentypen wird ebenfallsangeboten. Dieses Thema kann nicht die gesamten Grundlagen von Platform Invoke oder des Marshaling von Datenbeschreiben. In den Links am Ende dieses Themas finden Sie weitere Informationen zu Platform Invoke und Marshaling. Zumbesseren 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 inder Dokumentation zum Windows Platform SDK.

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 nichtverwalteten Typen repräsentiert. In vielen Fällen verwenden Funktionen Zeiger auf Daten, die Variablentypen sein können. EinBeispiel 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 einfacherDatentypen sein. Da es keine Möglichkeit gibt, dies mit einer einzigen Deklaration darzustellen, müssen mehrere überladeneVersionen der Funktion deklariert werden (siehe Borland.Vcl.Windows.pas), wobei jede Überladung einen bestimmten Fallabdeckt. Der Parameter pvParam kann auch die generische Deklaration IntPtr erhalten. Damit wird die Aufgabe des Marshalingan die aufrufende Funktion übergeben. Der integrierte Marshaler übernimmt dies dann nicht. Beachten Sie, dass dieDatentypen, die in einer verwalteten Deklaration einer nicht verwalteten Funktion verwendet werden, jenen Typen entsprechenmüssen, die der Marshaler unterstützt. Andernfalls muss der Aufrufer die Parameter als IntPtr deklarieren und ist dann für dasMarshaling der Daten verantwortlich.

Datentypen

Die meisten Datentypen müssen nicht verändert werden, mit Ausnahme der Zeiger- und String-Typen. Die folgende Tabelle führthä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 StringBuilder

Untypisierter Parameter/Puffer TBytes TBytes

Zeiger auf Struktur (PRect) const TRect var TRect

Platform Invoke mit Delphi für .NET RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

48

1

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 KlasseMarshal manuell ausgeführt werden. Wenn Sie mit Funktionen arbeiten, die einen Textpuffer empfangen, bietet die KlasseStringBuilder die einfachste Lösung. Das folgende Beispiel zeigt, wie die Klasse StringBuilder dazu verwendet wird, einenTextpuffer 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;

Die Klasse StringBuilder wird automatisch in einen nicht verwalteten Puffer und wieder zurück übertragen. In einigen Fällen kannes sich als unpraktikabel oder unmöglich erweisen, die Klasse StringBuilder zu verwenden. Das folgende Beispiel zeigt, wie sichdas 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 verwaltetenSpeicherpuffer 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 SystemDefaultCharSizedie 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. Dadie verwalteten API-Übersetzungen keine Zeigertypen verwenden, kann es notwendig werden, eine zusätzliche überladene

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET Platform Invoke mit Delphi für .NET

49

1

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 derStandard-Marshaler bereits die erste NULL als Ende des Strings interpretiert, werden die Daten abgeschnitten (dies gilt auch fürdie Methoden StringToHGlobalXXX und PtrToStringXXX). In dieser Situation lässt sich TBytes verwenden (mit Hilfe derFunktionen PlatformStringOf und PlatformBytesOf in Borland.Delphi.System wird das Byte-Array zu/von einem Stringkonvertiert.) 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 KlasseMarshalAsAttribute verwendet) den Wert LPStruct. Dies gilt nur in Kombination mit der Klasse System.Guid, die den Marshalerdazu bringt, die Parameter in eine Win32-GUID-Struktur zu konvertieren. Die Funktion CoCreateInstance wird in Delphi 7 wiefolgt deklariert:

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 verwalteteFunktionen besteht darin, dass der Standard-Marshaler bei der Arbeit mit Strukturen einigen wesentlichen Beschränkungenunterliegt. Dynamische Arrays, Arrays von Strukturen und die Klasse StringBuilder lassen sich nicht in Strukturen verwenden. Indiesen Fällen ist IntPtr erforderlich (obwohl in manchen Fällen auch string mit verschiedenen Marshaling-Attributen für Stringsverwendet 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] ofByte

Dynamisches Array (array[0..0] of type) IntPtr IntPtr

Struktur-Array (array[1..2] of TRect) IntPtr oderaufgeschlüsselt

IntPtr oderaufgeschlü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

Wenn Sie in Strukturen mit Arrays und Strings arbeiten, wird das Attribut MarshalAs dazu verwendet, dem Standard-Marshalerzusätzliche Informationen über den Datentyp bereitzustellen. In Delphi 7 wird ein Record wie folgt deklariert:

Platform Invoke mit Delphi für .NET RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

50

1

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;

Die oben dargestellten Deklarationen gehen davon aus, dass die Strings plattformabhängige TChars enthalten (wie gewöhnlichvon der Win32-API verwendet). Damit der Text in lpszOutput empfangen werden kann, muss die MethodeMarshal.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 deklariertund die Methode Marshal.StructureToPtr dazu verwendet werden, die Daten von der verwalteten Struktur in den nichtverwalteten Speicher zu verschieben. Beachten Sie, dass StructureToPtr den erforderlichen Speicherplatz nicht automatischzuweist (dies muss separat erfolgen). Stellen Sie sicher, dass Sie Marshal.SizeOf verwenden, um den erforderlichenSpeicherplatz zu ermitteln, da der Delphi-Operator SizeOf das Attribut MarshalAs nicht erkennt (im vorhergehenden Beispielwäre CharBuffer mit dem Delphi-Operator SizeOf 4 Byte, obwohl es in Wirklichkeit 128 Byte in einem Single-Byte-Systembelegen 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 MethodeFreeHGlobal die Methode DestroyStructure aufzurufen (detaillierte Informationen hierzu finden Sie in der Dokumentation zuDestroyStructure).

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET Platform Invoke mit Delphi für .NET

51

1

Weiterführende Themen

Bei der Arbeit mit nicht verwalteten APIs kann es erforderlich sein, ein Byte-Array in eine Struktur zu konvertieren (oder einesbzw. mehrere Felder aus einer Struktur abzurufen, die sich in einem Byte-Array befindet) oder umgekehrt. Die Klasse Marshalenthält zwar eine Methode, um den Offset des angegebenen Feldes abzurufen, diese ist aber extrem langsam. Deshalb sollteihre Verwendung auf Sonderfälle beschränkt werden. Interne Geschwindigkeitstests haben ergeben, dass es bei einer Strukturmit acht oder neun numerischen Feldern deutlich schneller ist, einen nicht verwalteten Speicherblock zu reservieren, dasByte-Array in den nicht verwalteten Speicher zu kopieren und dann die Methode PtrToStructure aufzurufen, anstatt die Positionnur eines Feldes mit der Methode Marshal.OffsetOf ausfindig zu machen und die Daten dann mit der Klasse BitConverter zukonvertieren. Borland.Vcl.WinUtils enthält Hilfefunktionen zur wechselseitigen Konvertierung zwischen Byte-Arrays undStrukturen (siehe StructureToBytes und BytesToStructure).

Spezialfälle

Es gibt Situationen, in denen eine benutzerdefinierte Verarbeitung erforderlich ist, zum Beispiel das Senden von Botschaften miteinem Zeiger auf ein Integer-Array. In diesem Fall stellt die Klasse Marshal Methoden zum direkten Kopieren der Daten in dennicht verwalteten Puffer an den angegebenen Offsets bereit (auf diese Weise können Sie nach der Pufferzuweisung einenbenutzerdefinierten Array-Datentyp erstellen). Das folgende Beispiel zeigt, wie Sie eine Botschaft senden, in der LParam einenZeiger 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 Referenzzum Delegate verwaltet werden, andernfalls gelangt dieser in die Garbage Collection. Wenn Sie einen Zeiger direkt an eineverwaltete Funktion übergeben, wird ein temporärer Delegate erstellt. Sobald dieser den Gültigkeitsbereich verlässt (imnachstehenden Beispiel am Ende von MyFunction) wird er der Garbage Collection überlassen. Beachten Sie dennachstehenden 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

Platform Invoke mit Delphi für .NET RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

52

1

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 gibtnach der Rückkehr vom Funktionsaufruf soviel Speicher frei, wie er den nicht verwalteten Typen zugewiesen hat. Bei derVerwendung 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. Dortwerden sie gespeichert und später, meist zusammen mit einem bestimmten Ereignis, zurück an die Anwendung zurVerarbeitung übergeben. Dies kann auch mit .NET ausgeführt werden, aber es ist eine besondere Sorgfalt erforderlich, umsicherzustellen, dass eine Referenz auf alle Objekte behalten wird (andernfalls werden sie von der Garbage Collectioneingesammelt).

Datentypen

Nicht verwaltete Datentypen Verwalteter Datentyp

Daten zur Verfügung stellen Daten empfangen

Zeiger (Objektreferenz, Benutzerdaten) GCHandle GCHandle

Die Klasse GCHandle sorgt dafür, dass Objektreferenzen an nicht verwalteten Code übergeben werden und stellt sicher, dasskeine 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, wobeiGCHandleType.Normal dann am sinnvollsten ist, wenn ein nicht verwalteter Client die einzige Referenz enthält. Nach derZuweisung übergeben Sie GCHandle an eine API-Funktion und wandeln sie in den Typ IntPtr um (wahlweise und abhängig vonder nicht verwalteten Deklaration ist auch eine weitere Umwandlung in LongInt möglich). Der Typ IntPtr kann später jederzeit aneine GCHandle-Klasse zurück überführt werden. Beachten Sie, dass vor dem Zugriff auf die Eigenschaft Target die MethodeIsAllocated 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 dieGefahr von Ressourcenlecks, wenn die Handles nicht korrekt freigegeben wurden. Wenn Objektreferenzen im verwaltetem Codeaufbewahrt werden, ist es möglich, anstelle einer Objektreferenz auch einen einmaligen Index, zum Beispiel den von der

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET Platform Invoke mit Delphi für .NET

53

1

Methode GetHashCode zurückgegebenen Hash-Code, an die nicht verwaltete API zu übergeben. Eine Hash-Tabelle kann aufder verwalteten Seite gepflegt werden, um das Abrufen von Objektinstanzen auf der Basis des Hash-Werts zu vereinfachen, fallsdies 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 mitHilfe von benutzerdefinierten Attributen deklariert werden, um den Interface-Typ und den GUID anzugeben. Im nächsten Schrittwerden dann die Methoden deklariert, wobei derselbe Ansatz wie bei nicht verwalteten APIs benutzt wird. Das folgende Beispielverwendet 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;

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 dieMethoden 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 zubeachten:

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ührtenVerwendungszwecke von TObject erforderlich, um den genauen, nicht verwalteten Typ anzugeben (zum BeispielUnmanagedType.IUnknown, UnmanagedType.IDispatch oder UnmanagedType.Interface). Dies gilt auch für mancheArraytypen. Ein Beispiel für die explizite Angabe eines nicht verwalteten Typs ist die Methode Next des InterfaceIEnumString. Die Win32-API deklariert Next wie folgt:

HRESULT Next( ULONG celt, LPOLESTR * rgelt, ULONG * pceltFetched

Platform Invoke mit Delphi für .NET RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

54

1

);

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 entsprechendenSafeArray-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 derWin32-SafeArray-APIs setzen den Typ des SafeArray bei der Erstellung des Arrays nicht korrekt. Das führt in derMarshal-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 derMarshal-Schicht muss umgangen werden. Letzteres kann riskant sein (aber auch die einzige Alternative, wenn Sie nicht dieMö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 einvariantes 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 vonTVarData extrahiert werden (ähnlich dem Fall, in dem der Datentyp varArray ist). Der Record bietet Zugriff auf den Rohzeigerauf das SafeArray, von dem sich die Daten extrahieren lassen. Wird anstelle eines OleVariant-Objekts jedoch eine Strukturverwendet, versucht die Marshal-Schicht nicht, den Datentyp des Arrays zu interpretieren. Das Extrahieren der Daten aus demSafeArray bedeutet aber einen zusätzlichen Aufwand.

Spezialfälle

Beim Erstellen einer Instanz empfiehlt es sich zwar, Activator.CreateInstance zu verwenden, doch besteht dadurch keinekomplette 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 einzigebekannte Lösung dieses Problems in der Verwendung von CoCreateInstanceEx.

Da keine Vererbung unterstützt wird, muss ein Nachkommen-Interface die Vorfahrmethoden deklarieren. Nachstehend sehenSie das Interface IAutoComplete2, das IAutoComplete erweitert.

[ComImport, GuidAttribute('EAC04BC0-3791-11d2-BB95-0060977B464C'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]IAutoComplete2 = interface(IAutoComplete)

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET Platform Invoke mit Delphi für .NET

55

1

// 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 ( see page 41)

Interfaces für virtuelle Bibliotheken ( see page 56)

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ürvirtuelle 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, dieSie aufrufen möchten, einen Prototyp deklarieren. Dies kann innerhalb einer vorhandenen .NET-Klasse erfolgen, Sie können fürdie Prototypen aber auch eine neue Klasse erstellen. Jede Prototyp-Deklaration für nicht verwalteten Code muss mit demAttribut DllImport gekennzeichnet werden.

Im DllImport-Attribut wird der Name der DLL angegeben, in der sich die nicht verwaltete Funktion befindet. Da der nichtverwaltete Prototyp während der Compilierung mit dem DllImport-Attribut gekennzeichnet ist, lassen sich DLLs und ihreexportierten, nicht verwalteten Funktionen nur schwer dynamisch bestimmen. Außerdem tritt ein Laufzeitfehler auf, wenn dienicht verwaltete Funktion nicht aus der im DllImport-Attribut bezeichneten DLL exportiert wurde. Um einen Laufzeitfehler zuverhindern, müssten Sie mit LoadLibrary die benötigte DLL laden und mit einem GetProcAddress-Aufruf sicherstellen, dassdie nicht verwaltete Funktion vorhanden ist. Selbst dann wäre aber ein direkter Aufruf der Funktion mit dem vonGetProcAddress zurückgegebenen Zeiger nicht möglich. Sie müssten den Zeiger stattdessen an eine Funktion in eineranderen, 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 denMethoden 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:

Interfaces für virtuelle Bibliotheken RAD Studio für .NET 1.2 Anwendungen mit nicht verwaltetem

56

1

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 unddeklarieren ein Interface in Delphi:

uses Borland.Vcl.Win32, ...;...typeIMyFunctions = interface['Your GUID'] // Nicht unbedingt erforderlich, aber bewährte Programmierpraxisfunction AFunction : Boolean;function AnotherFunction : Boolean;end;

Die Signatur der Supports-Funktion lautet:

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 einInterface für die DLL:

varMyFunctions : 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 programmeigenerParametertypen und ihrer Zuordnung zu .NET-Typen. Außerdem müssen alle nicht verwalteten Funktionen die Aufrufkonventionstdcall verwenden.

Siehe auch

COM Interop in verwalteten Anwendungen ( see page 41)

Platform Invoke mit Delphi verwenden ( see page 48)

1.2 Anwendungen mit nicht verwaltetem RAD Studio für .NET Interfaces für virtuelle Bibliotheken

57

1

1.3 Modellierung Themen

Name Beschreibung

Code-Visualisierung - Überblick ( 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.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. EntsprechendeInformationen 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 einesProjekts konzentriert sich auf UML-Packages, Datentypen wie Klassen und Interfaces sowie deren Attribute, Eigenschaften undOperationen. Ein Diagramm mit statischer Struktur zeigt ferner auch die Beziehungen an, die zwischen diesen Einheitenbestehen.

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 vonRAD Studio. Code-Visualisierung bezieht sich auf die Fähigkeit, einen bestimmten Quelltext auszuwählen und die Deklarationenin diesem Quelltext in die UML-Notation umzusetzen. Das resultierende "Live-Diagramm" enthält immer den aktuellen Status desQuelltexts. Es ist aber nicht möglich, über das Diagramm Code-Visualisierung Änderungen vorzunehmen. Im Gegensatz dazukann 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 unterschiedlicheHintergrundmechanisme zum Erstellen und Manipulieren des Diagramms. Die integrierte Oberfläche zum Entwerfen vonModellen 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 mitdem ECO-Framework und über die Verwendung der Experten und Modellierungstools mit ECO-fähigen Anwendungen findenSie 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 Quelltextdeklarierten Elemente die UML-Notation und die UML-Konventionen. Das Diagramm Code-Visualisierung zeigt die logischenBeziehungen - in der UML-Terminologie als statische Struktur bezeichnet - der Klassen, Interfaces und anderer in einem Projektdefinierten Typen an. Dazu werden bestimmte Quelltext-Konstrukte (zum Beispiel Klassendeklarationen undInterface-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 demDiagramm zur Code-Visualisierung. Das Fenster Modellansicht zeigt die logische Struktur eines Projekts in hierarchisch

Code-Visualisierung - Überblick RAD Studio für .NET 1.3 Modellierung

58

1

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 derDeklaration eines .NET-Namespace in Ihrem Quelltext (.NET-Namespaces können mehrere Quelldateien umfassen). DasUML-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 Generalisierungbezeichnet. Ermittelt die IDE eine Vererbungsbeziehung im Quelltext, erstellt sie im Fenster Modellansicht einenGeneralisierungs-Link im Knoten der untergeordneten Klasse. Im Diagramm Code-Visualisierung wird derGeneralisierungs-Link in der Standard-UML-Notation in Form einer einfachen Linie und einem ungefüllten Pfeil dargestellt, derauf die Superklasse zeigt.

Der UML-Begriff für eine Interface-Implementierung ist Realisierung. Ähnlich wie im Fall der Vererbung erstellt die IDE einenRealisierungs-Link, wenn sie eine Klassendeklaration ermittelt, die ein Interface implementiert. Der Realisierungs-Link wird imFenster Modellansicht in der Implementor-Klasse und im Diagramm in Form einer gepunkteten Linie mit einem ungefüllten Pfeildargestellt, der auf das Interface zeigt. Für jedes von einer Klasse implementierte Interface wird ein solcher Realisierungs-Linkerstellt.

Assoziationen

In UML ist eine Assoziation ein Navigationslink, der erzeugt wird, wenn eine Klasse eine Referenz auf eine andere Klasseenthält (zum Beispiel: ein Attribut oder eine Eigenschaft). Die Code-Visualisierung erstellt nur dann Assoziations-Links, wenneine Klasse ein Attribut oder eine Eigenschaft enthält, bei der es sich nicht um einen primitiven Datentyp handelt. Im Diagrammbesteht 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-Äquivalentenzugeordnet. 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 ( see page 154)

Verwenden des Übersichtsfensters ( see page 155)

1.3 Modellierung RAD Studio für .NET Code-Visualisierung - Überblick

59

1

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 Anwendungenerstellen und Lösungen für die Berichterstellung entwickeln, die von den Benutzern Ihrer Anwendung genutzt und angepasstwerden können.

Themen

Name Beschreibung

Rave Reports in RAD Studio verwenden ( 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. DieseIntegration ermöglicht es, einen Bericht mit dem Designer von Rave Reports zu erstellen oder ActiveX-Komponenten von RaveReports direkt im RAD Studio-Designer in Web Forms zu platzieren. Die Benutzer Ihrer Anwendung können ihre eigenenBerichte erstellen und anzeigen oder bereits vorhandene Berichte öffnen. Die Integration von Rave Reports in RAD Studio bietetfolgende 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. EinBericht wird als eigenständiges Rave Reports-Objekt gespeichert. Auf einen Bericht kann aus anderen Anwendungen Bezuggenommen 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 Reportsbietet auch die Möglichkeit, ein Berichtobjekt mit einer Datenquelle zu verknüpfen. Dadurch lässt sich ein Bericht dynamisch aufder 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 eineListe der verfügbaren ActiveX-Objekte. Ziehen Sie die gewünschten Objekte zur Entwurfszeit einfach in ein Windows Form oderWeb Form. Setzen Sie die erforderlichen Eigenschaften, und ändern Sie den Quelltext nach Bedarf im Quelltext-Editor. UnterUmständen ist es erforderlich, die .NET-Komponenten zurückzusetzen und die ActiveX-Komponenten im Dialogfeld Installierte.NET-Komponenten auszuwählen.

Siehe auch

Berichte entwerfen

Rave Reports in RAD Studio verwenden RAD Studio für .NET 1.4 Berichte für .NET-Anwendungen

60

1

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 undeinfach zu erstellen. VCL.NET bietet Ihnen die Möglichkeit, Ihre Delphi VCL-Anwendungen und -Komponenten Benutzern desMicrosoft .NET Framework zur Verfügung zu stellen. Mit RAD Studio können Sie auf alle Vorteile des .NET Framework zugreifenund sich gleichzeitig der benutzerfreundlichen und leistungsstarken komponentengesteuerten Entwicklungsumgebung vonDelphi bedienen.

Mit RAD Studio lassen sich folgende Anwendungstypen erstellen: Sie können VCL.NET-Formularanwendungen erstellen, diesich 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 daszugrunde liegende .NET Framework, die ASP.NET-Steuerelemente und RAD Studio-Codebehind-Logik verwenden. Diefolgenden 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 ( see page 63) 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).

Portieren von VCL-Anwendungen nach RAD Studio ( see page 64) 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)

VCL-Anwendungen portieren ( see page 75) 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

1.5 Anwendungen mit RAD Studio für .NET

61

1

Überblick zu VCL für .NET ( see page 77) 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)

Web-Service-Clients portieren ( see page 80) 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 kleinereQuelltextänderungen erforderlich werden, damit vorhandene Anwendungen korrekt arbeiten. Detaillierte Informationen zu deneinzelnen Ä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 zurUnterstü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 vonLongWord in IntPtr geändert. IntPtr ist ein Integer-Typ, der die Größe eines Zeigers auf der zugrunde liegenden Plattformangibt, die in .NET als eine Struktur implementiert ist. IntPtr unterstützt keine Zuweisungen, Vergleiche und arithmetischeOperationen, die häufig mit Handles in der VCL ausgeführt werden. Zur Bereitstellung der Abwärtskompatibilität wurde einRecord-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üssenfü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

Änderungen aufgrund der Unterstützung RAD Studio für .NET 1.5 Anwendungen mit

62

1

Windows API-Deklarationen

Es wurde eine Reihe von Deklarationen geändert, um einzelne ausführbare Dateien für x86- und x64-Plattformen korrekt zuunterstützen. In den meisten Fällen wurde der Typ eines Funktionsparameters oder Strukturfeldes geändert. Der Compiler stelltInformationen über einfache Korrekturmöglichkeiten von betroffenem Quelltext bereit. Zu den Änderungen, bei denen dieKorrektur weniger offensichtlich ist, zählen Callback-Funktionen und Modifikationen an Variant-Records. Eine Liste der fraglichenCallbacks 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 Funktionengeändert werden.

Modifizierte Variant-Records

Variant-Records sind in Delphi.NET als Records mit expliziten Feld-Layouts implementiert (im Gegensatz zu sequenziellenLayouts, 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 derQuelltext von diesen Änderungen nicht betroffen. Wenn Sie jedoch ein Feld als einen var-Parameter übergeben, der jetzt alseinen 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 einigeUnterschiede in der Funktionsweise von VCL-Anwendungen zu berücksichtigen, die durch die verwaltete Umgebung von .NETbedingt 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 vorhandenerDelphi-Code der neuen RAD Studio-Sprache und dem VCL-Framework zugeordnet wird. Das Dokument enthält Links zuspeziellen Themen in der Delphi-Sprachreferenz, in denen die neuen Leistungsmerkmale der Sprache detailliert beschriebensind.

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

1.5 Anwendungen mit RAD Studio für .NET Portieren von VCL-Anwendungen nach

63

1

Language Runtime) nicht als sicher. Aus diesem Grund wurden die Zeiger bei der Migration der VCL eliminiert und durchentsprechende Alternativen, wie dynamische Arrays, Indizes in Arrays oder Strings, Klassenreferenzen usw. ersetzt. Wenn Sieeine 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 durchdas .NET-Dienstprogramm PEVerify fehl. Code, der sich nicht auf Typsicherheit prüfen lässt, kann aber in einer sicherenUmgebung (etwa auf einem Webserver, einem SQL-Datenbankserver, einem Web-Browser-Client oder einem Computer mitstrengen Sicherheitsrichtlinien) nicht ausgeführt werden.

In der VCL wurden untypisierte Zeiger durch strenger typisierte Werte ersetzt. An Stellen, an denen üblicherweise untypisierteZeiger verwendet wurden, finden Sie nun TObject-Objekte. Beispielsweise sind die Elemente der Klasse TList jetzt vom TypTObject und nicht mehr vom Typ Pointer. Jeder Typ kann in ein Objekt konvertiert, und ein TObject kann in jeden anderen Typumgewandelt werden (sogar Werttypen wie Integer, Double usw.). Bei der Umwandlung von TObject in einen anderen Typ wirdein Laufzeitfehler generiert, wenn das Objekt keine Instanz des Typs ist, in den es konvertiert wird. Die Semantik für dieseUmwandlung entspricht also derjenigen des Operators as.

In einigen Fällen wurde der Typ Pointer durch einen präziseren Typ ersetzt. Beispielsweise gibt die Funktion ClassInfo fürTObject 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 undVerwendung von var-Parametern mit geeigneten Typen ersetzt. Untypisierte Zeiger, die in API-Aufrufen für nicht verwaltetemCode (wie in Aufrufen der Windows-API oder einer Datenzugriffsschicht wie der BDE) Anwendung finden, werden durchSystem.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ändertwerden. 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, umden 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 Speicherzuweisen 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;

Portieren von VCL-Anwendungen nach RAD Studio für .NET 1.5 Anwendungen mit

64

1

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 freigegebenwerden. 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 StudioDelegate-Deklarationen. Mit dem Operator @ können Sie einen Delegate für eine Methode oder eine globale Routinebereitstellen. Der entsprechende Code sieht in etwa so aus, wie Code zur Bereitstellung eines prozeduralen Zeigers auf derWin32-Plattform. Aus diesem Grund sind für die Portierung oft keine Änderungen erforderlich. Sie müssen aber beachten, dassSie 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 verwalteteCode wie im vorliegenden Fall die Prozedur nach der Rückkehr des API-Aufrufs aufruft, tritt eine Laufzeit-Exception auf, da derDelegate nicht mehr vorhanden ist. Sie können diese Situation umgehen, indem Sie den Delegate einer globalen Variablezuweisen und diese an die nicht verwaltete API übergeben.

Wird ein Prozedurzeiger über einen Aufruf der Windows-API-Funktion GetProcAddress bereitgestellt, wird er als IntPtrzurü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 derFunktion GetProcAddress lässt sich feststellen, ob die API verfügbar ist, damit bei der Verwendung von Platform Invoke keineLaufzeit-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

1.5 Anwendungen mit RAD Studio für .NET Portieren von VCL-Anwendungen nach

65

1

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 Codeswird keine Exception ausgelöst, wenn die DLL oder die Funktion nicht verfügbar ist. Der Funktionsaufruf wird nur bei der erstenAusführung des Codes aufgelöst.

String-Zeiger

Code mit dem Typ PChar wird in folgenden Situationen verwendet:

• 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

Portieren von VCL-Anwendungen nach RAD Studio für .NET 1.5 Anwendungen mit

66

1

einen Integer-Typ ersetzen, der als Index für den String fungiert. Dabei müssen Sie feststellen können, wann das Ende desStrings erreicht ist. Bei Verwendung des Typs PChar befindet sich am Ende des Strings ein Null-Zeichen, an dem der Code dasString-Ende erkennt. Da Sie nun mit String und Index arbeiten, ist kein Null-Zeichen vorhanden. Sie müssen deshalb das Endedes Strings anhand der String-Länge feststellen. Vor dem Lesen eines Zeichens muss sichergestellt werden, dass der Indexnicht 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 eindynamisches Array von Bytes (TBytes) ersetzt. Wenn ein Austausch gegen einen IntPtr-Typ durchgeführt wurde, tretendieselben Probleme wie beim Ersetzen eines untypisierten Zeigers auf. Bei einem Austausch gegen TBytes müssen Sie unterUmständen PChar-Werte durch einen Index im Byte-Array ersetzen, wenn in Byte-Blöcken navigiert werden soll. Dies ähnelt inetwa dem Ersetzen von PChar durch Integerwerte zum Navigieren in Strings. Der Unterschied besteht jedoch darin, dassIndizes 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 aufder .NET-Plattform aber zu einem ganz anderen Ergebnis. Auf der .NET-Plattform erzeugt der Compiler einen Aufruf der mitChar ü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 sieursprünglich gezeigt haben. Wenn der Zeigertyp der Parameter für einen Prozeduraufruf war, wird er in einen var-Parameterumgewandelt, sodass immer noch eine Referenz anstatt einer Kopie des Arguments übergeben wird. In bestimmten Fällen ist essinnvoll, einen Werttyp in einen Klassentyp zu konvertieren, damit der Code eine Objektreferenz anstelle eines typisiertenZeigers ü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 KlasseString 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 UnicodeWide-String und nicht kein AnsiString ist. Dies vereinfacht den Code für bestimmte Sprachen, da Sie sich nicht mehr umMultibyte-Zeichensätze kümmern müssen. Dennoch muss der Code bei der Übernahme auf die Char-Größe überprüft werden,

1.5 Anwendungen mit RAD Studio für .NET Portieren von VCL-Anwendungen nach

67

1

da es sich nun nicht mehr um Ein-Byte-Zeichen sondern um Zwei-Byte-Zeichen handelt. Sie können weiterhin Strings mitEin-Byte-Zeichen verwenden, müssen diese aber nun als AnsiString anstatt als string deklarieren. Der Compiler führt eineKonvertierung zwischen diesen Strings durch, wenn Sie eine explizite Typumwandlung verwenden oder wenn Sie die Stringsimplizit 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 dieentsprechende Wide String-Version zu konvertieren. Die AnsiXXX-Routinen besitzen Varianten, die den Wide-Versionenentsprechen, und die überladenen Routinen akzeptieren Wide Strings als Parameter. Aus diesem Grund muss keine impliziteUmwandlung 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. Deshalbsollten Sie diese Umwandlung vermeiden.

String-Operationen

Gemäß der CLR-Werttyp-Semantik geben Operationen mit Strings eine Kopie des Strings zurück, anstatt den vorhandenenString zu ändern. Aufgrund des Mehraufwands für das Kopieren kann Code etwas von seiner Effizienz verlieren. Sehen Sie sichdas 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 Änderungerforderlich. In RAD Studio besteht das Ergebnis jeder Ersetzung in einer Kopie des gesamten Strings. Aus diesem Grundsollten Sie bei der Änderung von String-Werten eine StringBuilder-Instanz verwenden. StringBuilder weist nicht verwaltetenSpeicher zu und verarbeitet den String erwartungsgemäß. Nach Abschluss des Vorgangs können Sie das Ergebnis durch denAufruf 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 nichtinitialisierten 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 anderenString-Operationen wird ein nicht initialisierter String nicht automatisch als leerer String behandelt (darin besteht ein Unterschiedzu Code, der auf der Win32-Plattform compiliert wurde). Dies kann zu einer Laufzeit-Exception aufgrund eines leeren Objektsführen.

Typumwandlungen

Anders als bei Delphi für Win32 besteht in RAD Studio kein Unterschied zwischen einer expliziten Typumwandlung und demOperator as. In beiden Fällen ist die Umwandlung nur dann erfolgreich, wenn die zu konvertierende Variable eine Instanz desTyps ist, in den sie umgewandelt werden soll. Dies bedeutet, dass Code, der vorher problemlos ausgeführt wurde (durchUmwandlungen 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ürWin32 enthielt die Unit Messages verschiedene Record-Typen, mit denen die Parameter einer Windows-Botschaft repräsentiertwerden. Diese Records hatten alle dieselbe Größe, und ihre Felder waren für das Extrahieren der Informationen aus der

Portieren von VCL-Anwendungen nach RAD Studio für .NET 1.5 Anwendungen mit

68

1

Windows-Botschaft ausgelegt. So konnten Sie Botschaftsparameter, die beispielsweise als TMessage-Typ vorlagen, in den TypTWMMouse konvertieren, und anschließend die gewünschten Informationen extrahieren. Dieses Vorgehen funktionierteproblemlos, da die beiden Typen dieselbe Größe hatten und eine explizite Umwandlung keine Exception erzeugte, wenn der Typmit der Umwandlung wieder rückinterpretiert wurde. In .NET ist eine derartige Rückinterpretation einer Umwandlung nichterlaubt, 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 denTMessage-Wert in einen anderen Typ wie TWMMouse umzuwandeln, müssen Sie den anderen Typ instantiieren und denOriginaltyp 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;

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 neueFunktion 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 ineiner anderen Unit deklariert ist. In Delphi für Win32 können Sie einen Nachkommen der Klasse deklarieren, auf deren ElementeSie zugreifen möchten:

type TPeekAtWinControl = class(TWinControl);

Dann können Sie durch Umwandlung eines beliebigen TWinControl-Nachkommens in TPeekAtWinControl auf dieProtected-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 keineInstanz 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 Umwandlungzu. Der Compiler hat aber keine Informationen darüber, in welche Assemblierung eine Unit eingebunden wird, wenn er denQuelltext 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 diefraglichen Protected-Elemente ermöglichen. Einige Klassen der VCL (TControl, TWinControl, TCustomForm) verwenden nundiese 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 Sieim Thema Speicherverwaltung auf der .NET-Plattform.

Aufgrund der Unterschiede bei der Instantiierung und Freigabe von Objekten steht für RAD Studio-Klassen keine

1.5 Anwendungen mit RAD Studio für .NET Portieren von VCL-Anwendungen nach

69

1

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 vorhandensind, hat Auswirkungen auf Formulare und Datenmodule, die darauf angewiesen sind, dass OldCreateOrder den Wert Falsehat. Die Ereignisse OnCreate und OnDestroy reagieren nun so, als wäre die Eigenschaft OldCreateOrder auf den WertTrue 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 Aufruftatsä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

Die VCL ist vom Grundsatz her für eine Zusammenarbeit mit der Windows-API konzipiert. Dieses Zusammenspiel ist ähnlichgeregelt wie bei Systems.Windows.Forms: Die VCL ist eine verwaltete API, die Aufrufe an die Windows-API tätigt und dabeiein 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 dasWindows-Betriebssystem nicht unterstützen (Compact Framework, Mono usw.). Units, die das Windows-Betriebssystembenötigen, sind mit der Direktive platform gekennzeichnet. In Units, die nicht mit der Direktive platform markiert sind, sind dieeinzelnen 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 Windowsbasieren, in die Unit WinUtils verlagert. Zusätzlich wurden einige Klassen so geändert, dass sie eher auf CLR als aufWindows basieren.

TObject, Exception, TPersistent und TComponent sind Klassen zugeordnet, die in .NET Framework implementiert sind. Aufdiese Weise können sie relativ problemlos in andere .NET-Anwendungen integriert werden. Da die entsprechendenCLR-Klassen (System.Object, System.Exception, System.Marshal und System.Component) nicht alle von der VCL benötigtenMethoden enthalten, werden die fehlenden Methoden über Delphi-Deklarationen von unterstützenden Klassen zur Verfügunggestellt. 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 vonTComponentHelper und nicht mehr ein Feld von TComponent. Das bedeutet, dass Sie die Methoden Include und Exclude fürFComponentState nicht verwenden können, da diese bei Übergabe einer Eigenschaft mit einer Kopie des Eigenschaftswertsarbeiten, 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 keinOrdinaltyp 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 Parametertypengeä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 dieParameterwerte durch Marshaling in nicht verwalteten Speicher eingefügt werden, in dem Windows sie verarbeiten kann. DieErgebnisse werden danach mittels Marshaling wieder in verwalteten Speicher transferiert. In den meisten Fällen wird das

Portieren von VCL-Anwendungen nach RAD Studio für .NET 1.5 Anwendungen mit

70

1

Marshaling automatisch durchgeführt, basierend auf den Attributen, die den API- oder Typdeklarationen hinzugefügt wurden. Esgibt jedoch auch Situationen, in denen ein explizites Marshaling erforderlich ist. Dies betrifft vor allem den Umgang mit Zeigernauf eine Struktur. Verwenden Sie zu diesem Marshaling die Klasse System.Marshal. Eine weitere Klasse, die beim Marshalingvon Daten in und aus nicht verwaltetem Speicher sehr hilfreich ist, ist BitConverter. Beispielsweise enthält die Klasse Marshalkeine Methode, mit der ein Double-Wert gelesen oder geschrieben werden kann. Dafür ist aber das Lesen und Schreiben vonInt64-Werten möglich, die dieselbe Größe haben. Mit der Klasse BitConverter können letztere in und aus Double-Wertenumgewandelt 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 werdenmuss. 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 vonBotschaftsbehandlungsroutinen. Deklaration und Verwendung von Botschaftsbehandlungsroutinen sind größtenteils identisch,die Botschafts-Cracker-Typen wurden aber von Records in Klassen geändert. Typumwandlungen zwischenBotschafts-Cracker-Typen sind nun nicht mehr möglich. Die meisten Änderungen wurden bereits im Abschnitt überTypumwandlungen 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:

1.5 Anwendungen mit RAD Studio für .NET Portieren von VCL-Anwendungen nach

71

1

Botschaftstyp Änderung

CM_FOCUSCHANGED Ersetzt durch eine Protected-Methode (FocusChanged) für TWinControl.Botschaftsbehandlungsroutinen werden durch eine Variante der Methode FocusChangedersetzt. Anstatt Botschaften zu senden, wird FocusChanged unter Verwendung desIWinControl-Interface aufgerufen.

CM_MOUSEENTER Die Bedeutung von LPARAM hat sich geändert. Früher übergab LPARAM eine Objektreferenzauf das untergeordnete Steuerelement, in das die Maus bewegt wurde. Nun übergibt LPARAMden 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 Objektreferenzauf das untergeordnete Steuerelement, aus dem die Maus bewegt wurde. Nun übergibtLPARAM den Index des untergeordneten Steuerelements in der Liste FWinControls oderFControls.

CM_BUTTONPRESSED Ersetzt durch eine Protected-Methode (ButtonPressed) für TSpeedButton. Diese Botschaftwurde nur von TSpeedButton verwendet. Die Botschaftsbehandlungsroutine CMButtonPressedwurde durch ButtonPressed ersetzt, die direkt aufgerufen wird.

CM_WINDOWHOOK Veraltet. TApplication.HookMainWindow und TApplication.UnhookMainWindow sindpublic-Methoden, die direkt aufgerufen werden können.

CM_CONTROLLISTCHANGE Ersetzt durch eine Protected-Methode (ControlListChange) für TWinControl.Botschaftsbehandlungsroutinen werden durch eine Variante der Methode ControlListChangeersetzt.

CM_GETDATALINK Ersetzt durch eine Protected-Methode (GetDataLink) für verschiedene datensensitiveSteuerelemente. Der Aufruf erfolgt über das neue Interface IDataControl. Bei der Erstellungeigener datensensitiver Steuerelemente (die nicht von einer in DBCtrls vorhandenen Klasseabgeleitet sind) muss IDataControl implementiert werden, wenn das Steuerelement in einerDBCGrid-Klasse eingesetzt werden soll.

CM_CONTROLCHANGE Ersetzt durch eine Protected-Methode (GetDataLink) für verschiedene datensensitiveSteuerelemente. Der Aufruf erfolgt über das neue Interface IDataControl. Bei der Erstellungeigener datensensitiver Steuerelemente (die nicht von einer in DBCtrls vorhandenen Klasseabgeleitet sind) muss IDataControl implementiert werden, wenn das Steuerelement in einerDBCGrid-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 UndockClientersetzt.

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 direktaufgerufen.

CM_ACTIONEXECUTE Veraltet. TApplication.DispatchAction ist nun public und wird anstatt über eine Botschaft direktaufgerufen.

Änderungen am Threading-Modell

Damit Windows-API-Aufrufe auf bestimmten Betriebssystemen ordnungsgemäß funktionieren, muss manchmal das SingleThreaded Apartment-Modell (STA) verwendet werden. Beispielsweise funktionieren in einigen Versionen von Windows 98 dieDialogfelder zum Öffnen und Speichern nur dann, wenn die RAD Studio-Anwendung auf dem Single Threaded

Portieren von VCL-Anwendungen nach RAD Studio für .NET 1.5 Anwendungen mit

72

1

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, istdie Einrichtung sehr einfach: Fügen Sie das Attribut [STAThread] in die Zeile ein, die unmittelbar vor der Anweisung begin inder dpr-Datei steht. Bei der Erstellung einer DLL kann das Threading-Modell nicht auf diese Weise aktiviert werden. Sie könnenaber die Prozedur CheckThreadingModel in der Unit SysUtils aufrufen, um eine Exception auszulösen, wenn die Anwendungeine 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 vonihm 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 demRecord-Typ zu, den COM für Varianten verwendet. In RAD Studio ist dieser Typ allgemeinerer Natur. Jedes Objekt (in RADStudio ist dies jeder Typ) kann nach entsprechender Bearbeitung als Variante agieren. So könnten Sie in RAD Studio einerVariante beispielsweise ein Steuerelement zuweisen.

Der Delphi-Typ Variant ist eine Sprachnotation, die nicht mit CLS kompatibel ist. Wenn Sie in RAD Studio-Code Variantenverwenden, die nach außen sichtbar sind, werden diese nur als System.Object zugeordnet. Aus diesem Grund steht für Code inanderen 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 Variantenjedoch nicht mehr auf dem Typ TVarRec basieren, muss Code neu geschrieben werden, der mittels einer Win32-Variante aufden zugrunde liegenden TVarRec-Record zugreift.

Anmerkung: Fast alle Funktionen der Unit Variants sind in RAD Studio implementiert. Wenn Sie den VarType einer Varianteabrufen 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 RADStudio-Varianten deshalb zusammen mit COM verwenden. Wenn Sie RAD Studio-Varianten mit COM nutzen, sollten Sie derVariante 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. InRAD Studio ist OleVariant einfach ein Synonym für Variante. Es wird nicht dafür gesorgt, dass der Variantenwert einCOM-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 Sienichts unternehmen, um eine benutzerdefinierte Variante zu erstellen – jede Klasse, die Sie definieren, ist bereits einVariant-Typ. Damit benutzerdefinierte Varianten auch erwartungsgemäß funktionieren, sollten Sie folgende CLR-Interfacesimplementieren: IComparable, IConvertible und ICloneable. Der Delphi-Compiler kann mit Hilfe dieser InterfacesVariant-Operationen implementieren. Dennoch lassen sich andere Variant-Typen (auch bei Verwendung dieser Interfaces) nurmit 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 werdensoll) 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 erstenMigration einer Anwendung die Deklaration und die Verwendung der Ressourcen nicht ändern müssen (der Code funktioniert

1.5 Anwendungen mit RAD Studio für .NET Portieren von VCL-Anwendungen nach

73

1

weiterhin). In einigen Fällen hätten Sie Änderungen aber wahrscheinlich sowieso vorgenommen. Wenn Sie beispielsweisebenutzerdefinierte Cursor verwenden, ist es einfacher, mit der Funktion LoadCursor der Windows-API den Cursor zuTScreen.Cursors hinzuzufügen, als die Klasse Cursor zu verwenden und dann ein Handle auf den zugrunde liegenden Cursorabzurufen. Für Ressourcen, die nicht Windows-spezifisch sind (wie Bitmaps, Symbole und Strings) werden Sie möglicherweisedoch auf eine .NET-Ressourcendatei zurückgreifen.

Ressourcenstrings

Wenn Sie das Schlüsselwort resourcestring verwenden, erstellt RAD Studio die Stringressourcen als .NET- und nicht alsWindows-Ressourcen. Die Erstellung erfolgt automatisch. Sie dürfen nur nicht vergessen, dass der Typ PResStringRec nichtmehr verwendet werden kann.

Bitmaps

Mit Hilfe der Klasse ResourceWriter können Sie Bitmaps in .NET-Ressourcen umwandeln. Die dabei angelegteresources-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 neueVarianten für die Arbeit mit .NET-Ressourcen (die alte Version von LoadFromResourceName und MethodeLoadFromResourceID werden nicht mehr unterstützt). Wenn sich Ihre Bitmaps beispielsweise in einer resources-Dateinamens 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 Methodenaufrufmit dieser Zeile enthält. Wenn die Ressourcen in eine andere Assemblierung compiliert wurden, können Sie entwederSystem.Assembly.GetAssembly verwenden und dabei einen Typ angeben, der in der entsprechenden Assemblierung definiertist, 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 Codeverursacht 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 ( see page 80)

Platform Invoke mit Delphi für .NET verwenden ( 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. Nebengrundlegenden 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:

VCL-Anwendungen portieren RAD Studio für .NET 1.5 Anwendungen mit

74

1

• 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 beachtetwerden. Im .NET Framework gelten Zeiger beispielsweise als unsicher, weshalb Anwendungen, die Zeiger verwenden, nicht indie Kategorie verwalteter Code fallen. Um in diesem Punkt eine Kompatibilität zum .NET Framework zu erreichen, müssen SieIhre Anwendungen anpassen und die Verwendung von Zeigern, des Typs pChar und anderer sprachspezifischer Elementevermeiden oder umgehen.

Darüber hinaus gibt es bezüglich der Win32-API einige kritische Punkte bei der Verwendung von Crackern, der Migration vonChar-Datentypen und anderem.

Packages umbenennen

Beim Portieren eines Delphi 7-Package nach RAD Studio müssen die Packages in der Liste "Erfordert" umbenannt werden. Inder 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 NETVCL-Komponenten installiert.

Neue Funktionen der Programmiersprache

In die Programmiersprache Delphi sind einige neue Funktionen eingefügt worden, um die Programmierkonzepte und -funktionender .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

1.5 Anwendungen mit RAD Studio für .NET VCL-Anwendungen portieren

75

1

• .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änderteArchitektur. Ihre vorhandenen Web-Service-Client-Anwendungen müssen deshalb geändert werden, damit sie im .NETFramework ausführbar sind. RAD Studio unterstützt die RIO-Komponenten nicht, sondern verwendet für die Verwaltung vonWeb-Service-Client-Anwendungen einen klareren Ansatz. Sie müssen die RIO-Komponenten entfernen und die Zugriffsmethodeauf WSDL-Dokumente ändern.

Siehe auch

Überblick zu VCL.NET ( see page 77)

Sprachspezifische bei der Portierung von VCL-Anwendungen nach Delphi für .NET ( see page 64)

Platform Invoke mit Delphi 2005 verwenden ( see page 48)

Web-Services nach Delphi für .NET portieren ( 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 Hilfevon RAD Studio und VCL für .NET können Benutzer beim Schreiben neuer Anwendungen die Leistungsstärke von Delphiweiterhin nutzen und Win32-Anwendungen in das .NET Framework migrieren.

Diese Technologien erleichtern Delphi-Entwicklern den Wechsel zu .NET und vereinfachen die Portierung vorhandenerDelphi-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- undSOAP-/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 dieVerwendung .NET-konformer Sprachen konzipiert. In vielen Fällen kann daher Delphi-Quelltext, der auf Klassen und Funktionender 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. VCLfür .NET ist eine Untermenge der VCL und unterstützt deshalb viele der vorhandenen VCL-Klassen. Quelltext mit direktenAufrufen der Win32-API muss jedoch geändert werden. Für Win32-VCL-Steuerelemente von Fremdherstellern müssenentsprechende .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

Überblick zu VCL für .NET RAD Studio für .NET 1.5 Anwendungen mit

76

1

Architektur von VCL für .NET

VCL ist ein Satz visueller Komponenten für die Erstellung von Windows-Anwendungen in Delphi. VCL für .NET enthältidentische Komponenten, die jedoch für die Verwendung im .NET Framework aktualisiert wurden. VCL für .NET und das .NETFramework 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 zwarunabhängig von der Programmiersprache, die für die Implementierung verwendet wird. VCL für .NET und das .NET Frameworkstehen hinsichtlich ihrer Funktionalität auf derselben Stufe. Ebenso wie das .NET Framework stellt auch VCL für .NETBibliotheken mit Komponenten, Steuerelementen, Klassen und Low-Level-Funktionen für die Erstellung von Web Forms- undKonsolenanwendungen 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 kompletteAnwendungen 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- undKonsolenanwendungen 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 unterWindows 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 visuellenErstellung von Anwendungen, um den manuellen Codier-Aufwand möglichst gering zu halten.

1.5 Anwendungen mit RAD Studio für .NET Überblick zu VCL für .NET

77

1

Visuelle Komponenten

RAD Studio bietet zahlreiche visuelle Komponenten (Steuerelemente), die Sie bei der Erstellung Ihrer Anwendungen nutzenkö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 Steuerelementewerden 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 undanderen visuellen Komponenten. Hierzu gehören physische Definitionen (wie Größe, Höhe und andere Eigenschaften) sowieKonstruktoren und Destruktoren für diese Komponenten. Der Quelltext-Editor von RAD Studio enthält jedoch keineCode-Darstellung der visuellen Komponenten.

RAD Studio ist ein ressourcenbezogenes System, bei dem die Codebehind-Darstellung primär mittelsEreignisbehandlungsroutinen erfolgt, in die Sie die Programmlogik integrieren. Visuelle Komponenten werden in Textdateiendeklariert und definiert, die die Namenserweiterung .dfm (Delphi-Formulare) bzw. .nfm (RAD Studio-Formulare) haben. DieDateien mit der Erweiterung .nfm werden von RAD Studio angelegt, wenn Sie Ihre VCL-Formulare im Formular-Designererstellen, und in der Ressourcenliste der Projektverwaltung des Projekts angezeigt.

Nicht-visuelle Komponenten

Nicht-visuelle Komponenten werden zur Implementierung von Funktionen verwendet, deren visuelle Darstellung nichterforderlich ist. So können Sie zum Beispiel den Zugriff auf Datenbanken und Datenmengen mittels nicht-visuellerBDP.NET-Komponenten implementieren. Diese Komponenten, die zur Laufzeit nicht sichtbar sind, werden zur Entwurfszeitdurch Komponenten der Tool-Palette dargestellt. VCL für .NET stellt eine Vielzahl nicht-visueller Komponenten für denDatenzugriff, für Serverfunktionen usw. bereit.

Borland.VCL-Namespace

VCL für .NET-Klassen sind unter dem Namespace Borland.Vcl zu finden, datenbankbezogene Klassen unter demNamespace 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 Unitsverlagert. Es wurden aber aussagekräftige Bezeichnungen für die Namespaces verwendet, damit Sie die gewünschteFunktionalität problemlos auffinden können.

Das Unterverzeichnis c:\Programme\CodeGear\RAD Studio\5.0\Source enthält Quelltextdateien für alle RADStudio-Objekte.

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. Inden meisten Fällen ist die Migration einfacher als die komplette Neuerstellung der Anwendung. Da RAD Studio die Vorteile derstrukturellen Elemente das .NET Framework nutzt, müssen Sie einige Aufgaben manuell durchführen, um eine lauffähigeAnwendung zu erhalten. Beispielsweise unterstützt das .NET Framework in sicherem Code keine Zeiger. Folglich müssenInstanzen von pChar oder Zeigervariablen in einen entsprechenden .NET-Typ konvertiert werden. Viele Delphi-Objekte wurdenbereits an diese Typrestriktionen angepasst. Ihr Code könnte aber noch Referenzen auf Zeiger oder nicht unterstützte Typenenthalten. 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 derSystem.Windows.Forms-Assemblierung, in ActiveX-Wrapper einfügen und diese mit VCL für .NET-Anwendungenweitergeben. Nach dem Import der gewünschten .NET-Komponenten können Sie der Tool-Palette eine Package-Dateihinzufü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.

Überblick zu VCL für .NET RAD Studio für .NET 1.5 Anwendungen mit

78

1

Siehe auch

Sprachreferenz

VCL-Anwendungen portieren ( see page 75)

Daten-Provider für .NET ( 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.5.5 Web-Service-Clients portieren

RAD Studio-Web-Services verwenden das .NET Framework als Service-Schicht. Web-Service-Client-Anwendungen, die mitDelphi 7 oder einer früheren Version erstellt wurden, müssen folglich geändert werden, wenn sie das .NET Frameworkverwenden 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 auftretenkönnen.

Web-Service-Server-Interoperabilität

Die SOAP-Implementierungen von Delphi 7 und .NET weisen geringfügige Unterschiede auf. Auf dem Server müssenverschiedene Optionen (Eigenschaft TSOAPDomConv.Options) eingestellt werden, damit mehrere Clients erfolgreich ausgeführtwerden können. Folgende Optionen müssen eingestellt sein, damit beide Client-Anwendungen die SOAP-Packages verarbeitenund 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

1.5 Anwendungen mit RAD Studio für .NET Web-Service-Clients portieren

79

1

ESOAPHTTPException System.Net.WebException

Faultcodes

In Delphi 7 gibt die Eigenschaft ERemotableException.FaultCode vollständige Namen, wie zum BeispielSOAP-ENV:Client.Login zurück. Sie müssen den Code dann mit der Funktion ExtractLocalName extrahieren. Die .NETFramework-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 SieAnfragen und Antworten überwachen können. Eine ähnliche Funktionalität lässt sich mit der Klasse SoapExtension des .NETFramework implementieren. Im Folgenden sehen Sie ein Fragment eines Beispiels, das diese Funktionalität implementiert. Dasvollständige Beispiel finden Sie in der CodeCentral von Borland. Der Link hierzu ist in der Link-Liste am Ende dieses Themasenthalten.

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;

Web-Service-Clients portieren RAD Studio für .NET 1.5 Anwendungen mit

80

1

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 demMethodenaufruf freigegeben. Im .NET Framework besteht die Header-Klasse nach dem Aufruf einer Methode so lange fort, bismit 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

1.5 Anwendungen mit RAD Studio für .NET Web-Service-Clients portieren

81

1

1.6 Webanwendungen mit ASP.NET entwickeln ASP.NET ist das Programmiermodell für das Erstellen von Webanwendungen auf der Basis des .NET Framework. DieserAbschnitt erläutert den konzeptionellen Hintergrund für das Erstellen von ASP.NET-Anwendungen in RAD Studio. Neben derUnterstützung der Datenzugriffskomponenten im .NET Framework enthält RAD Studio DB Web Controls. Die DB Web Controlsverwenden die .NET Framework-Provider und die Borland-Datenprovider für .NET (BDP.NET) um die Entwicklung vonWebanwendungen zu beschleunigen.

Themen

Name Beschreibung

Überblick zu ASP.NET ( 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

RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

82

1

Überblick zur Navigations-API der DB Web Controls ( see page 92) 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)

Überblick zum DB Web Control-Experten ( see page 93) 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

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET

83

1

Deployment von ASP.NET-Anwendungen ( see page 102) 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) 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, wieASP.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 mitder Codebehind-Logik und die compilierten DLL-Dateien. Web Forms-Seiten enthalten HTML-Elemente, Text und ServerControls. Codebehind-Dateien enthalten die Anwendungslogik für die Forms-Seite. Compilierte DLL-Dateien übergeben

Überblick zu ASP.NET RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

84

1

dynamisches HTML an den Webserver.

CodeGear bietet verschiedene Tools, um die Entwicklung unter ASP.NET zu vereinfachen. Wenn Sie mit dem Konzept desRapid 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 sichWebanwendungen 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 einerAuszeichnungsdatei (.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 Laufzeitwird 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 imQuelltext deklariert. Der programmseitige Zugriff auf Server Controls erfolgt über Eigenschaften, Methoden undEreignisbehandlungsroutinen. Server Controls werden auf dem Webserver ausgeführt und sorgen für das Rendern derHTML-Elemente, die an den Client gesendet werden.

HTML-Elemente sind statische, client-seitige Controls. Standardmäßig ist kein programmseitiger Zugriff auf HTML-Elementemö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 überdie im .NET-Framework enthaltenen Datenkomponenten, die AdoDbx Client-, die Blackfish SQL-,oder die Borland DataProvider- (BDP.NET) Komponenten verbunden werden.

Web-Services

Web-Services stellen Anwendungskomponenten für zahlreiche verteilte Systeme zur Verfügung, deren Messaging auf XMLbasiert. Web-Services können sehr einfach sein, z.B. eine XML-Botschaft zur Aktualisierung von Werten in einer externenAnwendung, aber auch sehr komplex und als integraler Bestandteil einer anspruchsvollen ASP.NET- oderADO.NET-Anwendung fungieren. Web-Services und ASP.NET verwenden dieselbe allgemeine .NET-Infrastruktur, wodurch eineproblemlose 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) undCassini. 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.

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET Überblick zu ASP.NET

85

1

HTML- und CSS-Dateien bearbeiten

Sie können bei der Bearbeitung von HTML- und CSS-Dateien viele Leistungsmerkmale des Quelltext-Editors nutzen. DieCode-Vervollständigung (STRG+LEERTASTE) und die Syntaxhervorhebung sind sowohl für HTML- als auch für CSS-Dateienverfügbar. Während der Bearbeitung einer HTML-Datei können Sie die Fehlermarkierung aktivieren. Ungültiger HTML-Code wirddann mit einer roten Wellenlinie unterstrichen. Wenn Sie den Mauszeiger auf den betreffenden Code bewegen, wird diewahrscheinliche Fehlerursache in einem Hinweisfenster angezeigt.

Wenn Sie eine HTML-Seite anzeigen, rückt die interne HTML-Formatierfunktion den HTML-Code ein, damit er einfacher zulesen ist. Sie können stattdessen auch das Standardformatierungs-Tool HTML Tidy von www.w3c.org verwenden. Wählen SieBearbeiten 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, dieHTML Tidy normalerweise als ungültig kennzeichnet, z.B. Tags mit dem Präfix asp:. Um auf die Optionen von HTML Tidyzuzugreifen, wählen Sie Tools Optionen HTML Tidy-Optionen.

Die Strukturansicht zeigt die HTML-Tags der aktiven HTML-Seite in einem hierarchisch gegliederten Baumdiagramm. Sieerleichtert die Navigation in großen Dateien. Wenn Sie auf einen Knoten im Baumdiagramm doppelklicken, wird der Cursor aufdas 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. ImGitter-Layout sind die Controls entsprechend ihrer absoluten Position angeordnet und können durch Ziehen mit der Maus andersplatziert werden. Zur einfacheren Positionierung der Controls kann ein Gitter angezeigt werden. Wenn Sie ein Control aus derTool-Palette in das Web Form ziehen bzw. zuerst in der Tool-Palette auf das Control und dann in das Web Form klicken, wirddas 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 Pfeiltastengeändert werden. Wenn Sie in der Tool-Palette auf ein Control doppelklicken, wird es entsprechend des Fluss-Layouts in dasWeb Form eingefügt.

Um das Layout eines bestimmten Control zu ändern, verwenden Sie die Schaltfläche Absolutes Layout in der SymbolleisteHTML-Design am oberen Rand des Designers.

Um das Layout für neue Dateien, die mit RAD Studio erstellt werden, dauerhaft zu ändern, bearbeiten Sie die Template-Dateipage.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 beinhalteneine readme-Datei mit einer Beschreibung der Anwendung und einer Liste der Anforderungen. Treffen Sie folgendeVorkehrungen, 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 ( see page 186)

DB Web Controls für ASP.NET ( see page 88)

Deployment von ASP.NET-Anwendungen ( see page 102)

Überblick zu ASP.NET RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

86

1

Virtuelles Verzeichnis für Demo-Anwendungen erstellen ( 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 dieStandard-Websteuerelemente verwenden.

CodeGear DB Web Controls vereinfachen die Datenbankentwicklung mit BDP.NET- und .NETFramework-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 leistungsstarkenMechanismus für das Abrufen von Daten bereitstellen. Die Entwicklung von ASP.NET-Anwendungen wird dadurch wesentlichbeschleunigt. Die meisten DB Web Controls sind GUI-Web-Steuerelemente, die in ASP.NET-Anwendungen häufig benötigtwerden. Ein Beispiel hierfür ist die Komponente DBWebDataSource, die als datensensitives Verbindungsglied zwischen denvisuellen Steuerelementen und der zugrunde liegenden Datenquelle fungiert. DBWebDataSource übermittelt die von der Quelleabgerufenen 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 befindlicheDatenmenge, die entweder von einem ADO.NET-Adapter (wie SQLDataAdapter) oder von einem BDP.NET-Adapter (wieBDPDataAdapter) generiert wird. Über die DBWebDataSource-Komponente kann auch eine Verbindung zu anderenDatenquellen 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 liegendenDatenquelle (z.B. einer Datenbank) anzeigen, müssen Sie die Bindung zwischen der Datenquelle und den Steuerelementenmanuell konfigurieren. Für jedes Steuerelement, das mit der Datenquelle verbunden wird, müssen Syntax und Parameterbereitgestellt werden.

Die Verwendung von DB Web Controls hat den Vorteil, dass nur eine DBWebDataSource-Komponente mit der Datenquelleverknüpft werden muss. Danach werden alle DB Web Controls auf der ASP.NET-Seite, die die DBWebDataSource-Komponentereferenzieren, 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

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET Überblick zu CodeGear DB Web Controls

87

1

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.

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 Controlsverwenden. 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 Namespaceund 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.

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 alsNavigationssteuerelemente 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.

Überblick zu CodeGear DB Web Controls RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

88

1

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 gewohntdurchfü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 ( see page 199)

ASP.NET-Anwendungen erstellen ( see page 186)

XML-Dateien und DB Web Controls verwenden ( see page 99)

Mit DataView-Objekten arbeiten ( see page 101)

WebDataLink-Interfaces ( 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 dieStandard-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 derDatenmenge an den Server zu übergeben. Die Aktualisierungsmethode des Haupt-Datenadapters (in BDP.NET dieAutoUpdate-Ereignisbehandlungsroutine) muss vor derjenigen des Detail-Datenadapters aufgerufen werden. Andernfalls würdedas Einfügen von Detailzeilen fehlschlagen, solange die Hauptzeile noch nicht eingefügt ist. Wird die Hauptzeile vor derDetailzeile 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, wieder Server Zeilen in Haupt-/Detail-Anwendungen löscht. Die Eigenschaft CascadingDeletes kann auf die folgenden Wertegesetzt 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.

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET DB Web Controls in

89

1

NoMasterDelete

Diese Einstellung verhindert das Löschen einer Hauptzeile, die Detailzeilen enthält. Verwenden Sie diese Einstellung, wenn derServer eine Fremdschlüsselbeschränkung zwischen Haupt- und Detailtabellen erzwingt, aber keine mehrstufigenLö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.

ServerCascadeDelete

Bei dieser Einstellung kann die Hauptzeile gelöscht werden. Verwenden Sie diesen Wert, wenn der Server mehrstufigeLöschvorgänge automatisch verwaltet. Wenn eine Hauptzeile gelöscht wird, werden die Detailzeilen automatisch aus der Ansichtentfernt. Vor dem Eintragen der Änderung kann die Löschung der übergeordneten Zeile rückgängig gemacht werden. DieDetailzeilen 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 derEinstellung ServerCascadeDelete werden die Detailzeilen nicht mehr angezeigt, wenn eine Hauptzeile gelöscht wird. Vor demEintragen der Änderung kann die Löschung der Hauptzeile rückgängig gemacht werden. Die Detailzeilen werden dann wiederangezeigt. Wenn Sie diese Einstellung verwenden und Fremdschlüsselbeschränkungen zwischen Haupt- und Detailtabellenvorhanden 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 derDatenmenge an den Server zu übergeben. Die Aktualisierungsmethode des Haupt-Datenadapters (in BDP.NET dieAutoUpdate-Ereignisbehandlungsroutine) muss vor derjenigen des Detail-Datenadapters aufgerufen werden. Andernfalls würdedas Einfügen von Detailzeilen fehlschlagen, solange die Hauptzeile noch nicht eingefügt ist. Wird die Hauptzeile vor derDetailzeile 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, wieder Server Fremdschlüsselwerte in Haupt-/Detail-Anwendungen aktualisiert. Die Eigenschaft CascadingUpdates kann auf diefolgenden 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.

DB Web Controls in RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

90

1

ServerCascadeUpdate

Bei dieser Einstellung kann der Fremdschlüsselwert der Hauptzeile geändert werden. Verwenden Sie diese Einstellung, wennder Server mehrstufige Aktualisierungen automatisch verwaltet. Bei einer Änderung des Fremdschlüsselwerts der Hauptzeilewerden die Schlüsselwerte der Detailzeilen automatisch angepasst. Vor dem Eintragen der Änderung kann die Änderung an derHauptzeile rückgängig gemacht werden. Alle Änderungen an den Schlüsselwerten der Detailzeilen werden dann ebenfallsrü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, indenen 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 dieStandard-Websteuerelemente verwenden.

In der Regel kann das Standardsteuerelement DBWebNavigator verwendet werden, um Navigationsfunktionen für eineAnwendung bereitzustellen. Es gibt aber Situationen, in denen eine weitergehende Kontrolle über die Navigationsmöglichkeitenerforderlich ist. Die DB Web Controls stellen nun eine API für die Feinabstimmung der Navigation bereit. Sie können mit Hilfedieser API zum Beispiel eine Schaltfläche für die direkte Navigation erstellen, anstatt das DBWebNavigator-Steuerelement zuverwenden. Es ist zwar möglich, Schaltflächen von DBWebNavigator zu verbergen, die Position der Steuerelemente auf demFormular kann aber nicht geändert werden. Wenn Sie zum Beispiel bei DBWebNavigator alle Schaltflächen außer Zurück undWeiter verbergen, werden diese weiterhin nebeneinander angezeigt. Um ihre Position im Formular zu ändern, können Sie dieMethoden der Navigations-API oder das DBWebNavigationExtender-Steuerelement verwenden. Mit beiden Verfahren könnenSie die Web Controls-Standardschaltflächen in Steuerelemente für die Navigation konvertieren.

Zur Bereitstellung dieser Möglichkeiten implementiert DBWebDataSource neue IDBDataSource-Methoden, die jeweils einebestimmte Navigationsaufgabe übernehmen. Der Aufruf dieser Methoden werden erfolgt in einer Behandlungsroutine für dasEreignis 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

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET Überblick zur Navigations-API der DB Web

91

1

• RegisterUndoAllControl

• RegisterApplyControl

• RegisterRefreshControl

• RegisterGoToControl

Siehe auch

CodeGear DBWeb Controls ( see page 88)

Anwendung mit DBWeb Controls erstellen ( 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 dieStandard-Websteuerelemente verwenden.

CodeGear DB Web Controls sind datensensitive Web-Komponenten. Mit Hilfe von DB Web Controls können Sie datensensitiveFunktionen in Standard-Web Controls kapseln. Dies hat den Vorteil, dass die Datenbindung durch das Control selbst erfolgt undkein 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 ExecutionLifecycle", 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.

Überblick zum DB Web Control-Experten RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

92

1

Datenbindung

In ASP.NET kann eine Bindung zu unterschiedlichen Datenquellen hergestellt werden (z.B. zu Datenbanken, Text- undXML-Dateien, Arrays und Kollektionen). In RAD Studio bieten Controls eine einfache, eigenschaftsbasierte Schnittstelle zuDatenquellen. Sie können ein Control im Objektinspektor an eine Datenquelle binden, die das Projekt anhand einesBDP.NET-Control, eines SQL-Client-Control oder eines anderen Daten- bzw. Datei-Control identifizieren kann. Dieverschiedenen 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 dasICollection-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 Instanzeines Datengitters könnte die entsprechende Anweisung wie folgt aussehen:

dataGrid1.DataBind();

Bei DB Web Controls ist dies nicht mehr erforderlich, da diese die Datenbindung automatisch vornehmen. DieDBWebDataSource-Komponente fungiert als Verbindungsglied zwischen der Datenquelle und dem DB Web Control. Sie erzeugtund verwaltet die Datenbindung zwischen der Datenquelle und dem Control. Sie können den Code für die Instantiierung einesDB Web Control und die Durchführung der Datenbindung auch manuell hinzufügen. Erforderlich ist dies aber nicht. Sie könnenKomponenten in ein Web Form einfügen und die gewünschten Verbindungen aus den Eigenschaftslisten des Objektinspektorsauswählen.

Anmerkung: Wenn Sie ein neues DB Web Control erstellen oder ein vorhandenes erweitern, müssen Sie eventuell Code fürdie 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 dieAnzeige der Controls auf der Webseite. Wenn Sie die Methode Render nach ihrer Definition an eine Instanz der KlasseHtmlTextWriter übergeben, wird ihr Inhalt im HTML-Format an die ASP.NET-Seite gesendet. Die Methode Write der KlasseHtmlTextWriter 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 sichdabei 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 Controlanzuzeigen. Render sorgt dafür, dass die Ausgabe an eine Instanz der Klasse HtmlTextWriter gesendet wird. HtmlTextWritersendet eine Folge von HTML-Zeichen an die Web Forms-Seite. Die HTML-Zeichen stellen das Control in HTML dar. EinDatengitter wird auf einer Web Forms-Seite beispielsweise als HTML-Tabelle dargestellt. Jedes Control besitzt seine eigeneHTML-Darstellung. Wenn Sie ein Control erweitern, müssen Sie die HTML-Ausgabe modifizieren, damit das neue Control richtigdargestellt 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,

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET Überblick zum DB Web Control-Experten

93

1

/// 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 erweitertwerden soll. Um ein DB Web Controls mit zusätzlicher Funktionalität zu versehen, müssen Sie weitere Anpassungen an diesemCode 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 dieErweiterung eines DB Web Control benötigen. Die Datei ist ähnlich strukturiert wie die Datei, die Sie bei der Erweiterung einesStandard-Web Control erzeugen. Der DB Web Control-Experte fügt jedoch Implementierungen für spezielle DB Web-Interfaceshinzu, die den automatischen Zugriff auf eine Datenquelle, Tabellen, Spalten und die entsprechenden Eigenschaftenermö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.

Wichtige Änderungen am Quelltext

Wenn Sie eine neue DB Web Control-Bibliothek erstellen, generiert der DB Web Control-Experte automatisch eineTemplate-Datei. Diese enthält die wichtigsten Elemente, die Sie im Projekt benötigten, um ein Control zu erstellen oder zuerweitern. 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 derDB 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 Codefolgendermaßen aussehen:

MyDataGrid = class(Borland.Data.Web.DBWebGrid, IPostBackDataHandler, IDBWebDataLink)

Überblick zum DB Web Control-Experten RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

94

1

Deklarieren der Render-Methode

Das Control kann entweder vom Namespace Control oder vom Namespace WebControls abgeleitet werden. WebControlsselbst ist auch vom Namespace Control abgeleitet.

In WebControls sind jedoch alle Standard-Web Controls definiert, sodass Sie Ihr Control von diesem Namespace ableitenmü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 Controlbestimmen. Controls, die über eine Benutzeroberfläche verfügen, werden in der Regel von System.Web.UI.WebControlsabgeleitet. 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 normalerweisevon 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 Sieerweitern. 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 EigenschaftText 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 seineEigenschaften definiert haben, können Sie die gesamte Struktur zusammen mit verschiedenen HTML-Tags an die EigenschaftText übergeben. Danach können sämtliche Aktionen für das Control über die Text-Eigenschaft gesteuert werden. Sie definierendie Eigenschaften des Control und übergeben sie mittels einer Text-Eigenschaft, welche die Control-Definition enthält, an dieHtmlTextWriter-Komponente. Sehen Sie sich den Quelltext einiger vorhandener DB Web Controls an. Nachstehend sehen Sie

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET Überblick zum DB Web Control-Experten

95

1

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(); // 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>");

Überblick zum DB Web Control-Experten RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

96

1

// 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(); }}

Ä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 einLesen-Schreiben-Control enthält. Wenn Sie ein schreibgeschütztes Control erstellen, können Sie diesen Aufruf entfernen oderauskommentieren. 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 denentsprechenden Code an derselben Stelle wie bei der Text-Eigenschaft hinzu. Normalerweise enthält die Methode PreRendereinen Aufruf von DataBind. Die DataBind-Prozedur selbst sieht in etwa so aus wie im folgenden Beispiel (es stammt aus demQuelltext 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...

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET Überblick zum DB Web Control-Experten

97

1

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 ) 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 ( see page 88)

WebDataLink-Interfaces verwenden ( 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 dieStandard-Websteuerelemente verwenden.

Die DBWebDataSource-Komponente bietet die Möglichkeit, XML- und XSD-Dateien zu erstellen und als Datenquelle für eineASP.NET-Anwendung zu verwenden. Normalerweise verwenden Sie diese Dateitypen im Zusammenhang mit DB Web Controlslediglich, um einen Prototyp der Anwendung zu erhalten. Sie können aber während der Design- und Entwicklungsphase desProjekts 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

XML-Dateien und DB Web Controls RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

98

1

können, stellen XML-Dateien ein einfache Lösung dar. Die Dateien enthalten lediglich Text und sind daher einfach zu lesen. DieBeschreibung 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 zuDatensätzen aus Datenbanken keine Steuerung des parallelen Zugriffs ermöglichen.

Trotz dieser Nachteile eignen sich XML-Dateien aufgrund ihrer selbstbeschreibenden Struktur und ihres kompaktenDatenformats ideal als Datenquellen für ASP.NET-Anwendungen. Das DBWebDataSource-Control wurde so konzipiert, dassneben anderen Ressourcen auch XML-Dateien als Datenquelle verwendet werden können. Dabei sind keine besonderenAnforderungen zu beachten, sondern es können die gewohnten Treiber und Kommunikationsschichten von RAD Studio genutztwerden. Die Verwendung von XML-Dateien als Datenquelle gestaltet sich somit völlig problemlos.

Empfohlene Workflow-Strategie

Die Erstellung der XML-Datei für die Anwendung erfolgt mit dem DBWebDataSource-Control. Danach muss die Datei mit einemDataSet-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 zurEntwurfs- und zur Laufzeit. Die DBWebDataSource-Komponente besitzt Eigenschaften für die Zwischenspeicherung vonXML-Daten. Wenn Sie die XML-Zwischenspeicherung verwenden, werden die Daten der XML-Datei beim Laden einerDatenquelle automatisch in das DataSet-Objekt eingelesen.

Wenn Sie in Ihrer Anwendung keine Benutzerauthentifizierung implementieren, werden Sie dieses Leistungsmerkmalwahrscheinlich nur bei der Erstellung von Prototypen verwenden. Das Fehlen einer Benutzerauthentifizierung kann zuZugriffsproblemen führen, wenn mehrere Benutzer gleichzeitig auf dieselbe XML-Datei zugreifen. Wenn mehrere Clients dieAnwendung verwenden, wird die XML-Datei aufgrund der Aktionen verschiedener Benutzer ständig überschrieben. Um dies zuverhindern, können Sie der Serveranwendung Programmlogik hinzufügen, die Zeilenaktualisierungen überprüft und die Clientsgegebenenfalls auf einen Konflikt hinweist. Dies entspricht in etwa den Sperren auf Tabellen- oder Zeilenebene, die von einemDatenbanksystem gesetzt werden. Da eine XML-Datei eine Textdatei ist, lässt sich aber ein derartiger Kontrollmechanismus nurmit einigem Aufwand implementieren.

Sie können das Problem umgehen, indem Sie durch Zuweisung der Eigenschaft UseUniqueFileName eineBenutzerauthentifizierung 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 eigeneXML-Datei mit einem eindeutigen Namen erstellt. Auf diese Weise lassen sich Datenkollisionen in Mehrbenutzeranwendungenvermeiden. Dieses Verfahren hat allerdings den Nachteil, dass die einzelnen Client-XML-Dateien unterschiedliche Datenenthalten, 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 Schreibzugriffauf die XML-Dateien, in denen sie Daten speichern. Auf Clients, die keinen Schreibzugriff haben, tritt beim Versuch, dieXML-Datei zu aktualisieren, ein Zugriffsfehler auf. Sie müssen daher allen Clients, die die Anwendung nutzen, Schreibrechtegewähren.

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET XML-Dateien und DB Web Controls

99

1

Siehe auch

Überblick zu CodeGear DB Web Controls ( see page 88)

DB Web-XML-Datei erstellen ( see page 201)

Aktenkoffermodell-Anwendung mit DB Web Controls erstellen ( see page 198)

1.6.7 Mit DataView-Objekten arbeiten

Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen dieStandard-Websteuerelemente verwenden.

DataView-Objekte (Datenansichten) ermöglichen es Ihnen, ein DataTable-Objekt unter Verwendung der Eigenschaft RowFilterzu filtern oder die Anordnung der Daten zu ändern. Die DataView-Komponenten befindet sich unter dem BereichDatenkomponenten 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 eineDataView-Eigenschaft ändert, die die Anzeige der Zeilen in der Datenansicht steuert. Wird eine DataView-Eigenschaft zurLaufzeit 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 verwendetwerden. Dazu definieren Sie eine Haupt/Detail-Beziehung mit zwei oder mehr DataTable-Objekten in einem einzelnenDataSet-Objekt und verbinden das DataView-Objekt mit dem DataTable-Objekt, das die Hauptdatentabelle darstellt. Wenn dasDBWebDataSource-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

Mit DataView-Objekten arbeiten RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

100

1

Änderungen werden gelöscht. Wenn Sie versuchen, diese Methode in einer Behandlungsroutine für das Klickereignis einerDBWebNavigator-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.

• 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 siedadurch 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

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET Deployment von ASP.NET-Anwendungen

101

1

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ürdas 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.

Wenn Sie für Ihr Projekt einen Deploymentmanager bereitstellen, wird eine XML-Datei (.bdsdeploy) in das Projektverzeichniseingefügt, und in der IDE wird eine eigene Registerkarte für das Deployment angezeigt. Auf dieser Registerkarte geben Sie dieerforderlichen Informationen für das Ziel und die Verbindung ein. Sie können bei Bedarf die Liste der zu kopierenden Dateienmodifizieren. 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 dieStandard-Websteuerelemente verwenden.

DB Web Controls unterscheiden sich von herkömmlichen Web Controls vor allem dadurch, dass sie die Datenbindungautomatisch durchführen. Während des Entwurfs müssen Sie zwar weiterhin die Verbindungen zwischen Datenquellen undControls konfigurieren, zur Laufzeit erfolgt die Datenbindung jedoch automatisch, d.h. es muss kein entsprechender Befehl inden 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 werdenim 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 undermöglicht es Ihnen, Daten aus einer Vielzahl verschiedener Ressourcen wie Datenbanken, Textdateien, Arrays undKollektionen 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 verbundenwerden 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, DBWebRadioGroupund DBWebDropDownList). Es definiert einen Tabellennamen (TableName) in einem DataSet-Objekt, einen Spaltennamen

WebDataLink-Interfaces verwenden RAD Studio für .NET 1.6 Webanwendungen mit ASP.NET

102

1

(ColumnName), der die Tabelle der anzuzeigenden Daten repräsentiert, sowie die Spalte für die Werte, die bei Auswahl einesWerts in das mit dem Control verbundenen ColumnName-Feld eingefügt werden. Per Vorgabe ist ColumnName mitDataTextField identisch. Controls für Nachschlagezwecke besitzen zusätzlich zu einer Texteigenschaft (normalerweise dasElement, das im Control, z.B. einer Liste, angezeigt wird) auch eine Werteigenschaft. Die Werteigenschaft kann mit derTexteigenschaft 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 Produktnummernsetzen. Wenn der Benutzer einen Produktnamen auswählt, wird an die Anwendung nicht der Name, sondern dieProduktnummer übergeben. Dieses Verfahren hat den Vorteil, dass bei der Verarbeitung keine Konflikte aufgrund ähnlicherNamen auftreten können.

Siehe auch

DB Web Controls ( see page 88)

Anwendung mit DB Web Controls erstellen ( see page 199)

ASP.NET-Anwendungen erstellen ( see page 186)

1.6 Webanwendungen mit ASP.NET RAD Studio für .NET WebDataLink-Interfaces verwenden

103

1

1.7 Web-Services mit ASP.NET entwickeln Web-Services sind eine programmierbare Entität, die eine bestimmte Funktionalität bereitstellt, zum Beispiel eineAnwendungslogik. 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 umeigenständige Anwendungen handeln oder um Teilkomponenten einer größeren Webanwendung. Mit Hilfe des XML-basiertenMessaging 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 vonASP.NET-Web-Services-Anwendungen unterstützen. Weitere grundlegende Informationen über Web-Services finden Sie in derDokumentation zum Microsoft .NET SDK.

Themen

Name Beschreibung

Überblick zu den ASP.NET-Web-Services ( see page 106) 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)

Protokoll-Stack von Web-Services ( see page 108) 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-Support ( see page 110) 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 ( see page 110)

Überblick zu den ASP.NET-Web-Services RAD Studio für .NET 1.7 Web-Services mit ASP.NET entwickeln

104

1

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 Plattformoder Programmiersprache miteinander zu verbinden und Informationen auszutauschen. Web-Services sind in dasASP.NET-Modell integriert, das für das .NET Framework verwendet wird. Im Gegensatz zu den traditionellenWindows-Anwendungen enthalten ASP.NET-Web-Services-Anwendungen Objekte und Methoden, die mit Hilfe einfacherMessaging-Protokoll-Stacks über das Web bereitgestellt werden. Jeder Client kann eine Web-Services-Anwendung über HTTPmit einer Webmethode aufrufen. Wie jede andere Methode, auf die sich über eine einfache Windows Forms-Anwendungzugreifen lässt, so enthalten auch Webmethoden eine definierte Funktionalität. Der wesentliche Unterschied besteht darin, dassauf Webmethoden über einen Web-Browser zugegriffen wird. Weitere grundlegende Informationen über Web-Services findenSie 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 Technikenverwenden. 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 derKommunikation von Web-Services und einen Überblick über die Dateien, die zur Erstellung von ASP.NET-Web-Serviceserforderlich 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, eineASP.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 dieASP.NET-Web-Services-Anwendung als auch den Client beherbergt. Wahlweise ließe sich auch ein Datenbankserver zumSpeichern 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

1.7 Web-Services mit ASP.NET entwickeln RAD Studio für .NET Überblick zu den ASP.NET-Web-Services

105

1

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

Die aktuellen Web-Services enthalten Informationsquellen, die sich auf einfache Weise in Anwendungen integrieren lassen, zumBeispiel Aktienkurse, Wettervorhersagen und Sportergebnisse. Mit zunehmender Nachfrage nach einem Zugriff aufGeschäftslogiken über das Web entwickeln die Unternehmen Möglichkeiten für ihre Kunden, mit Hilfe von Anwendungenbestimmte Informationen zu analysieren und einzuholen. Eine Bank kann beispielsweise einen Web-Service bereitstellen, derFinanzdaten für einen Kunden (Aktienportfolio, Bankkonten, Außenstände usw.) zusammenstellt und aktualisiert. Der Kundekann auf diese Informationen über ein Tabellenblatt, eine Website oder ein anderes digitales Gerät zugreifen, und muss sie nichtmanuell zusammenstellen. Zwar steht ein Großteil dieser Informationen bereits heute im Web bereit, doch ein Web-Service kannden 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

Überblick zu den ASP.NET-Web-Services RAD Studio für .NET 1.7 Web-Services mit ASP.NET entwickeln

106

1

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 Dateienermöglichen es ASP.NET-Web-Services, ihre Dienste über einen Webserver zu erbringen. In der folgenden Tabelle sind dieseDateien beschrieben.

Datei Beschreibung

.asmx Wenn Sie eine ASP.NET-Web-Services-Anwendung erstellen, wird automatisch eine Textdatei mit derErweiterung .asmx erzeugt. Die erforderliche Web-Services-Direktive wird direkt am Anfang dieser Dateiplatziert, um die URL-Adresse des Web-Services und seine Implementierung miteinander in Beziehung zusetzen. In die .asmx-Datei fügen Sie die Logik des Web-Services in die Methoden ein, die für dieClient-Anwendung sichtbar sind. Die .asmx-Datei dient als Basis-URL für jene Clients, die denXML-Web-Service aufrufen. Diese Datei wird für das Deployment zusammen mit anderen Dateien in eineAssemblierung compiliert.

Codebehind Wenn Sie eine ASP.NET-Web-Service-Anwendung erstellen, wird eine Codebehind-Datei mit einersprachspezifischen 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.

CompilierteDLL-Dateien

Die DLL-Dateien von Web-Services erbringen dynamische Dienste auf dem Webserver.

.wsdl Diese Datei wird generiert, sobald Sie auf die Funktion Webreferenz hinzufügen klicken, um die Web-Servicesin 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ßerdemLinks zu anderen Ressourcen, die den Web-Service beschreiben.

Siehe auch

Protokoll-Stack von Web-Services ( see page 108)

ASP.NET-Web-Services-Support ( 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 dievorhandene 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 dieBackend-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 auffolgende 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

1.7 Web-Services mit ASP.NET entwickeln RAD Studio für .NET Protokoll-Stack von Web-Services

107

1

• 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. DerProtokoll-Stack von Web-Services definiert die Schichtung der Internetprotokolle (Regeln), die beim Entwickeln, Auffinden undImplementieren von Web-Services zur Anwendung kommen.

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 Anwendungenverantwortlich. Das am häufigsten verwendete Transportprotokoll ist das Standardprotokoll HTTP. Andere, weit verbreiteteWeb-Protokolle sind SMTP und FTP.

XML-Messaging

Die Messaging-Schicht im Protokoll-Stack basiert auf einem XML-Modell. Bei der Entwicklung von Web-Services-Anwendungenwird meist XML verwendet, weshalb dies die Grundlage für alle Web-Services ist. XML ist nur ein möglicher Standard, der für dieKonvertierung von Web-Services zwischen verschiedenen Technologiedomänen in Frage kommt. Im Web finden Sie vieleInformationsquellen, die das XML-Messaging beschreiben. Weitere Informationen erhalten Sie auf der Website des World WideWeb 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 definiertsind. Zu den bekannteren Standards gehört SOAP. Es ist einer der wichtigsten Standards bei der Kommunikation zwischenWeb-Services über ein Netzwerk. Während XML die Mittel für eine Kommunikation über das Web mit einem XML-Dokumentbereitstellt, das Informationen von zwei getrennten Systemen abfragen oder beantworten kann, dient SOAP zur effektivenKommunikation innerhalb eines Netzwerks, indem es Absender und Empfänger von XML-Dokumenten mit einem allgemeinenDatentransferprotokoll unterstützt. Im Web finden Sie viele Informationsquellen, die SOAP beschreiben. Weitere Informationenerhalten 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 denverfügbaren Funktionen, Datentypinformationen für das XML-Messaging, Bindungsinformationen über das verwendeteTransportprotokoll 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 Ergebnisseliefert oder nicht, und welchen Transport der Service unterstützt, verwendet dazu ein WSDL-Dokument. Web-Services müssenbeschrieben und dem potenziellen Kunden angekündigt werden, damit dieser sie verwenden kann. WSDL sieht ein

Protokoll-Stack von Web-Services RAD Studio für .NET 1.7 Web-Services mit ASP.NET entwickeln

108

1

allgemeingültiges Format für die Beschreibung und Veröffentlichung dieser Informationen zum Web-Service vor. Üblicherweisewird 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. DasWSDL-Dokument oder die Proxy-Datei wird zum Client kopiert und von diesem zum Aufruf des Servers verwendet. DieProxy-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 dieweißen und gelben Seiten eines Telefonbuchs vorstellen. Die weißen Seiten der Web-Services enthalten allgemeineInformationen zu bestimmten Unternehmen, zum Beispiel Firmenname, Adresse, Telefonnummer usw. Die gelben Seitenenthalten eine Klassifizierung und beschreiben die angebotenen Dienste genauer, hier werden beispielsweise Industriebranchenund Produkte aufgeführt.

Das Protokoll, das Sie zur Veröffentlichung Ihrer Web-Services verwenden, hat den Namen UDDI. DieUDDI-Business-Registrierung bietet jedem die Möglichkeit, in den vorhandenen UDDI-Daten zu recherchieren und ermöglicht esFirmen, sich selbst und ihre Dienste dort zu registrieren. Mit RAD Studio werden Ihre Informationen automatisch in derRegistrierung oder in einem verteilten Verzeichnis für Business- und Web-Services veröffentlicht.

Siehe auch

Überblick zu den ASP.NET-Web-Services ( see page 106)

ASP.NET-Web-Services-Support ( 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 dieserFormulare lassen sich Client-Anwendungen erstellen, die auf Web-Services-Anwendungen zugreifen. Mit der FunktionWebreferenz hinzufügen können Sie diesen Client-Anwendungen dann die erforderliche ASP.NET-Web-Services-Anwendunghinzufü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. Fernerunterstützt RAD Studio den Import von WSDL-Dokumenten, die eine bestimmte Web-Services-Anwendung beschreiben und ihreFunktionalität der Client-Anwendung mitteilen. Sie können die Beispiel-WebMethod von RAD Studio dazu verwenden, eineASP.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

1.7 Web-Services mit ASP.NET entwickeln RAD Studio für .NET ASP.NET-Web-Services-Support

109

1

ASP.NET-Web-Services-Client-Support

Sie können eine Web-Services-Anwendung erstellen, die im Wesentlichen nichts anderes als ein Provider oder eineServeranwendung ist. Diese Anwendung befindet sich auf einem Webserver, und jeder Client, der die Architektur dieserAnwendung versteht, kann darauf zugreifen. Wenn Sie selbst eine Web-Services-Anwendung nutzen möchten, müssen Sie eineClient-Anwendung erstellen. In RAD Studio stehen verschiedene Tools zum Erstellen von Client-Anwendungen zur Auswahl:

• Windows Forms

• Web Forms

• Webreferenzen

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-Anwendungeignet, sollten Sie bedenken, auf welche Art von Service Sie zugreifen möchten. In den meisten Fällen diktiert der gewählteService 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 dieeine 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, dieeinfache Datenbearbeitung leistet oder die Anforderungen eines einzigen Zwecks erfüllen soll, sollten Sie eine ASP.NET WebForms-Anwendung in Betracht ziehen. Web Forms sind plattformunabhängige Interfaces, die in einem Web-Browser angezeigtwerden 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 Konsolenfensteroder 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 beziehtsich entweder auf ein WSDL-Dokument oder ein XML-Schema, das in die Client-Anwendung importiert wird. DasWSDL-Dokument oder das XML-Schema beschreibt einen Web-Service. Wenn eines dieser Dokumente importiert ist, generiertRAD Studio alle Interfaces und Klassendefinitionen, die für den Aufruf des Web-Service erforderlich sind. Klicken Sie in derProjektverwaltung mit der rechten Maustaste auf den Knoten WebService, und wählen Sie im Kontextmenü Webreferenzhinzufügen. Ein UDDI-Browser wird angezeigt. Um den Web-Service in Ihre Client-Anwendung einzufügen, müssen Sie dasWSDL-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 dieAnwendungslogik eines oder mehrerer Web-Services. Sie bestimmen, welche Services bereitgestellt werden und wie sie zuverwenden 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 Namenund den Speicherort für die Anwendung fest. Die für das Deployment benötigten Dateien werden automatisch erstellt. Wenn Siedie 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 ( see page 106)

Protokoll-Stack von Web-Services ( see page 108)

ASP.NET-Web-Services-Support RAD Studio für .NET 1.7 Web-Services mit ASP.NET entwickeln

110

1

ASP.NET-Web-Services-Anwendung "Hello World" erstellen ( see page 222)

Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen ( see page 218)

1.7 Web-Services mit ASP.NET entwickeln RAD Studio für .NET ASP.NET-Web-Services-Support

111

1

2 Anleitungen

Dieser Abschnitt enthält Anleitungen zu verschiedenen Bereichen der Entwicklung mit RAD Studio.

Themen

Name Beschreibung

Datenbankanleitungen ( see page 114) Dieser Abschnitt enthält Anleitungen zur Entwicklung von Datenbankanwendungen.

Interoperative Anwendungen – Anleitungen ( see page 150) Dieser Abschnitt enthält Anleitungen zur Erstellung von interoperativen Anwendungen.

Anleitungen für die Modellierung ( see page 152) Dieser Abschnitt enthält Anleitungen zum Modellieren von Anwendungen.

VCL für .NET – Anleitungen ( see page 157) Dieser Abschnitt enthält Anleitungen zur Entwicklung von VCL.NET-Anwendungen.

ASP.NET – Anleitungen ( see page 182) Dieser Abschnitt enthält Anleitungen zur Entwicklung von ASP.NET Web Forms-Anwendungen.

Web-Services-Anleitungen ( see page 218) Dieser Abschnitt enthält Anleitungen zur Entwicklung und Verwendung von Web-Services.

2 RAD Studio für .NET

113

2

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 ( see page 118) Wenn eine Live-Verbindung besteht, können Sie mit dem Daten-Explorer Objekte in einer Datenbank zu suchen.

Verbinden mit AdoDbx Client ( see page 119) Es gibt verschiedene Möglichkeiten, um eine Datenbankverbindung mit AdoDbx Client herzustellen.

Datenbank-Projekte mit dem Daten-Explorer erstellen ( see page 120) 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.

Tabellenzuordnungen erstellen ( see page 120) 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.

SQL im Daten-Explorer ausführen ( see page 122) Sie können SQL in einem eigenen SQL-Fenster eingeben, bearbeiten und ausführen. Das SQL-Fenster steht im Daten-Explorer zur Verfügung.

Fehler in Tabellenzuordnungen behandeln ( see page 123) 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)

Daten zwischen Datenbanken migrieren ( see page 124) 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.

Verbindungen im Daten-Explorer bearbeiten ( see page 125) Sie können Verbindungen im Daten-Explorer in vielerlei Hinsicht ändern.

Datenbankverbindungen bearbeiten ( see page 126) 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.

RAD Studio für .NET 2.1 Datenbankanleitungen

114

2

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 ( see page 134) 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 ( see page 136) 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.

Anweisungstext-Editor verwenden ( see page 137) 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... more ( see page 137)

Designer für Datenadapter verwenden ( see page 138) 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.

Verbindungseditor verwenden ( see page 139) Jedes Verbindungsobjekt kann mehrere benannte Verbindungen unterstützen. Dabei kann es sich um Verbindungen zu mehreren Datenbanken oder Datenbanktypen handeln.

Standarddatenmengen verwenden ( see page 140) 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 verwenden ( see page 143) 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.

2.1 Datenbankanleitungen RAD Studio für .NET

115

2

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 ( see page 147) 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)

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 Verbindungsobjektentfernt 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 ( see page 23)

Datenbank im Daten-Explorer durchsuchen ( see page 118)

SQL im Daten-Explorer ausführen ( 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 zurBehebung von BDP-Fehlern geöffnet wird. Solche Konflikte können vorkommen, wenn mehrere Personen zum selben Zeitpunkt

Anleitung zum Hinzufügen eines RAD Studio für .NET 2.1 Datenbankanleitungen

116

2

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 derFehlerbehebung fortgesetzt werden soll. Sie können nur eine dieser Optionen auswählen:

Optionsfeld Beschreibung

Aktualisierung mitPrimärschlüssel erneutversuchen

Der Fehler wird behoben, und die Aktualisierung wird mit Hilfe des Primärschlüssels erneutversucht. Wenn die Datenzeile des Servers nicht gefunden wird, ist diese Option deaktiviert.

Aktuelle Zeileüberspringen undfortsetzen

Die Änderungen in der aktuellen Zeile werden nicht übernommen, aber für die übrigen Zeilen wirdeine Aktualisierung durchgeführt.

Aktualisierungenabbrechen

Die letzten Änderungen werden nicht übernommen. Der Fehler wird behoben, aber es werdenkeine weiteren Aktualisierungsversuche durchgeführt.

Mit Hilfe der drei Optionsfelder unten rechts im Fenster können Sie angeben, welche Daten in die Datenbank geschriebenwerden sollen. Sie können nur eine dieser Optionen auswählen:

Optionsfeld Beschreibung

Originalwerteverwenden

Die Daten aus der Spalte Originalzeile (siehe oben) werden in die Zeile eingefügt, die den Konfliktverursacht hat.

2.1 Datenbankanleitungen RAD Studio für .NET Anleitung zum Hinzufügen eines

117

2

Server-Werteverwenden

Die Daten aus der Spalte Server-Zeile (siehe oben) werden in die Zeile eingefügt, die den Konfliktverursacht hat.

Aktuelle Werteverwenden

Die Daten aus der Spalte Aktuelle Zeile (siehe oben) werden in die Zeile eingefügt, die den Konfliktverursacht hat.

Siehe auch

ADO.NET-Komponentendesigner ( see page 23)

Datenbank im Daten-Explorer durchsuchen ( see page 118)

SQL im Daten-Explorer ausführen ( 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:

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.

Datenbank im Daten-Explorer durchsuchen RAD Studio für .NET 2.1 Datenbankanleitungen

118

2

Siehe auch

ADO.NET-Komponentendesigner ( see page 23)

Neue Verbindung in den Daten-Explorer einfügen ( see page 116)

SQL im Daten-Explorer ausführen ( 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;

Siehe auch

AdoDbx-Client - Übersicht ( see page 6)

Deployment des AdoDbx-Clients

2.1 Datenbankanleitungen RAD Studio für .NET Datenbank-Projekte mit dem

119

2

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 WindowsForms 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 keineVerbindungsstrings 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 ( see page 118)

SQL im Daten-Explorer ausführen ( see page 122)

Verbindungen im Daten-Explorer bearbeiten ( see page 125)

2.1.6 Tabellenzuordnungen erstellen

Mit Hilfe der Eigenschaft TableMappings können Sie die Spalten einer Datenquelle den Spalten einer Datenmengenkomponenteim Arbeitsspeicher zuordnen. Auf diese Weise können Sie den Spalten der Datenmenge andere, aussagekräftigere Namenzuweisen. Es ist zudem möglich, eine Spalte einer Datenbanktabelle in der Datenmenge einer anderen Spalte zuzuordnen, alsder, die standardmäßig ausgewählt wird. Die Eigenschaft TableMappings ermöglicht es Ihnen auch, eine Datenmenge zuerzeugen, 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.

Tabellenzuordnungen erstellen RAD Studio für .NET 2.1 Datenbankanleitungen

120

2

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

.

2.1 Datenbankanleitungen RAD Studio für .NET Tabellenzuordnungen erstellen

121

2

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 imDaten-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

ADO.NET-Komponentendesigner ( see page 23)

Datenbank im Daten-Explorer durchsuchen ( see page 118)

Neue Verbindung in den Daten-Explorer einfügen ( see page 116)

Verbindungen im Daten-Explorer bearbeiten ( 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

Fehler in Tabellenzuordnungen behandeln RAD Studio für .NET 2.1 Datenbankanleitungen

122

2

können auftreten, wenn die Datenquelle und die zugehörige Datenmenge nicht über die gleiche Anzahl von Spalten verfügenoder wenn die Spaltentypen der Datenquelle nicht mit den Spaltentypen der Datenmenge übereinstimmen. Zudem könnenandere interne Fehler auftreten, die sich zur Entwurfszeit nicht unterbinden lassen. Sie können mit den EigenschaftenMissingMappingAction und MissingSchemaAction auf Fehler in Tabellenzuordnungsoperationen reagieren. Mit Hilfe derEigenschaft 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 Versuchunternommen 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 ( see page 23)

Tabellenzuordnungen erstellen ( see page 120)

2.1.9 Daten zwischen Datenbanken migrieren

Mit dem Daten-Explorer lassen sich Daten zwischen Datenbanken (und sogar Providern) schnell und einfach migrieren. Siekö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 zurVerfügung steht. Mit dieser Komponente können Sie Daten programmgesteuert migrieren.

Anmerkung: Die Klasse BdpCopyTable kopiert keine fremden Schlüssel oder abhängigen Objekte.

2.1 Datenbankanleitungen RAD Studio für .NET Daten zwischen Datenbanken migrieren

123

2

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.

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 ( see page 125)

Datenbank im Daten-Explorer durchsuchen ( see page 118)

Verbindungen im Daten-Explorer RAD Studio für .NET 2.1 Datenbankanleitungen

124

2

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:

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.

2.1 Datenbankanleitungen RAD Studio für .NET Verbindungen im Daten-Explorer

125

2

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 ( see page 118)

SQL im Daten-Explorer ausführen ( 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 jedenDatenbanktyp eine leicht veränderte Syntax des Verbindungsstrings. In diesem Abschnitt werden diese Unterschiedebeschrieben.

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:

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 dieAnwendung versucht, eine Verbindung zur Datenbank herzustellen.

False

QuoteObjects Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte inAnführungszeichen oder andere Begrenzungszeichen eingeschlossen werdenmüssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist fürDatenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa beiMS Access.

False

Datenbankverbindungen bearbeiten RAD Studio für .NET 2.1 Datenbankanleitungen

126

2

RoleName Wenn für Sie in der Datenbank eine Rolle vorgesehen ist, können Sie denRollennamen hier eingeben. Diese Rolle ist prinzipiell ein Authentifizierungsalias, derIhre Identität mit Ihren Zugriffsrechten kombiniert.

myRole

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 "DirtyReads" auszuschließen. Die Daten können aber vor Beendigung der Transaktiongeändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folgehat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevelbestimmt.

ReadCommitted

WaitOnLocks Legt fest, dass eine Transaktion auf den Zugriff warten muss, wenn sie auf einenSperrkonflikt mit einer anderen Transaktion trifft.

False

4. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:

Option Vorgabe

Assemblierung Borland.Data.Interbase,Version=AktuelleProduktversion,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 dieAnwendung versucht, eine Verbindung zur Datenbank herzustellen.

False

2.1 Datenbankanleitungen RAD Studio für .NET Datenbankverbindungen bearbeiten

127

2

QuoteObjects Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte inAnführungszeichen oder andere Begrenzungszeichen eingeschlossen werdenmüssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist fürDatenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa beiMS Access.

False

TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "DirtyReads" auszuschließen. Die Daten können aber vor Beendigung der Transaktiongeändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folgehat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevelbestimmt.

ReadCommitted

6. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:

Option Vorgabe

Assemblierung Borland.Data.Mssql,Version=Aktuelle Produktversion,Culture=neutral,PublicKeyToken=Token#

Provider MSSQL

VendorClient sqloledb.dll

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);password=;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.

Option Beschreibung Vorgabe

LoginPrompt Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn dieAnwendung versucht, eine Verbindung zur Datenbank herzustellen.

False

QuoteObjects Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte inAnführungszeichen oder andere Begrenzungszeichen eingeschlossen werdenmüssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist fürDatenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind.

False

TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "DirtyReads" auszuschließen. Die Daten können aber vor Beendigung der Transaktiongeändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folgehat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevelbestimmt.

ReadCommitted

4. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:

Datenbankverbindungen bearbeiten RAD Studio für .NET 2.1 Datenbankanleitungen

128

2

Option Vorgabe

Assemblierung Borland.Data.Db2,Version=Aktuelle Produktversion,Culture=neutral,PublicKeyToken=Token#

Provider DB2

VendorClient db2cli.dll

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 dieAnwendung versucht, eine Verbindung zur Datenbank herzustellen.

False

QuoteObjects Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte inAnführungszeichen oder andere Begrenzungszeichen eingeschlossen werdenmüssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist fürDatenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind.

False

TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "DirtyReads" auszuschließen. Die Daten können aber vor Beendigung der Transaktiongeändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folgehat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevelbestimmt.

ReadCommitted

5. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:

Option Vorgabe

Assemblierung Borland.Data.Oracle,Version=AktuelleProduktversion,Culture=neutral,PublicKeyToken=Token #

Provider Oracle

VendorClient oci.dll

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.

2.1 Datenbankanleitungen RAD Studio für .NET Datenbankverbindungen bearbeiten

129

2

Option Beschreibung Vorgabe

BlobSize Die obere Grenze eines BLOB-Feldes. 1024

LoginPrompt Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn dieAnwendung versucht, eine Verbindung zur Datenbank herzustellen.

False

QuoteObjects Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte inAnführungszeichen oder andere Begrenzungszeichen eingeschlossen werdenmüssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist fürDatenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa beiMS Access.

False

TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "DirtyReads" auszuschließen. Die Daten können aber vor Beendigung der Transaktiongeändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folgehat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevelbestimmt.

ReadCommitted

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.

Option Beschreibung Vorgabe

BlobSize Die obere Grenze eines BLOB-Feldes. 1024

ClientAppName Name der Client-Anwendung, der von der Zwischenschicht-Anwendung festgelegtwird.

ClientHostName Client-Hostname, der von der Zwischenschicht-Anwendung festgelegt wird. —

LoginPrompt Bestimmt, ob der Benutzer jedes Mal zur Anmeldung aufgefordert wird, wenn dieAnwendung versucht, eine Verbindung zur Datenbank herzustellen.

False

PacketSize Gibt die Anzahl der Bytes pro Netzwerkpaket an, die vom Datenbankserver zum Clientübertragen werden.

512

Datenbankverbindungen bearbeiten RAD Studio für .NET 2.1 Datenbankanleitungen

130

2

QuoteObjects Legt fest, dass Tabellennamen, Spaltennamen und andere Objekte inAnführungszeichen oder andere Begrenzungszeichen eingeschlossen werdenmüssen, wenn sie in eine SQL-Anweisung aufgenommen werden. Dies ist fürDatenbanken erforderlich, bei denen Leerzeichen in Namen zulässig sind, etwa beiMS Access.

False

TransactionIsolation Beim Lesen der Daten werden gemeinsame Sperren aufrechterhalten, um "DirtyReads" auszuschließen. Die Daten können aber vor Beendigung der Transaktiongeändert werden, was nicht wiederholbare Lesezugriffe oder Phantomdaten zur Folgehat. Damit wird der Wert für die Eigenschaft TAdoDbxTransaction. IsolationLevelbestimmt.

ReadCommitted

4. Für die folgenden Provider-Einstellungen sollten Sie die Standards übernehmen können:

Option Vorgabe

Assemblierung Borland.Data.Sybase,Version=AktuelleProduktversion,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 ( see page 120)

Parameterübergabe in einer Datenbankanwendung ( see page 134)

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 bereitund 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. DerDataPort-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,

2.1 Datenbankanleitungen RAD Studio für .NET Eine Datenbankanwendung für die

131

2

die IDbDataAdapter implementieren. Die Methode GetData für DataSync iteriert durch alle Daten-Provider in der Sammlung undgibt eine Datenmenge zurück. SaveData löst Änderungen an der Datenmenge über die DataProvider-Sammlung wieder zurückin die Datenbank auf. Beim Zurückschreiben der Änderungen über ein BdpDataAdapter-Objekt erzeugt der Resolver optimalesSQL. 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.

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.

Eine Datenbankanwendung für die RAD Studio für .NET 2.1 Datenbankanleitungen

132

2

• 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 ( see page 15)

Daten-Provider für .NET ( 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 eineDatenmenge zu übergeben. Parameter ermöglichen die Erstellung von Anwendungen, bei denen zur Entwurfszeit nicht bekanntist, welche Daten der Benutzer zur Laufzeit im Einzelnen eingeben wird. Im folgenden Beispiel wird unterstellt, dass Sie bereitsdie Interbase-Beispieldatenbank EMPLOYEE.GDB eingerichtet und eine entsprechende Verbindung definiert haben. In diesemBeispiel 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:

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.

2.1 Datenbankanleitungen RAD Studio für .NET Parameterübergabe in einer

133

2

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 zudemdas Zeichen ?. Das Zeichen ? ist ein Platzhalter für den Parameterwert, der von der Anwendung zur Laufzeit übergeben wird. Esgibt mindestens zwei Gründe, die dafür sprechen, Parameter auf diese Weise zu verwenden. Der erste Grund ist, dass eineAnwendung so in die Lage versetzt werden kann, die Daten in den ausgewählten Spalten mehrfach abzurufen, zur Erfüllung derBedingung aber einen anderen Wert zu verwenden. Der zweite Grund besteht darin, dass Sie in der Entwurfsphase dietatsächlichen Werte möglicherweise gar nicht kennen. Sie können sich vorstellen, wie beschränkt die Anwendung wäre, wennnur 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.

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.

Parameterübergabe in einer RAD Studio für .NET 2.1 Datenbankanleitungen

134

2

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)

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önnenin der Datenadapter-Vorschau angeben, welche Daten aus der Datenmenge übertragen werden sollen - entweder in Form vonSQL-Anweisungen oder Stored Procedures, die zur Eingabe in die Datenbank oder zum Lesen aus der Datenbank aufgerufenwerden.

2.1 Datenbankanleitungen RAD Studio für .NET Datenadapter-Vorschau verwenden

135

2

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 ( see page 137)

Verbindungseditor verwenden ( see page 139)

Designer "Datenmenge erzeugen" verwenden ( see page 143)

Designer für Datenadapter verwenden ( 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 EigenschaftCommandText definiert sein. Sobald diese Anweisung eingegeben wurde, wird sie als Wert der Eigenschaft CommandText desBdpCommand-Objekts für die BdpDataAdapter-Komponente verwendet. Sie können diese Select-Anweisung eintippen oder denAnweisungstext-Editor zum Erstellen dieser Anweisung (sowie von Update-, Insert- und Delete-Anweisungen) mit Hilfeeinfacher Zeigen- und Klicken-Operationen benutzen. Wenn Sie den Anweisungstext-Editor verwenden und eine Verbindungzu einer aktiven Datenquelle besteht, dann werden die Namen der Tabellen und Spalten in diesem Editor angezeigt. Sie könnenEinträge aus Listenfeldern auswählen, um die Anweisung aufzubauen. Wenn Sie die BdpDataAdapter-Komponente mit demDaten-Explorer erstellen und eine aktive Verbindung zu einer Datenquelle besteht, wird automatisch eine Vorlage für eineSelect-Anweisung in der Form select * from tablename erzeugt. Sie können diese Anweisung verwenden, um alle Zeilender genannten Datenquelle abzurufen, oder die Anweisung vor der Erzeugung der Datenmenge ändern.

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.

Anweisungstext-Editor verwenden RAD Studio für .NET 2.1 Datenbankanleitungen

136

2

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 ( see page 143)

Datenadapter-Vorschau verwenden ( see page 136)

2.1.16 Designer für Datenadapter verwenden

Der Datenadapter muss mindestens eine SQL-Select-Anweisung mit der Anweisungseigenschaft SELECT enthalten. Siekönnen diese Anweisung entweder selbst eingeben oder den Designer Datenadapter dazu verwenden, die Select-Anweisungzusammen 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 Datenadapterverwendet eine Live-Verbindung, um die Metadaten abzurufen, auf deren Basis sich die geeigneten SQL-Anweisungen erstellenlassen. 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.

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)

2.1 Datenbankanleitungen RAD Studio für .NET Designer für Datenadapter verwenden

137

2

Datenadapter-Vorschau verwenden ( see page 136)

2.1.17 Verbindungseditor verwenden

Jedes Verbindungsobjekt kann mehrere benannte Verbindungen unterstützen. Dabei kann es sich um Verbindungen zumehreren 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 ( 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 ( see page 143)

Datenadapter-Vorschau verwenden ( see page 136)

Standarddatenmengen verwenden RAD Studio für .NET 2.1 Datenbankanleitungen

138

2

2.1.18 Standarddatenmengen verwenden

Das Standardobjekt DataSet ist eine Arbeitsspeicher-Repräsentation von Tabellen oder Ansichten, die von einer verbundenenDatenquelle abgerufen werden. Wegen der Art und Weise, in der die zugrunde liegende Datenstruktur programmiert ist, werdenzur Laufzeit nur die Spaltennamen der Datenquelle angezeigt. Wenn Sie eine Datenmenge generieren, werden die Daten ausallen Spalten abgerufen, die Sie in der Select-Anweisung im Dialogfeld Daten-Adapter-Konfiguration angegeben haben. Siekö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.

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.

2.1 Datenbankanleitungen RAD Studio für .NET Standarddatenmengen verwenden

139

2

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.

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

Standarddatenmengen verwenden RAD Studio für .NET 2.1 Datenbankanleitungen

140

2

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)

2.1 Datenbankanleitungen RAD Studio für .NET Standarddatenmengen verwenden

141

2

Datenbankanwendung mit Windows Forms erstellen

Anweisungstext-Editor verwenden ( see page 137)

Verbindungseditor verwenden ( 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 einerXML-Hierarchie der Zieldatenbanktabelle abgeleitet. Die XML-Datei, die die Beschreibung der Datenmenge enthält, ermöglichtdie 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 derCompilierung 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.

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.

Typisierte Datenmengen verwenden RAD Studio für .NET 2.1 Datenbankanleitungen

142

2

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)

Datenbankanwendung mit Windows Forms erstellen

Anweisungstext-Editor verwenden ( see page 137)

Verbindungseditor verwenden ( see page 139)

Designer für Datenadapter verwenden ( see page 138)

Datenadapter-Vorschau verwenden ( see page 136)

Standarddatenmengen verwenden ( see page 140)

Anmerkungen mit einer typisierten Datenmenge verwenden

2.1 Datenbankanleitungen RAD Studio für .NET Herstellen einer Verbindung zu einer

143

2

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 undderen Datensätze lesen können. In dem Beispielcode enthalten die .ini-Dateien von dbExpress alle Informationen über diespezielle 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.

// 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;

Herstellen einer Verbindung zu einer RAD Studio für .NET 2.1 Datenbankanleitungen

144

2

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.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 einzelnenProzessen. Das .NET-Remoting ermöglicht eine Interaktion mit Objekten, die sich in unterschiedlichen Anwendungsdomänenbefinden 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- undDataSync-Komponenten verwendet werden, problemlos in eine mehrschichtige Datenmengen-Remoting-Anwendung migriert

2.1 Datenbankanleitungen RAD Studio für .NET Eine verteilte Datenbankanwendung

145

2

werden. RemoteServer implementiert das Interface IDataService und stellt sich selbst als SAO (Singleton Server ActivatedObject) zur Verfügung. Auf der Client-Seite wird über die RemoteConnection-Eigenschaften der URL für die Verbindung zurRemoteServer-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 dieEigenschaft 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 dieEllipsen-Schaltfläche, um den Editor für Daten-Provider-Sammlungen zu öffnen, und fügen Sie für jedeTabelle, 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 derAuflösung auftreten.

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 ist. Wählen Sie dieDataSync-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 Siediese Eigenschaft auf True.

ChannelType Gibt den Typ des Kanals an: Http (HTTP) oder Tcp (TCP/IP). Wählen Sie den Kanaltyp in der Dropdown-Listeim Objektinspektor aus.

Eine verteilte Datenbankanwendung RAD Studio für .NET 2.1 Datenbankanleitungen

146

2

Port Gibt den Anschluss an, den der externe Server abhört. Geben Sie einen neuen Wert ein, oder übernehmen Sieden voreingestellten Port-Wert 8000.

URI Legt den universellen Ressourcen-Bezeichner für den externen Server fest. Per Vorgabe ist die EigenschaftURI 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 dieEigenschaft 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-Listeim Objektinspektor aus. Der gewählte Typ muss dem Anschlusstyp entsprechen, der für den externen Serverfestgelegt 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 Sieden voreingestellten Port-Wert 8000. Der gewählte Typ muss dem Anschlusstyp entsprechen, der für denexternen Server festgelegt wurde.

URI Legt den universellen Ressourcen-Bezeichner für den externen Server fest. Dieser Wert muss derURI-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-Komponentezu (beispielsweise RemoteConnection1).

DataSet Legt die Datenmenge fest, in der die Daten gespeichert werden, die aus der angegebenen Datenquelleabgerufen werden. Weisen Sie dieser Eigenschaft die hinzugefügte DataSet-Komponente zu (beispielsweisedataSet1).

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 ( see page 28)

BDP.NET-Komponentendesigner ( see page 23)

Eine Datenbankanwendung für die Auflösung in mehrere Tabellen erstellen ( see page 132)

2.1 Datenbankanleitungen RAD Studio für .NET Eine verteilte Datenbankanwendung

147

2

2.2 Interoperative Anwendungen – Anleitungen Dieser Abschnitt enthält Anleitungen zur Erstellung von interoperativen Anwendungen.

Themen

Name Beschreibung

Hinzufügen einer J2EE-Referenz ( see page 150) 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.

Referenzen zu einem COM-Server hinzufügen ( 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 Erstellender 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. 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.

Referenzen zu einem COM-Server RAD Studio für .NET 2.2 Interoperative Anwendungen –

148

2

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.2 Interoperative Anwendungen – RAD Studio für .NET Referenzen zu einem COM-Server

149

2

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 ( see page 155) Große, reale Modelle passen nicht in das Diagrammfenster. Um das Diagramm anzuzeigen, können Sie das Übersichtsfenster verwenden.

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, derdas 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

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 ( see page 154)

Verwenden des Übersichtsfensters ( see page 155)

Hinzufügen von Spalten zu einer Komponente

OCL-Ausdruckseditor verwenden

Importieren und Exportieren eines Modells RAD Studio für .NET 2.3 Anleitungen für die Modellierung

150

2

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 weitereInformationen ü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)

UML-Features in Delphi für .NET

Integrierte Modellierungstools - Übersicht

Code-Visualisierung - Überblick ( see page 58)

Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms ( see page 154)

Verwenden des Übersichtsfensters ( see page 155)

Hinzufügen von Spalten zu einer Komponente

OCL-Ausdruckseditor verwenden

2.3 Anleitungen für die Modellierung RAD Studio für .NET Verwenden des Modellansichtfensters und

151

2

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. DieProjektverwaltung 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 einemUML-Package, einer Klasse oder einemInterface ein- oder ausblenden.

Klicken Sie auf das Pluszeichen (+) neben dem Symbol des Elements, umverschachtelte Elemente einzublenden, oder klicken Sie auf das Minuszeichen (-),um erschachtelte Elemente auszublenden.

Anzeigen einesCode-Visualisierungsdiagramms füreinen .NET-Namespace oder eineDelphi-Unit

Erweitern Sie das Symbol des Namespace oder der Unit ( ), und doppelklickenSie in der Modellhierarchie auf das Diagrammsymbol ( ).

Anzeigen desCode-Visualisierungsdiagramms für dasgesamte Projekt

Erweitern Sie in der Modellhierarchie das Projektsymbol ( ), und doppelklickenauf das Diagrammsymbol.

Öffnen des Quelltext-Editors für einbestimmtes Element in derModellhierarchie

Klicken Sie mit der rechten Maustaste auf das Element, und wählen Sie Quelleöffnen. Beachten Sie, dass sich ein .NET-Namespace über mehrereQuelltextdateien erstrecken kann. Sie können eine Quelltextdatei für einenNamespace nicht direkt aus der Modellhierarchie öffnen.

Öffnen desCode-Visualisierungsdiagramms für einbestimmtes Element in derModellhierarchie

Klicken Sie mit der rechten Maustaste auf das Element, und wählen Sie ImDiagramm anzeigen.

Das Code-Visualisierungsdiagramm verfügt über eine Reihe von Funktionen zum Anzeigen von großen Modellen, Ein- oderAusblenden von Attributen, Eigenschaften, usw. und zum direkten Wechseln von der grafischen Darstellung eines Elements imDiagramm zum entsprechenden Quelltext.

Verwenden des Code-Visualisierungsdiagramms

Neuanordnen von Elementen imDiagramm

Klicken Sie auf das Element und ziehen Sie es an die neue Position.

Ein- oder Ausblenden der Attribute,Operationen, Eigenschaften undverschachtelten Typen für einElement im Diagramm

Klicken Sie auf das Pluszeichen (+) neben der Kategorie (Attribute, Operationen, etc.),die Sie einblenden möchten. Klicken Sie auf das Minuszeichen (-), um die Elementeeiner bestimmten Kategorie auszublenden.

Ausführen eines automatischenLayouts für die Elemente imDiagramm

Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle imCode-Visualisierungsdiagramm, und wählen Sie Layout Vollständiges Layoutoder Layout Größen optimieren.

Verwenden des Modellansichtfensters und RAD Studio für .NET 2.3 Anleitungen für die Modellierung

152

2

Drucken des Diagramms Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle imCode-Visualisierungsdiagramm, und wählen Sie Drucken.

Öffnen des Quelltext-Editors für einbestimmtes Element imCode-Visualisierungsdiagramm

Klicken Sie mit der rechten Maustaste auf das Element, und wählen Sie Zur Definitiongehe.

Speichern des Diagramms als Bild Klicken Sie mit der rechten Maustaste auf eine beliebige Stelle imCode-Visualisierungsdiagramm, und wählen Sie Als Bild exportieren.

Anmerkung: Mit Ausnahme von "Code-Visualisierung - Überblick" und "Verwenden des Übersichtsfensters" stehen die untenaufgefü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 Übersichtsfensterverwenden.

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.

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.

2.3 Anleitungen für die Modellierung RAD Studio für .NET Verwenden des Übersichtsfensters

153

2

Siehe auch

Code-Visualisierung - Überblick ( see page 58)

Verwenden des Modellansichtfensters und des Code-Visualisierungsdiagramms ( see page 154)

UML-Features in Delphi für .NET

Integrierte Modellierungstools - Übersicht

Importieren und Exportieren eines Modells mit XMI ( see page 153)

Hinzufügen von Spalten zu einer Komponente

OCL-Ausdruckseditor verwenden

Verwenden des Übersichtsfensters RAD Studio für .NET 2.3 Anleitungen für die Modellierung

154

2

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 ( see page 161)

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) Im Folgenden werden die wichtigsten Schritte zum Erstellen einer VCL-Formularanwendung in RAD Studio erläutert.

Aktionen in einer VCL-Formularanwendung erstellen ( 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.

2.4 VCL für .NET – Anleitungen RAD Studio für .NET

155

2

VCL-Formularanwendung "Hello World" erstellen ( see page 165) 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 ( see page 167)

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) In diesem Beispiel wird eine VCL-Formulare-Anwendung erstellt, die mit Hilfe einer XMLDocument-Komponente den Inhalt einer XML-Datei anzeigt.

Ausführen von Änderungen, die wegen der Unterstützung von 64-Bit .NET 2.0 erforderlich sind ( see page 171)

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.

Eine neue VCL.NET-Komponente erstellen ( 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.

RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

156

2

Bitmap-Grafik in einer VCL-Formularanwendung anzeigen ( see page 175) 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 ( see page 176)

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 ( see page 177)

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.

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 verwendetwerden. Erstellen Sie eines oder mehrere dieser Beispiele. *

2.4 VCL für .NET – Anleitungen RAD Studio für .NET VCL-Formularanwendungen mit Grafiken

157

2

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 ( see page 176)

Abgerundete Rechtecke in einer VCL-Anwendung zeichnen ( see page 177)

Bitmap-Grafik in einer VCL-Formularanwendung anzeigen ( 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.

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.

ADO.NET-Datenbankanwendungen mit RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

158

2

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. 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)

2.4 VCL für .NET – Anleitungen RAD Studio für .NET VCL-Formularanwendung erstellen

159

2

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. Eswird eine einfache Anwendung angelegt und die Erstellung eines Menüs namens Bearbeiten mit den Befehlen Ausschneidenund 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.

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

Aktionen in einer VCL-Formularanwendung RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

160

2

ö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.

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 einerVCL-Formulare-Anwendung ausgeführt werden müssen. Die Anwendung verwendet ein VCL-Formular, ein Steuerelement undein Ereignis und zeigt als Antwort auf eine Benutzeraktion ein Dialogfeld an.

2.4 VCL für .NET – Anleitungen RAD Studio für .NET VCL-Formularanwendung "Hello World"

161

2

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.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 Zweckwird eine einfache Benutzeroberfläche mit einem Bereich zur Textbearbeitung erstellt und beschrieben, wie im Dateimenü einBefehl 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.

Mit dem Aktionsmanager Aktionen in einer RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

162

2

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.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.

2.4 VCL für .NET – Anleitungen RAD Studio für .NET dbExpress.NET-Datenbankanwendungen

163

2

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. 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.

dbExpress.NET-Datenbankanwendungen RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

164

2

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 einerXML-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)>]> <StockHoldings> <Stock exchange="NASDAQ"> <name>Borland</name> <price>10.375</price> <symbol>BORL</symbol> <shares>100</shares> </Stock>

2.4 VCL für .NET – Anleitungen RAD Studio für .NET Anwendungen mit XML-Komponenten

165

2

<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.

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

Anwendungen mit XML-Komponenten RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

166

2

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 kleinereQuelltextä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:

case Msg.WParam of

durch eine der folgenden Anweisungen:

case Msg.WParam.ToInt64 of // spezifisch für VCL.NETcase Int64(Msg.WParam) of // 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

2.4 VCL für .NET – Anleitungen RAD Studio für .NET Ausführen von Änderungen, die wegen der

167

2

der folgende:

if Msg.WParam in [1..5] then

muss durch einen der folgenden ersetzt werden:

if Msg.WParam.ToInt64 in [1..5] then // spezifisch für VCL.NETif Int64(Msg.WParam) in [1..5] then // 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]; // spezifisch für VCL.NETS := StrArray[Int64(Msg.WParam)]; // 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. 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

Ausführen von Änderungen, die wegen der RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

168

2

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

Siehe auch

Änderungen aufgrund der Unterstützung von 64-Bit .NET 2.0 ( see page 63)

2.4 VCL für .NET – Anleitungen RAD Studio für .NET Eine neue VCL.NET-Komponente erstellen

169

2

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-Palettehinzufü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.

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:

Bitmap-Grafik in einer RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

170

2

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:

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 ( see page 176)

Abgerundete Rechtecke in einer VCL-Anwendung zeichnen ( see page 177)

2.4 VCL für .NET – Anleitungen RAD Studio für .NET Bitmap-Grafik in einer

171

2

Bitmap-Grafik in ein Steuerelement einer VCL-Formularanwendung einfügen ( 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.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.

Abgerundete Rechtecke in einer RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

172

2

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:

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);

2.4 VCL für .NET – Anleitungen RAD Studio für .NET Gerade Linien in einer

173

2

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.

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.

Bitmap-Grafik in ein Steuerelement einer RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

174

2

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önnennicht direkt in VCL-Anwendungen aufgenommen werden. Sie können diese Komponenten jedoch in einen ActiveX-Wrapperverpacken, den Sie dann der VCL.NET-Anwendung hinzufügen. RAD Studio stellt hierfür den .NET-Importexperten zurVerfügung.

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

2.4 VCL für .NET – Anleitungen RAD Studio für .NET .NET-Steuerelemente in VCL.NET

175

2

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 ( see page 77)

.NET-Steuerelemente in VCL.NET RAD Studio für .NET 2.4 VCL für .NET – Anleitungen

176

2

2.5 ASP.NET – Anleitungen Dieser Abschnitt enthält Anleitungen zur Entwicklung von ASP.NET Web Forms-Anwendungen.

Themen

Name Beschreibung

ASP.NET-Anwendungen erstellen ( see page 186) 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.

ASP.NET-Datenbankanwendung erstellen ( see page 187) 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)

ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 1 ( see page 189)

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 ( see page 191)

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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET

177

2

ASP.NET-Anwendung mit Datenbanksteuerelementen entwickeln, Teil 3 ( see page 192)

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.

ASP.NET-Anwendung "Hello World" erstellen ( 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.

Erstellen einer ASP.NET Sitemap ( 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 ( see page 194)

Aktenkoffermodell-Anwendung mit DB Web Controls erstellen ( see page 198) 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.

Anwendung mit DB Web Controls erstellen ( see page 199) 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)

RAD Studio für .NET 2.5 ASP.NET – Anleitungen

178

2

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 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.

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 ( see page 204)

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.

ASP.NET-Anwendungen debuggen und aktualisieren ( 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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET

179

2

Berechtigungen für die Nutzung von XML-Dateien festlegen ( see page 208) 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.

Fehlerbehebung in ASP.NET-Anwendungen ( see page 209) 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.

Den DB Web Control-Experten verwenden ( see page 211) 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.

Den ASP.NET-Deploymentmanager verwenden ( see page 212) 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)

Mit dem HTML-Tag-Editor arbeiten ( see page 215) 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)

ASP.NET User Controls verwenden ( see page 216) 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.5.1 ASP.NET-Anwendungen erstellen

Die folgende Anleitung beschreibt die grundlegenden Schritte zum Erstellen eines einfachen ASP.NET-Projekts. Informationenzu 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.

ASP.NET-Anwendungen erstellen RAD Studio für .NET 2.5 ASP.NET – Anleitungen

180

2

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 ( 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)

2.5 ASP.NET – Anleitungen RAD Studio für .NET ASP.NET-Datenbankanwendung erstellen

181

2

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 einemDatengitter (DataGrid) angezeigt.

Detailliertere Datenbankbeispiele, die andere Datenbanktechnologien für ASP.NET 2.0 verwenden, finden Sie unterASP.NET-Anwendung mit Datenbanksteuerelementen erstellen 1 ( see page 189).

BDP.NET enthält Komponenten-Designer, mit deren Hilfe sich Datenbankanwendungen einfach erstellen lassen. Anstatt jedeeinzelne Komponente in einem Designer zu platzieren und zu konfigurieren, lassen sich mit den BDP.NET-DesignernDatenbankkomponenten deutlich schneller erstellen und konfigurieren. Die folgende Anleitung zeigt die Funktionsweise derHauptkomponenten 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.

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

ASP.NET-Datenbankanwendung erstellen RAD Studio für .NET 2.5 ASP.NET – Anleitungen

182

2

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:

2.5 ASP.NET – Anleitungen RAD Studio für .NET ASP.NET-Datenbankanwendung erstellen

183

2

this.dataGrid1.DataBind();Self.dataGrid1.DataBind();

Anmerkung: Wenn Sie datensensitive Steuerelemente verwenden, beispielsweise von einem Fremdhersteller, müssen Sieunter 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.

• 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.

ASP.NET-Anwendung mit RAD Studio für .NET 2.5 ASP.NET – Anleitungen

184

2

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

2.5 ASP.NET – Anleitungen RAD Studio für .NET ASP.NET-Anwendung mit

185

2

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. Inden 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. 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

ASP.NET-Anwendung mit RAD Studio für .NET 2.5 ASP.NET – Anleitungen

186

2

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. Indiesem 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.

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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET ASP.NET-Anwendung mit

187

2

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 Erstelleneiner ASP.NET-Anwendung erforderlich sind. Die Anwendung verwendet ein Web Form, Steuerelemente und ein Ereignis, dasin 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):

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.

ASP.NET-Anwendung "Hello World" RAD Studio für .NET 2.5 ASP.NET – Anleitungen

188

2

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ürSeiten 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 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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET Erstellen einer ASP.NET Sitemap

189

2

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 denneuen 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:

<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 mehrereBereiche (<div>), die im Design-Fenster als Rechtecke angezeigt werden. Der Platzhalter für den Inhalt wurde auf der Seitenach rechts verschoben. Master-Seiten werden zum Erstellen von Inhaltsseiten verwendet. Alles, was sich auf der Master-Seitebefindet, erscheint auf einer Inhaltsseite, die auf dieser Master-Seite basiert. Wenn die Master-Seite geändert wird, werdendiese Ä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

Erstellen einer ASP.NET Sitemap RAD Studio für .NET 2.5 ASP.NET – Anleitungen

190

2

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.

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

2.5 ASP.NET – Anleitungen RAD Studio für .NET Erstellen einer ASP.NET Sitemap

191

2

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

Sie können mit Hilfe von DB Web Controls, der XML-Zwischenspeicherung und der BDP.NET-Datenadapter serverseitigeAktenkoffermodell-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 dieStandard-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

Aktenkoffermodell-Anwendung mit DB Web RAD Studio für .NET 2.5 ASP.NET – Anleitungen

192

2

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 ( see page 99)

Anwendung mit DB Web Controls erstellen ( see page 199)

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 WebControls und BDP.NET erstellen können. Wenn die erforderlichen Verbindungsobjekte generiert sind, werden die Daten imProjekt in einer DBWebGrid-Komponente angezeigt, die über eine DBWebNavigator-Komponente gesteuert wird. Zu anderenhä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-,

2.5 ASP.NET – Anleitungen RAD Studio für .NET Anwendung mit DB Web Controls erstellen

193

2

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.

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.

Anwendung mit DB Web Controls erstellen RAD Studio für .NET 2.5 ASP.NET – Anleitungen

194

2

Siehe auch

ASP.NET-Datenbankanwendung erstellen

CodeGear DB Web Controls ( see page 88)

XML-Dateien und DB Web Controls verwenden ( see page 99)

Überblick zum DB Web Control-Experten ( see page 93)

Ü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)

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 istjedoch möglich, ein HTML-Element in ein Server Control zu konvertieren, auf das per Programm zugegriffen und das geändertwerden kann. Die meisten HTML-Elemente, die in der Tool-Palette angeboten werden, lassen sich mit Hilfe des Befehls AlsServer-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 einbody-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.

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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET HTML-Elemente in Server Controls

195

2

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 vonPrototypanwendungen an, die keine Lese- und Schreibzugriffe auf eine Datenbank erfordern. Die betreffenden XML-Dateienmüssen aber vorher erstellt werden. Ideal geeignet für diesen Zweck ist die DBWebDataSource-Komponente. Mit ihrer Hilfekönnen Sie eine XML-Datei erstellen, die auf echten Datenbankdaten basiert. In der vorliegenden Anleitung wird davonausgegangen, 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 dieStandard-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. 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).

XML-Datei für DB Web Controls erstellen RAD Studio für .NET 2.5 ASP.NET – Anleitungen

196

2

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 ( see page 99)

Überblick zu Borland DBWeb Controls ( see page 88)

Anwendung mit DBWeb Controls erstellen ( see page 199)

Berechtigungen für die Nutzung von XML-Dateien festlegen ( see page 208)

ASP.NET-Datenbankanwendung erstellen ( 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 Siemöglicherweise Metadaten erzeugen, um die XML-Daten im DataSet-Objekt zu strukturieren. Wird die XML-Datei ohneXML-Schemadatei (.xsd) erstellt, müssen die Metadaten manuell erzeugt werden. In der vorliegenden Anleitung wird davonausgegangen, 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 dieStandard-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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET Metadaten für eine Datenmenge erstellen

197

2

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"> /// XML-Deklaration<NewSongs> /// <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

Wenn Sie eine ASP.NET-Anwendung erstellen, erzeugt die IDE ausgehend von den Einstellungen im Dialogfeld NeueASP.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 dieStandard-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

Virtuelle Verzeichnisse erstellen RAD Studio für .NET 2.5 ASP.NET – Anleitungen

198

2

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 eineDatenspalte 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 dieStandard-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. 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 aktualisiertwerden soll. Dies ist für das Debuggen von RAD Studio-Anwendungen unter IIS erforderlich. Wenn Sie auf die Frage mit Ja

2.5 ASP.NET – Anleitungen RAD Studio für .NET ASP.NET-Anwendungen debuggen und

199

2

antworten, werden Borland-Debugger-Informationen in die Datei machine.config geschrieben und den Anwendungen zurVerfü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 Anwendunggeschrieben, wenn Sie eine ASP.NET-Anwendung mit RAD Studio erzeugen. Für Anwendungen, die mit Delphi 8 erstelltwurden, müssen Sie diese Informationen manuell in die Datei web.config einfügen. Andernfalls kann beim Versuch, dieAnwendung mit RAD Studio zu debuggen, folgende Fehlermeldung angezeigt werden:

Debugging kann auf dem Webserver nicht gestartet werden. Zu Arbeitsprozess ASP.NET kann nichtverbunden 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.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>

Deployment einer ASP.NET-Anwendung RAD Studio für .NET 2.5 ASP.NET – Anleitungen

200

2

<!-- 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 Fehlermeldungenausgegeben. Grund hierfür ist die Einstellung einer bestimmten Option im Internet Explorer. Sie können das Debuggen IhrerAnwendung 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

2.5 ASP.NET – Anleitungen RAD Studio für .NET Spalten in DBWebGrid-Objekten binden

201

2

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 dieStandard-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.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 IhreASP.NET-Anwendungen nutzen, Berechtigungen zuweisen. Sie haben hierzu zwei Möglichkeiten, die im Folgenden beschriebenwerden.

Anmerkung: DB Web Controls (Namespace Borland.Data.Web) sind seit 2007 veraltet. Sie sollten statt dessen dieStandard-Websteuerelemente verwenden.

Berechtigungen für die Nutzung von RAD Studio für .NET 2.5 ASP.NET – Anleitungen

202

2

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 ( see page 99)

XML-Datei für DB Web Controls erstellen ( see page 201)

2.5.20 Fehlerbehebung in ASP.NET-Anwendungen

Im Gegensatz zu herkömmlichen, fensterbasierten Anwendungen sind Webanwendungen von Servern und Ressourcenabhängig, die nicht unmittelbar durch die Anwendung oder den Benutzer gesteuert werden können. Viele Webanwendungengreifen auf Client-, Server- und Netzwerkressourcen zu.

Um Fehler zu minimieren, müssen die Bereiche ASP.NET-Installation, IIS-Installation und -Konfiguration und Sicherheit einerbesonderen Überprüfung unterzogen werden. Alle drei Bereiche sind sehr umfangreich und komplex. In den folgendenAnleitungen werden Lösungen für die gängigsten Probleme vorgestellt.

Anmerkung: Die folgenden Lösungen gelten nur für IIS 5.1.

2.5 ASP.NET – Anleitungen RAD Studio für .NET Fehlerbehebung in

203

2

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. 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.

Fehlerbehebung in RAD Studio für .NET 2.5 ASP.NET – Anleitungen

204

2

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.

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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET Fehlerbehebung in

205

2

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 dieStandard-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 ( see page 93)

Überblick zu Borland DB Web Controls ( 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 derAnwendung zu vereinfachen. Der Deploymentmanager bestimmt die Dateien, die für das Deployment erforderlich sind, fordertden Namen des Zielverzeichnisses und die Verbindungsinformationen an und kopiert die Dateien in das Zielverzeichnis. DerDeploymentmanager erzeugt eine Liste der zu kopierenden Dateien basierend auf den Namen der Dateien imProjektverzeichnis. 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,

Den ASP.NET-Deploymentmanager RAD Studio für .NET 2.5 ASP.NET – Anleitungen

206

2

Kopieren, Löschen, Ändern und Filtern der Zieldateien angezeigt.

Ist die Option Assemblierungsreferenzen anzeigen aktiviert, enthält das Fenster des Deploymentmanagers eine Liste mit allenvom 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 einemDialogfeld mit einer Checkliste sind bereits die BDP-Datenbankbibliotheken markiert, da diese häufig weitergegeben werdenmüssen. Sie können auch Datei Öffnen wählen und die gewünschten Dateien in einem separaten Dialogfeld der Listehinzufü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 diesesThemas.

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. Ä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"/>

2.5 ASP.NET – Anleitungen RAD Studio für .NET Den ASP.NET-Deploymentmanager

207

2

</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)nach Ziel kopieren

Die ausgewählten Dateien werden in das Zielverzeichnis kopiert.

Markierte Zieldatei(en)löschen

Die ausgewählten Dateien werden im Zielverzeichnis gelöscht (für jede Datei wird eine Bestätigungdes Vorgangs gefordert).

Namen der Zieldateiändern

Ein Dialogfeld zum Umbenennen der ausgewählten Datei im Zielverzeichnis wird geöffnet.

Alle neuen undgeänderten Dateiennach Ziel kopieren

Alle mit markierten Dateien werden in das Zielverzeichnis kopiert. Dieser Befehl steht auch in derSymbolleiste des Deploymentmanagers zur Verfügung oder kann durch Klicken mit der rechtenMaustaste auf den .bdsdeploy-Knoten in der Projektverwaltung aufgerufen werden.

Alle nicht im Projektenthaltenen Zieldateienlöschen

Alle mit markierten Dateien werden im Zielverzeichnis gelöscht (für jede Datei wird eineBestätigung des Vorgangs gefordert).

Ignorierte Gruppen undDateien anzeigen

Alle Dateien im Projektverzeichnis werden angezeigt, auch diejenigen, die für das Deployment derAnwendung nicht erforderlich sind.

Gruppe ignorieren Die ausgewählte Datei wird vom Deploymentmanager ignoriert.

Den ASP.NET-Deploymentmanager RAD Studio für .NET 2.5 ASP.NET – Anleitungen

208

2

Datei(en) ignorieren Alle Dateien eines Knotens in der Quelldateiliste werden vom Deploymentmanager ignoriert.

Protokollierungaktivieren

Die Aktionen des Deploymentmanagers werden in der Datei DeployLog.txt im Projektverzeichnisprotokolliert.

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 vorhandenoder 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 diesemSymbol können in der Regel ohne nachteilige Auswirkungen aus dem Zielverzeichnis entferntwerden.

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 imProjektverzeichnis.

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.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 unterhalbdes Designer-Fensters. Für ASP.NET Webformulare wird der Tag-Editor nicht unterstützt. Wenn Sie beispielsweise einHTML-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 imDesigner-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 diesenFunktionen 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

2.5 ASP.NET – Anleitungen RAD Studio für .NET Mit dem HTML-Tag-Editor arbeiten

209

2

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 Ansichtvergröß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-Markupplatzieren und den Zoom-Befehl aufrufen, gelangen Sie zum äußeren Tag, d.h. auf die Ebene oberhalb des Attributs, auf demsich der Cursor befindet.

Die Überprüfung auf HTML-Standardregeln wird automatisch durchgeführt. Wenn diese Validierung fehlschlägt, wird dasfehlerhafte 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.

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.

Mit dem HTML-Tag-Editor arbeiten RAD Studio für .NET 2.5 ASP.NET – Anleitungen

210

2

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 alleASP.NET-Webanwendungen bereitzustellen. Es ist beispielsweise möglich, einen Anmeldebildschirm in einem User Control zukapseln. Wenn später in einem Web Form ein Anmeldebildschirm benötigt wird, muss nur das betreffende User Control in dasWeb Form eingefügt werden. Ausführliche Informationen über User Controls erhalten Sie über den Link am Ende diesesThemas.

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.

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.

2.5 ASP.NET – Anleitungen RAD Studio für .NET ASP.NET User Controls verwenden

211

2

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

ASP.NET User Controls verwenden RAD Studio für .NET 2.5 ASP.NET – Anleitungen

212

2

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 ( see page 218)

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.

Webreferenzen in ASP.NET-Projekte einfügen ( see page 220) 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.

ASP.NET-Web-Services-Anwendung "Hello World" erstellen ( see page 222) 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.

Web-Services-Client-Anwendung von Delphi für Win32 nach Delphi für .NET portieren ( see page 223)

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 aufdie ASP.NET-Web-Services-Anwendung zugegriffen werden kann. Um das gewünschte Ergebnis zu erzielen, sind andereEntwicklungsschritte 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.

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.

2.6 Web-Services-Anleitungen RAD Studio für .NET Auf die

213

2

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 WebService1im 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-Servicerepräsentiert. Das Click-Ereignis verwendet Methoden der Proxy-Klasse für den Zugriff auf den Web-Service. Für einen Delphifür .NET-Client muss eventuell der Unit-Name der Proxy-Klasse (z.B. localhost.WebService1) in die uses-Klausel derWindows 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(); }

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 ( see page 106)

ASP.NET-Web-Services-Support ( see page 110)

ASP.NET-Web-Services-Anwendung "Hello World" erstellen ( see page 222)

Webreferenzen in ASP.NET-Projekte RAD Studio für .NET 2.6 Web-Services-Anleitungen

214

2

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 diesenAnleitungen wird die Erstellung einer ASP.NET-Client-Anwendung demonstriert, die einen Web-Service eines Fremdherstellersnutzt. Dabei handelt es sich um den Web-Service DeadOrAliveWS, der auf der XMethods-Website zur Verfügung steht. Mit Hilfedieses Web-Service können Sie auf eine einfache Datenbank mit den Geburts- und Todestagen berühmter Persönlichkeitenzugreifen.

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

2.6 Web-Services-Anleitungen RAD Studio für .NET Webreferenzen in ASP.NET-Projekte

215

2

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;

Beim Hinzufügen der Webreferenz hat RAD Studio mit WSDL eine Proxy-Klasse erzeugt, die den "Hello World"-Web-Servicereprä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 derWeb 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

Webreferenzen in ASP.NET-Projekte RAD Studio für .NET 2.6 Web-Services-Anleitungen

216

2

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 derClient-Anwendung eine bestimmte Funktionalität bereitstellen. Die folgenden Schritte zeigen, wie eine einfache "HelloWorld"-Anwendung mit ASP.NET-Web-Services erstellt wird. Nach dem Build stellt die Anwendung alle in ihr definierten Objekteund 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:

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.

2.6 Web-Services-Anleitungen RAD Studio für .NET ASP.NET-Web-Services-Anwendung

217

2

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 Webmethodenverwenden 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 manchenWindows XP-Rechnern muss beispielsweise für localhost der Computername angegeben werden. Wenn der Rechner z.B. denComputernamen 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 ( see page 106)

ASP.NET-Web-Services-Support ( 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

Im Folgenden werden die Schritte beschrieben, die zum Portieren einer mit Delphi für Win32 erstelltenWeb-Services-Client-Anwendung nach Delphi für .NET ausgeführt werden müssen.

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.

Web-Services-Client-Anwendung von RAD Studio für .NET 2.6 Web-Services-Anleitungen

218

2

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); // 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

2.6 Web-Services-Anleitungen RAD Studio für .NET Web-Services-Client-Anwendung von

219

2

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 Frameworkstellt eine automatische Garbage Collection zur Verfügung, sodass bestimmte Beschränkungen, die in früherenDelphi-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 grundlegendenSchritte, 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 ( see page 80)

Überblick zu Web-Services ( see page 106)

Web-Services-Client-Anwendung von RAD Studio für .NET 2.6 Web-Services-Anleitungen

220

2

Index

.

.NET-Datentypen

ADO.NET 12

.NET-Steuerelemente

VCL und .NET-Steuerelemente 180

.NET-Steuerelemente in VCL.NET importieren 180

AAbgerundete Rechtecke in einer VCL-Formularanwendung zeichnen 177

ADO.NET

Anweisungstext-Editor 137, 138

Architektur 15

ASP.NET 85

Datenadapter-Vorschau 136

Datenbankanwendungen 161

Namespace 15

Überblick 15, 77

Übersicht 63

Verbindungskomponenten 161

ADO.NET-Anwendungen 187

ADO.NET-Datenbankanwendungen mit VCL.NET-Formularen erstellen 161

ADO.NET-Komponentendesigner 23

AdoDbx

BDP-Migration 18

AdoDbx.NET

Datenprovider 28

Datentypen 12

AdoDbx.NET-Datentypen 12

AdoDbx.NET-Komponenten

ADO 28

AdoDbx-Client

Überblick 6

AdoDbx-Client-Verbindung

herstellen 119

Aggregatwerte mit der DBWebAggregateControl-Komponente

hinzufügen 204

Aktenkoffermodell-Anwendung

AutoUpdateCache (Eigenschaft) 198

Aktenkoffermodell-Anwendung mit DB Web Controls erstellen 198

Aktionen in einer VCL-Formularanwendung erstellen 163

ÄÄnderungen aufgrund der Unterstützung von 64-Bit .NET 2.0 63

AAnleitung zum Hinzufügen eines Dialogfelds zur Fehlerbehebung zu einer BDP-Anwendung. 116

Anleitungen 113

Anleitungen für die Modellierung 152

Anweisungstext-Editor verwenden 137

Anwendung mit DB Web Controls erstellen 199

Anwendungen mit nicht verwaltetem Code entwickeln 41

Anwendungen mit VCL.NET-Komponenten entwickeln 62

Anwendungen mit XML-Komponenten erstellen 169

ASP.NET

Architektur 85

DB Web Controls 199

Ü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

ASP.NET User Controls verwenden 216

ASP.NET-Anwendung 186, 189, 191, 192, 193, 194

ASP.NET-Anwendung "Hello World" erstellen 193

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-Anwendungen debuggen und aktualisieren 205

ASP.NET-Anwendungen erstellen 186

3 RAD Studio für .NET

a

ASP.NET-Benutzerkonto

Sicherheitslücken 209

ASP.NET-Datenbankanwendung erstellen 187

ASP.NET-Fehler

HTTP-Meldungen 207

ASP.NET-Lebenszyklus

ASP.NET-Verarbeitung 93

ASP.NET-Projekt 186, 193

ASP.NET-Seite 186, 193

ASP.NET-Web-Services-Anwendung "Hello World" erstellen 222

ASP.NET-Web-Services-Support 110

Auf die ASP.NET-Web-Services-Anwendung "Hello World" zugreifen 218

Auflösung

mehrere Tabellen 132

Ausführen von Änderungen, die wegen der Unterstützung von 64-Bit .NET 2.0 erforderlich sind 171

AutoUpdateCache

UseUniqueFileName 198

BBDE.NET

Datenbanken 7

BDP-Migration 18

BDP-Migration: Überblick 18

Beispiele

ASP.NET-Anwendung &quot;Hello World&quot; 193

Benutzerauthentifizierung

UseUniqueFileName 208

Benutzeroberflächen

ADO.NET 15

Berechtigungen für die Nutzung von XML-Dateien festlegen 208

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

Bitmaps

Kombinationsfeld 178

Blackfish SQL - Überblick 21

CCallback-Funktionen

Funktionen 48

ClearSessionChanges (Methode) 101

Client-Datenmenge

TClientDataSet 167

Codebehind-Logik 186, 193

Code-Visualisierung 58, 152, 154, 155

Diagramme exportieren 152

Code-Visualisierung - Überblick 58

Code-Visualisierungsdiagramme als Grafik exportieren 152

COM Interop 41, 150

Interop-Assemblierungen in der IDE 41

SDK-Tools 41

Terminologie 41

COM Interop in verwalteten Anwendungen 41

COM-Interfaces

Interfaces 48

DDataHub (Komponente)

konfigurieren 132

DataSet

Tabellenzuordnungen 120

DataSnap .NET-Client

Datenbanken 7

DataSync (Komponente)

konfigurieren 132

DataView-Einschränkungen

Datensätze einfügen 101

DataView-Objekte

Laufzeiteigenschaften 101

Daten

migrieren 124

Remoting-Komponenten 147

RAD Studio für .NET 3

b

Daten zwischen Datenbanken migrieren 124

Datenadapter-Vorschau verwenden 136

Datenbank

Datenadapter-Vorschau verwenden 136

Datenmengen-Designer verwenden 143

Fehlerbehebung hinzufügen 116

neue Verbindung hinzufügen 116

Projekte erstellen 132

Datenbank durchsuchen 118

Datenbank im Daten-Explorer durchsuchen 118

Datenbankanleitungen 114

Datenbankanwendungen mit ADO.NET entwickeln 3

Datenbanken

Anweisungstext-Editor 137

DataAdapter-Designer 138

DataSet-Designer 140

dbExpress 32, 34

dbExpress für .NET 10

dbGo für .NET 11

neue Verbindung hinzufügen 139

Objekte suchen 118

Projekte erstellen 120, 147

SQL ausführen 122

Verbindungen 126

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

Datenprovider

Architektur 28

Datenprovider für .NET (AdoDbx)

ADO.NET 28

Datenprovider für Microsoft .NET 28

Datentypen

ADO.NET 28

DB Web Control-Experte

benutzerdefinierte Controls 93

DB Web Controls

Architektur 88

ASP.NET 88

Bibliothek 211

erweitern 93

konfigurieren 199

Namespace 88

Projekte vorbereiten 199

WebDataLink-Interfaces 103

DB Web Controls in Haupt-/Detail-Anwendungen verwenden 90

DB Web-Interfaces 93

DB2

AdoDbx.NET 12

dbExpress Framework-Kompatibilität 34

dbExpress.NET

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

3 RAD Studio für .NET

c

BDE-Anwendungen für .NET 27

BDP.NET-Anwendungen 27

COM Interop-Anwendungen 47

Datenbankanwendungen 27

DB Web Controls 88

dbExpress-Anwendungen für .NET 27

dbGo-Anwendungen für .NET 27

Deployment einer ASP.NET-Anwendung mit Blackfish SQL an ein System ohne RAD Studio 206

Deployment von ASP.NET-Anwendungen 102

Deployment von COM Interop-Anwendungen 47

Deployment von Datenbankanwendungen für das .NET Framework 27

Designer für Datenadapter verwenden 138

DrInterop verwenden 46

EECO-Framework 153

Eine Datenbankanwendung für die Auflösung in mehrere Tabellen erstellen 132

Eine neue VCL.NET-Komponente erstellen 174

Eine verteilte Datenbankanwendung erstellen 147

Einführung in InterBase Express 35

Ereignisbehandlungsroutinen

OnPaint 176, 177

erstellen

Anwendungen mit XML-Komponenten 169

VCL-Formularanwendung &quot;Hello World&quot; 165

VCL-Formularmenüs 166

Erstellen einer ASP.NET Sitemap 194

FFehler in Tabellenzuordnungen behandeln 123

Fehlerbehebung in ASP.NET-Anwendungen 209

GGerade Linien in einer VCL-Formularanwendung zeichnen 177

HHaupt

Detail-Beziehungen/DataView-Objekte 101

Herstellen einer Verbindung zu einer Datenbank mit dem dbExpress Treiber-Framework 145

Hinzufügen einer J2EE-Referenz 150

HTML-Elemente in Server Controls konvertieren 200

HTML-Tag-Editor

HTML-Tags bearbeiten 215

HTTP

Meldungen 209

HTTP-Meldungen

Fehler 207

HTTP-Meldungen in ASP.NET erzeugen 207

IIBX.NET

InterBase 7

IDBWebColumnLink

IDBWebDataLink 103

IDBWebLookupColumnLink 103

IDBWebDataLink 103

IIS

Fehlerbehebung 209

Importieren und Exportieren eines Modells mit XMI Metadata Interchange (XMI) 153

Interbase

Verbindungen 126

InterBase

ADO.NET 12

Komponenten 35

Interfaces

AdoDbx.NET 28

Interfaces für virtuelle Bibliotheken 56

Interoperative Anwendungen – Anleitungen 150

KKombinationsfeldereignisse

RAD Studio für .NET 3

d

OnDrawItem 178

Komponenten

datensensitive 88

importieren 77

Verbindung 88

Komponentendesigner

Anweisungstext-Editor 23

Beziehungen 23

Datenadapter konfigurieren 23

Datenmenge 23

Stored Procedures (Dialogfeld) 23

Verbindungseditor 23

konfigurieren

Datenkomponenten 187

IIS 161, 186

Verbindungskomponenten 187

Web-Server 187, 193

Konstruktoren

Destruktoren 64

Konzepte 1

LLogische Datentypen

AdoDbx.NET 12

MMehrstufige Aktualisierungen

Datenbanken 90

Mehrstufige Löschvorgänge

Datenbanken 90

Menüs

Aktionen 163

Beispielanwendung 163

Standardaktionen 163

VCL-Formulare 163

Metadaten

XML-Schemadateien 203

Zuordnung zu Datenmengen 203

Metadaten für eine Datenmenge erstellen 203

migrieren

Tabellen 124

MissingMappingAction (Eigenschaft)

Fehler 123

MissingSchemaAction (Eigenschaft)

Fehler 123

Mit DataView-Objekten arbeiten 101

Mit dem Aktionsmanager Aktionen in einer VCL-Formularanwendung erstellen 166

Mit dem HTML-Tag-Editor arbeiten 215

Modellierung 58

MS SQL

ADO.NET 12

NNeue Funktionen der Programmiersprache 75

Neue Verbindung in Daten-Explorer einfügen 116

Nicht verwaltete Funktionen

Win32 API 48

Nullwerte in Aggregaten

Caption (Eigenschaft) 204

OObjektreferenzen

Referenzen übergeben 48

Oracle

ADO.NET 12

PParameter

Datenbanken 134

Parameterübergabe in einer Datenbankanwendung 134

Pascal

Änderungen der Programmiersprache 75

PInvoke

Platform Invoke 48

Platform Invoke mit Delphi für .NET verwenden 48

Polygone

zeichnen 177

3 RAD Studio für .NET

e

Portieren

VCL.NET portieren 77

Portieren von VCL-Anwendungen nach RAD Studio 64

Property Builder

DB Web Controls 207

Protokoll-Stack von Web-Services 108

RRave Reports 60

neue Berichte erstellen 60

Rave Reports in RAD Studio verwenden 60

Rechtecke und Ellipsen in einer VCL-Formularanwendung zeichnen 176

Referenzen zu einem COM-Server hinzufügen 150

Render (Methode)

Seite aufbauen 93

Ressourcen

Migration 64

Ssenden

Befehle 187

ServerSupport

ASP.NET 85

Spalten in DBWebGrid-Objekten binden 207

SQL im Daten-Explorer ausführen 122

Standarddatenmengen verwenden 140

Stored Procedures

Überblick 31

String

char 64

Strukturen

Zeiger 48

Sybase

ADO.NET 12

TTabellen

Zuordnungen 120

Tabellenzuordnungen

Fehler 123

konfigurieren 120

Löschen 120

Tabellenzuordnungen erstellen 120

Tag-Editor 215

TDataSetProvider

dbExpress-Provider 167

TDataSource

dbExpress-Datenquelle 167

TDBGrid

dbExpress-Verbindung 167

Text löschen 166

Typisierte Datenmengen verwenden 143

Typumwandlungen

Cracker 64

ÜÜberblick über AdoDbx Client 6

Überblick zu ADO.NET 15

Überblick zu ASP.NET 85

Überblick zu CodeGear DB Web Controls 88

Überblick zu dbExpress-Komponenten 10

Überblick zu dbGo-Komponenten 11

Überblick zu den ASP.NET-Web-Services 106

Überblick zu Stored Procedures 31

Überblick zu VCL für .NET 77

Überblick zum BDP-Verbindungs-Pooling 9

Überblick zum DB Web Control-Experten 93

Überblick zur Navigations-API der DB Web Controls 92

Uunidirektionale Datenmengen

TSQLDataSet 167

Unidirektionale Datenmengen

dbExpress-Komponenten 167

untergeordnete Knoten anzeigen 169

RAD Studio für .NET 3

f

VVarianten

TVarRec 64

VCL

portieren 75

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

Architektur 77

Namespace 77

portieren 64

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

Verbindung einrichten

DataBind 187

DataGrid 187

Datenquelle 187

Verbindungen

Datenbankverbindungen 126

MS Access-Verbindung 126

MS SQL Server-Verbindung 126

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

Virtuelles Verzeichnis, erstellen in der IDE 204

Vorfahr

Basis 174

WWebanwendungen 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

3 RAD Studio für .NET

g

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

XXML

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

Zzeichnen

gerade Linien 177

Rechtecke und Ellipsen 176

Zeigertypen

portieren 64

RAD Studio für .NET 3

h