title image


Smiley Re: Werd ich machen...
Hab gerade einen NewsLetter reinbekommen, wo folgender Tipp drinsteht, der Dir vielleicht auch etwas weiterhilft (Ist allerdings kein Ersatz für ein dynamische SQL - Suchformular):







Abfragen als Datenbasis für Formulare dynamisch zuordnen

Versionen: Access 97, 2000, 2002/XP und 2003



In vielen Datenbanken werden Abfragen eingesetzt, die aus Tabellen

anhand von unterschiedlichen Kriterien Datensätze selektieren und die

jeweils gleich aufgebauten Formularen als Datenbasis dienen. Nehmen

wir als Beispiel eine Kunden-Verwaltung: Hier besteht häufig die

Anforderung, im Formular jeweils nur die Kunden eines bestimmten

Landes anzuzeigen, um flüssiger in den Datensätzen blättern zu können

und die Übersicht zu erhöhen. Dazu werden dann mehrere

Abfragen "Kunden/Deutschland", "Kunden/England", "Kunden/Frankreich"

und so weiter mit entsprechenden Kriterien der

Form 'Land="Deutschland"', 'Land="England"', 'Land="Frankreich"'

erstellt und über korrespondierende

Formulare "Kunden/Deutschland" "Kunden/England", "Kunden/Frankreich"

usw. angezeigt.





Die Formulare sind dabei jeweils alle gleich aufgebaut

beziehungsweise durch Kopieren eines einmal erstellten Formulars und

Anpassen der Eigenschaft "Datenherkunft" entstanden. Effektiver wäre

hier die Verwendung eines einzelnen Formulars, dem dynamisch die zu

verwendenden Abfragen zugeordnet werden. Dies könnte beispielsweise

im Formularkopf über ein Kombinationsfeld erfolgen, das alle in Frage

kommenden Abfragen auflistet und nach Auswahl einer dieser Abfragen

die Datenbasis des Formulars entsprechend "umschaltet".







Um eine solche dynamische Auswahl in Ihre Formulare einzubauen, gehen

Sie wie folgt vor:





Erstellen Sie, sofern noch nicht vorhanden, zunächst die Abfragen,

die in einem Kombinationsfeld im Formular zur Auswahl angezeigt

werden sollen und testen Sie sie.



Öffnen Sie das gewünschte Formular im Entwurfsmodus und setzen Sie

die Eigenschaft "Datenherkunft" auf den Namen der Abfrage, die die

standardmäßig anzuzeigen Datensätze liefert. Das könnte zum Beispiel

eine Abfrage "Kunden/Alle" sein, die einfach alle verfügbaren

Datensätze unabhängig vom Land selektiert.







Legen Sie im Formularkopf ein Kombinationsfeld "clAbfrageAuswahl"

oder ähnlich an, dessen Bezeichnung Sie auf "Abfrage:" oder ähnlich

setzen.







Stellen Sie die Eigenschaft "Herkunftstyp" des Kombinationsfeldes

auf "Werteliste" ein.







Geben Sie in der Eigenschaft "Datensatzherkunft" des

Kombinationsfeldes die Namen der zur Auswahl anzuzeigenden Abfragen

getrennt mit Semikolon ein, also zum Beispiel:







Kunden/Alle;Kunden/Deutschland;Kunden/Großbritannien;



Kunden/Frankreich











Stellen Sie die Eigenschaft "Nach Aktualisierung" des

Kombinationsfeldes auf den Eintrag "[Ereignisprozedur]", klicken Sie

auf die Schaltfläche mit den drei Punkten, um den VBA-Editor zu

öffnen und geben Sie die folgenden Anweisungen ein:







Private Sub clAbfrageAuswahl_AfterUpdate()



Dim strX As String







On Error Resume Next



strX = Me.clAbfrageAuswahl



If Err 0 Then Exit Sub







DoCmd.Hourglass True



Me.RecordSource = strX



DoCmd.Hourglass False







End Sub









Speichern Sie das Formular und lassen Sie es über das Menü Ansicht-

Formularansicht testweise anzeigen.





In Zukunft können Sie nun die Abfrage je nach Erfordernis schnell und

einfach über das Kombinationsfeld im Formularkopf auswählen.







Eine ähnliche Funktionalität könnten Sie zwar für das vorgestellte

Beispiel auch über eine Parameterabfrage erzielen, aber diese Technik

ist vor allem deshalb interessant, weil Sie in den Abfragen beliebig

viele Kriterien und Kriterien-Kombinationen einsetzen können, was

sich mit Parameterabfragen nur schwer erzielen lässt.







Und so funktioniert die Lösung: Die Ereignisprozedur "Nach

Aktualisierung" (After_Update) wird von Access aufgerufen, wenn im

Kombinationsfeld eine Auswahl vorgenommen wurde. Dabei lesen wir

zunächst den Namen der ausgewählten Abfrage aus dem Kombinationsfeld

aus. Kommt es hier zu einem Fehler, weil beispielsweise nach der

Auswahl eines Eintrags das Textfeld des Kombinationsfeldes gelöscht

wurde, verlassen wir die Routine ohne weitere Aktion. Andernfalls

weisen wir den Namen der ausgewählten Abfrage der

Eigenschaft "RecordSource" (Datenherkunft) des Formulars zu und

ändern so die Datenbasis.


Mit freundlichen Grüßen aus Wuppertal

Walter Grimm EasyPointer

MS Access 2000/XP, MS SQL Server 2005, Windows XP
C#.Net 2.0 - VS 2005 Std
Bitte immer Erfolgs- oder Misserfolgsmeldung abgeben
++ Emails und Dateianhänge bitte nur nach Absprache ++

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: