Problem mit Dlookup

Hi,

ich habe Dlookup benutzt um Daten von Access nach Word zu übertragen und möchte nun gern wissen, wie ich auf mehrere unterschiedliche Datensätze zugreifen kann, wobei die Primär und Fremdschlüssel allerdings gleich bleiben.

.Bookmarks(„Abschluss“).Range = DLookup(„Abschluss“, „Tabelle_LL“, „BN LIKE '“ & Me.Parent.BN & „’“)
liefert mir den ersten Datensatz der Tabelle „Tabelle_LL“, bei dem der Primärschlüssel BN mit dem Fremdschlüssel BN aus dem Hauptformular übereinstimmt. Nun ist es aber so, dass jede Person n Abschlüsse hat (Schul-,Ausbildungs- und Berufsabschluss, etc.) und ich bestimmen möchte welcher Abschluss nun nach Word übernommen werden soll.

Kann man also der Datenbank sagen „gebe mir den 6. Datensatz aus, bei dem die BN gleich 62 ist“ oder z.B. „gebe mir die 4. pizza in der liste aus, für die man Salami braucht“ ?
Oder kann man die Tabelle chronologisch sortieren und dann nur befehlen den 1. bzw letzten Datensatz mit BN = Formular.BN ?

MfG
Philipp K.

Hallo,

eigentlich werden DS anhand ihrer ID (Primärschlüsselwertes) bestimmt und nicht nach der Position in der Reihenfolge einer Darstellung.

Um den ersten oder letzten Ds aus einer sortierenden Abfrage zu ermittlen, kannst Du statt Dlookup DFirst oder DLast verwenden.

Das ist und bleibt aber suboptimal…

Alternativ kann man sich einen Recordset vorstellen, den Du per Code halt entsprechend durchläufst und so den gewünschten Wert bekommst.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hi Franz,

das Problem ist, dass die ID für mehrere Datensätze gleich ist (1:n).

Und ich möchte dann jeden Datensatz, der die selbe ID besitzt nach Word übernehmen und nicht nur den ersten oder letzten. Später kann es auch möglich sein, dass ich eine Auswahl treffe, welche Datensätze übernommen werden.

Kann ich das mit einer WHILE-Schleife machen?

MfG
Philipp K.

Hallo,

das Problem ist, dass die ID für mehrere Datensätze gleich ist
(1:n).

Ja, das IST ein Problem… Es fehlt in der n-Tabelle ein Primärschlüsselfeld, das „ID“-Feld ist keine ID, eher der Fremdschlüssel.

Und ich möchte dann jeden Datensatz, der die selbe ID besitzt
nach Word übernehmen und nicht nur den ersten oder letzten.
Später kann es auch möglich sein, dass ich eine Auswahl
treffe, welche Datensätze übernommen werden.

Kann ich das mit einer WHILE-Schleife machen?

Ja, wie gesagt, einen Recordset mit passender Abfrage mit
While not rs.EOF

oder
Do Until rs.Eof

durchlaufen und die Werte an Word passend übergeben.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hi Franz,

es fehlt kein Primärfeld in der n-Tabelle.

die 1-Tabelle hat BN als Primär-key und die n-Tabelle hat Abschluss_ID als Primär-key und BN als Fremdschlüssel.

Hi Franz,

mit dem Ablauf und der Verwendungsmöglichkeiten vom Recordset habe ich mich noch nicht befasst. Könntest du mir das grob erklären?

Ich habe sonst noch im Sinn die Daten mittels DomAnzahl zu durchlaufen für die n-Tabelle und dann durch die Anzahl der Datensätze, die die selbe ID besitzen wie das aktuelle Formular dann als Variable in eine FOR-Schleife zu packen.

Also in etwa so:

AccNachWord_Click

dim BNAnzahl As Integer
Dim wdApp As Object, wddoc As Object

BNAnzahl = DCount("*",„Tabelle_LL“, „[BN] = " & me.BN)
Set wdApp = CreateObject(„Word.Application“)
wdApp.Visible = True
Set wddoc = wdApp.Documents.Add(“\SERVER\Dokumente\LL.doc")
With wddoc
For i = 1 to BNAnzahl
.Bookmarks(„Abschluss“).Range = tables!Tabelle_LL!Abschluss & „“
next i
.SaveAs FileName:="\SERVER\Bewerber\LL_" & Me.Parent.NaNa & „.doc“
End With
wdApp.Quit
Set wdApp = Nothing
end sub

MfG
Philipp K.

HAllo,

mit dem Ablauf und der Verwendungsmöglichkeiten vom Recordset
habe ich mich noch nicht befasst. Könntest du mir das grob
erklären?

Ich habe sonst noch im Sinn die Daten mittels DomAnzahl zu
durchlaufen für die n-Tabelle und dann durch die Anzahl der
Datensätze, die die selbe ID besitzen wie das aktuelle
Formular dann als Variable in eine FOR-Schleife zu packen.

Prinzipell so:

Dim rs as Dao.Recordset
Dim db as Dao.Database
Set db=Dbengine(0)(0)

set rs=db.Openrecordset( "select * from tbl_N_Tabelle where Fremdschlüssel = " & Me!Fremdschlüssel,dbopensnapshot)

Do until rs.EOF
’ Hier Dein Code bzgl. der Schleife
'MsgBox rs!Feld1 'Zugriff auf Feld1 aus dem Recordset
rs.Movenext
Loop
rs.Close
set rs=Nothng
set db =Nothing

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!