PDA

Vollständige Version anzeigen : Auswahl-Kombinationsfeld in einem Unterformular


hoe
07.01.2002, 20:17
Verehrte Gemeinde,

ich habe folgendes Problem:

Im Kopfbereich eines meiner Formulare (FAuftraggeber) ist u.a. ein ungebundenes
Kombinationsfeld (comSuchen) vorhanden, über das ich einen
entsprechenden Datensatz wählen kann über das Ereignis:

Private Sub comSuchen_AfterUpdate()
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[AdresseNr] = " & Str(Me![comSuchen])
Me.Bookmark = rs.Bookmark
End Sub

Das funktioniert hervorragend. Das Kombinationsfeld wird automatisch
mitgeführt, d.h. es zeigt immer den aktuellen Datensatz an über das
Ereignis:

Private Sub Form_Current()
DoCmd.Maximize
If Not (IsNull(Me![AdresseNr])) Then
Me!comSuchen.Value = Me![AdresseNr]
DoCmd.GoToControl "comSuchen"
Else
Me!comSuchen.Value = ""
DoCmd.GoToControl "Kategorie"
End If

'... (Einige andere Abläufe, die hier egal sind)

End Sub

In diesem Hauptformular befinden sich mehrere Unterformulare, u.a.
eines für die Anzeige der Ansprechpartner der Auftraggeber
(UFAnsprechpartnerAuftraggeber).

Ich möchte nun im Kopfbereich dieses Unterformulars ebenfalls ein ungebundenes
Kombinationsfeld zur Suche und Auswahl eines bestimmten
Ansprechpartners installieren.
Dies gelingt mir aber nicht, da ich die Wahl der Ansprechpartner nicht
entsprechend einschränken kann auf die Ansprechpartner des im
Hauptformular gewählten Auftraggebers.
Haupt- und Unterformular sind verknüpft über das Feld [AdresseNr].
Wie erstelle ich einen Filter (eine SQL-Abfrage), die die Datensätze im comSuchen-Kombinationsfeld des Unterformulars auf die Ansprechpartner einschränkt, die zum Datensatz des Hauptformulars (also mit der gleichen [AdresseNr]) passen?
Auf die immer wieder zitierten FAQ von <a href="http://www.donkarl.com" target="_blank">www.donkarl.com</a> kann derzeit offenbar nicht zugegriffen werden.

Wer weiß Rat?

A.S.
07.01.2002, 20:52
Hallo Hoe,

Dein Kombinationsfeld im Unterformular dürfte ja als Herkunftstyp "Tabelle/Abfrage" eingetragen haben.

Gehe nun entweder hin und erstelle über den "..."-Button am Ende der Eigenschaft "Datensatzherkunft" einen SQL-String oder gib diesen direkt in die Eigenschaft ein.

BTW Es wird der Abfrageeditor geöffnet. Wird dieser geschlossen ohne zu speichern, wird der SQL-String in die "Datensatzherkunft"-Eigenschaft übertragen. Wird gespeichert enthält die Eigenschaft den Namen der gespeicherten Abfrage.

Als SQL-String würde ich zum Beispiel eingeben:

SELECT tbl_Ansprechpartner.ID,
tbl_Ansprechpartner.GesName
FROM tbl_Ansprechpartner
WHERE tbl_Ansprechpartner.AdresseNr = [Forms]![frm_Adressen]![comSuchen];

Diese sucht aus der Ansprechpartnertabelle, vorausgesetzt die von mir benannten Objekte heißen bei Dir genau so, alle Ansprechpartner zu der im Kombinationsfeld comSuchen des Formulares frm_Adressen benannten Adressnummer heraus.

HTH

Arno

PS Beim editieren der Beiträge muß innerhalb eines Absatzes keine Zeilenschaltung betätigt werden ;) Der Text passt sich dann der jeweiligen Bildschirmauflösung des Benutzers an, der Deine Beiträge ließt. Betätigst Du die Zeilenschaltung manuell, verlängerst Du den Beitrag für den Betrachter künstlich.

hoe
08.01.2002, 20:02
Hallo Arno,

ich komme so nicht weiter.
Das Kombinationsfeld (comSuchen) des Unterformulars (UFAnsprechpartnerAuftraggeber)wird über die SQL-Sequenz:
"SELECT TAnsprechpartnerAuftraggeber.Nachname, TAnsprechpartnerAuftraggeber.AnsprechpartnerNr
FROM TAnsprechpartnerAuftraggeber;"
mit den Suchkriterien des Unterformulars (bzw. der zugrundeliegenden Tabelle) gefüllt.
Diese SQL-Sequenz soll so erweitert werden, daß nur die Ansprechpartner angezeigt werden, die zum übergeordneten Auftraggeber gehören, der im entsprechenden Hauptformular (FAuftraggeber) angezeigt wird.
Wenn ich eingebe:
"SELECT [TAnsprechpartnerAuftraggeber].[Nachname], [TAnsprechpartnerAuftraggeber].[AnsprechpartnerNr] FROM TAuftraggeber INNER JOIN TAnsprechpartnerAuftraggeber ON [TAuftraggeber].[AdresseNr]=[TAnsprechpartnerAuftraggeber].[AdresseNr] WHERE ((([TAnsprechpartnerAuftraggeber].[AdresseNr])=[Forms]!FAnsprechpartner![AdresseNr])) ORDER BY [TAnsprechpartnerAuftraggeber].[Nachname]; "
frägt Access beim Öffnen der Kombobox nach der AdresseNr und bietet mir dann nur die dazugehörigen Ansprechpartner. Diese Frage soll aber der SQL-Code selbst beantworten.
Wie mach' ich das?
Mit Deinem Vorschlag komm' ich nicht weiter.

Übrigens: Die letzte Frage habe ich aus einer schon geposteten mail kopiert, daher die Umbrüche.

Gruß aus Bayern!

A.S.
08.01.2002, 20:24
Hallo Hoe,

ein wenig zu kompliziert (nicht für mich, aber für Deine Zwecke) die SQL die Du da aufbaust:

SELECT TAnsprechpartnerAuftraggeber.Nachname,
TAnsprechpartnerAuftraggeber.AnsprechpartnerNr
FROM TAnsprechpartnerAuftraggeber
WHERE TAnsprechpartnerAuftraggeber.AdresseNr = [Forms]![FAnsprechpartner]![AdresseNr]
ORDER BY TAnsprechpartnerAuftraggeber.Nachname;

Sollte Deinen Zwecken voll und ganz entsprechen.

Für die Beantwortung der Frage nach der AdressNr ist dieser Part WHERE TAnsprechpartnerAuftraggeber.AdresseNr = [Forms]![FAnsprechpartner]![AdresseNr] des SQL-Codes zuständig. Solange dieser den Bezug auf das korrekte Formular hat, sollte es Funktionieren.

Gruß

Arno

hoe
09.01.2002, 13:12
Hallo, Arno!

Das hat fast geklappt. Das Kombinationsfeld fragt aber bei Deiner Konstruktion nach wie vor nach dem Parameter [Forms]![FAuftraggeber]![AdresseNr].

Ich habe das etwas geändert in:

SELECT [TAnsprechpartnerAuftraggeber].[Nachname], [TAnsprechpartnerAuftraggeber].[AnsprechpartnerNr] FROM TAnsprechpartnerAuftraggeber WHERE [TAnsprechpartnerAuftraggeber].[AdresseNr]=Parent.AdresseNr ORDER BY [TAnsprechpartnerAuftraggeber].[Nachname];

dann geht's eigenartigerweise, obwohl diese Konstruktion eigentlich ja Deiner entspricht.

In der Ereignisprozedur comSuchen_Enter muß übrigens zwingend Me.Refresh stehen, weil sonst beim Wechsel des Datensatzes des Mutterformulars nicht die korrekten Daten angezeigt werden.

Gruß und vielen Dank