Access Listenfeld mit Endlosformular verknüpfen

Hallo!

Ich habe 2 Tabellen in Access angelegt. In Tabelle1 steht ein Primärschlüssel (ID1, Auto Wert, Long Integer) und mehrere Firmen (Firma), in der zweiten Tabelle stehen zu den einzelnen Firmen für mehrere Jahre Zahlen (z.B. Firma1 2011 Umsatz, Firma1 2010 Umsatz etc). In der 2. Tabelle steht im Feld ID2 in jeder Zeile der Primärschlüssel aus Tabelle 1, der z.B. Firma1 identifiziert.

In einem Endlosformular habe ich alle Firmen aus Tabelle 1 angezeigt.

Prinzipiell könnte ich das Endlosformular auf Einzel-Formular umstellen und dann ein Unterformular für Tabelle2 erstellen, das Tabelle1.ID1 und Tabelle2.ID2 verknüpft. Dann verliere ich aber die Übersicht über alle Firmen im Endlosformular, da Access in einem Endlosformular keine Unterformulare zulässt.

Jetzt meine Idee:
In dem Endlosformular, in dem ich mir alle Firmen aus Tabelle1 anzeigen lasse, will ich ein Listenfeld erstellen. In diesem Listenfeld sollen für jede Firma aus Tabelle1 alle Daten aus Tabelle2 angezeigt werden, bei denen der Primärschlüssel (ID1) aus Tabelle1 mit dem Wert ID2 in Tabelle 2 ident ist.

Wie müsste die VBA-Ereignisprozedur aussehen die das Listenfeld mit dem Formular verknüft, und unter welchem Ereignis für das Listenfeld müsste diese Eingetragen werden?

Vielen Dank für die Hilfe
Gregor

Hallo Gregor!
Ich hätte da ein Datenbank für dich.
Zwei Tabellen Namens Fimen und Bestellungen
Zwei Gleichnamige Forms
Jede Menge VBA
Und eine Abfrage
Und eine Beziehung
Könnte dir den Ganzen VBA jetzt posten aber ich weiss nicht so recht ob dir das was hilft, kann dir aber die Datenbank schicken falls du das möchtest.

mfg
Frank

Ich würde es mir gerne mal ansehen, ein bisschen VBA Erfahrung habe ich. Schicken wäre super, thelordofmoria [AT] yahoo [Punkt] com

Hallo, mein vorschlag:
1.) ich würde einmal ein Endlos-Formular und ein Einzel-Formular erstellen
2.) in dem Endlos-Formular an irgend einer Stelle im
Detail-Bereich einen Schaltknopf erstellen, der zum Einzel-Formular nach dem klicken springt
Den Schaltknopf wie folgt erstellen:

  • Formular öffnen
  • das formular öffnen und bestimmte Daten suche und anzeigen
  • Feld vom Endlos-formular mit Feld vom Einzel-Formular
    auswählen und auf fertig stellen klicken

Nachdem der Schaltknopf im Endlos-Formular erstellt wurde, brauchst du nur bei der zu suchenden firma hierauf klicken und schon siehst du alle einzelnen Daten dieser Firma

Ich weiss nur wie es mit einem Unterformular geht. Ob das so funktioniert kann ich nicht sagen. mfg stuergen

Hallo Gregor,

eine Möglichkeit ist:

Ein Kombinationsfeld kf und ein Listenfeld lf im Formular anzulegen. Das Kombinationsfeld wird an Tabelle1 gebunden.
Für das Kombinationsfeld die Ereignisprozedur „Beim Klicken“ einrichten. In dieser Prozedur dem Listenfeld die entsprechenden Daten aus Tabelle2 zuordnen.

lf.rowsource = „select * from Tabelle2 where ID1=“ & kf.column(0)
lf.requery

In diesem Fall enthält in Tabelle1 die Spalte 1 ID1.

Gruß
JOGI

Hallo

Zunächst einmal einen Verweis auf Microsoft.DAO setzen.

mit Access 2000

Private Sub Form_Open(Cancel As Integer)
Dim rs As DAO.Recordset
Dim SQL As String
SQL = „SELECT Tabelle1.Firma, Tabelle2.[2011], Tabelle2.[2012] FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID1 = Tabelle2.ID2;“
Set rs = CurrentDb.OpenRecordset(SQL)
rs.MoveFirst
Dim Liste As String

Do While Not rs.EOF
Liste = „Firma;2011;2012“
If IsNull(rs!firma) = True Then
GoTo weiter
Else
Liste = Liste & „;“ & rs!firma
End If

If IsNull(rs![2011]) = False Then
Liste = Liste & „;“ & rs![2011]
End If

If IsNull(rs![2012]) = False Then
Liste = Liste & „;“ & rs![2012]
End If
weiter:
rs.MoveNext
Loop
Liste0.RowSource = Liste
End Sub

Datenherkunftstyp der Listbox auf Werteliste setzen.

Access > 2000
Da ich mit Visual Studio arbeite und dort Accessdateien lediglich als Daten-Container benutze und deshalb lediglich ACCESS2000 habe, konnte ich folgendes nicht probieren:

Private Sub Form_Open(Cancel As Integer)
Dim rs As DAO.Recordset
Dim SQL As String
Dim Firma As string
Dim U2011 As Currency
Dim U2012 As Currency
SQL = „SELECT Firmen.Firma, Umsatz.[2011], Umsatz.[2012] FROM Firmen INNER JOIN Umsatz ON Firmen.ID1 = Umsatz.ID2;“
Set rs = CurrentDb.OpenRecordset(SQL)
rs.MoveFirst

Do While Not rs.EOF
If IsNull(rs!firma) = True Then
GoTo weiter
Else
Firma= rs!firma
End If

If IsNull(rs![2011]) = False Then
u2011= rs![2011]
End If

If IsNull(rs![2012]) = False Then
u2012= rs![2012]
End If
Liste0.AddItem Firma & „,“ & u2011 & „,“ & u2012
weiter:
rs.MoveNext
Loop
End Sub

Gruß Wolfgang

Hallo,

in früheren Access Versionen wurde der Code automatisch erstellt, wenn man mit dem Assistenten ein Listenfeld angelgt hat. Heutte muss das Programmiert werden. Da kann ich nicht helfen.

Beste Grüße

Frank Seiler

Hallo Gregor
Ich schlage vor: ein leeres Hauptformular, darin zwei Unterformulare je für Tabelle1 und Tabelle2. In ein Standardmodul folgenden Code einsetzen:

Option Compare Database
Option Explicit
Global glgID
Function getID()
getID = glgID
End Function

Im Unterformular für Tabelle1 beim Klicken folgenden Code eingeben (ev. Auch bei Firmenname):

Private Sub ID_Click()
glgID = Me!ID
Forms!formular1.Refresh
End Sub
(Formular1 ist das leere Hauptformular)

In der Datensatzquelle des Unterformulars für Tabelle2 bei ID das Kriterium getID() setzen
Falls die anzuzeigende Datenmenge in Tabelle2 nicht zu gross ist, könnten diese Daten auch im Hauptformular als Listfeld gezeigt werden. Dann die Datensatzquelle des Listfeldes entsprechend anpassen.

Freundliche Grüsse
Fonti46

Sorry, kann Dir aus zeitlichen Gründen im Moment dabei nicht helfen.

Gruß

Andreas