By cmu
Im folgenden wird anhand der Tabelle authors aus der Datenbank pubs demonstriert, wie eine dynamische Selektion über den Anfangsbuchstaben aussehen könnte.
Zur Verwendung von dynamischen Abfragen sind folgende Schritte notwendig:
select * from authors where au_lname like @Anfang + '%'
select distinct Substring(au_lname,1,1) as Anf from authors
Gelegentlich möchte man einen Report gegen mehrere Server laufen lassen, ohne ihn mehrfach bereitzustellen oder jedesmal die Datenquelle zu ändern. Zu diesem Zweck verwendet man einen dynamischen Connection-String, der mit einem Auswahlfeld verknüpft wird. Falls man auch noch die Datenbank auswählen will, kann dies über den gleichen Mechanismus erfolgen.
Der Bericht darf keine freigegebene Datenquelle verwenden! Stattdessen wird zur Entwicklung eine nicht freigegebene Datenquelle verwendet. Hier kann auch schon eine zweite Datenquelle gegen den gleichen Server angelegt werden, die später geändert wird. Aber erst wenn der Bericht gegen einen Server läuft, wird die dynamische Datenquelle verwendet. Andernfalls gestaltet sich der Test der Datasets unnötig kompliziert.
Im Dataset wird die Datenquelle geändert auf die Dynamische Datenquelle. Dieser erhält als Connection-String folgenden Text:
="data source=" & Parameters!ServerName.Value & ";initial catalog=master"
Die Liste der Datenbanken erhält man über das einfache Statement
select name from master.dbo.sysdatabases order by name
Wobei dieses Dataset auch die dynamische Verbindung nutzen sollte.
Wenn der Bericht bereitgestellt ist, erhält man einen Parameter, über den man zur Laufzeit die Serververbindung ändern kann. Der Standardwert des Parameters wird für den ersten Aufruf des Berichts verwendet. Weiterhin erhält man eine List-Box für den Datenbanknamen. Nach Änderung des Servernamens wird diese List-Box automatisch aktualisiert.