Sätze eines 'n'-Teils bei einem anderen 'n'-Teil via VBA anfügen

01/11/2007 - 13:30 von Steffen Brose | Report spam
Hallo Allseits, ich habe folgende Problemstellung
bzw. Frage.
(obiger Titel ... najaa, aber mir fiel
nichts anderes ein..)

Also, ich habe 1:n Tab-Bez. in einer 1-Hfo:nUfo - Darstellung
Jetzt gibt es den Wunsch Feldinhalte aus irgendeinem
n-Teil zu kopieren und in einem anderen n-Teil
einzufügen / anzuhàngen.
Teil 1 (mache Kopie) habe ich ja noch hinbekommen... Ich habe mittels
Klickereignis mit:

Dim lgMyID As Long
lgMyID = Forms![Fo02c]!Fo02_Unterformular!ID_Los
CurrentDb.Execute "SELECT" & _
" [Bieter]" & _
" INTO TempBieterListe FROM [AB05_Lose] Where ID_Los = " & lgMyID
End Sub

eine temporàre Tabelle TempBieterListe erzeugt - die nach Einfügen/Anhàngen
jedesmal wieder gelöscht wird.
Diese Tabelle (wohl besser Feldinhalte von Bieter)
soll aber vorher an einen frei wàhlbaren anderen n-Teil an-"hàngbar" sein.

Ihr ahnt es: die ID_Los ist dann eine andere ... und müsste
auch mit dabei sein - wegen der 1:n-Beziehung, aber eben die
aus dem Teil - wo das Anfügen stattfinden soll - wie bekomme ein solches
sql-Teil zum Anfügen hin ?

Im Ufo habe ich zwei Befehlsschalter drin - einen für - Kopie - und einen
für - Einfügen -

Hoffe, ich konnte die Thematik halbwegs darstellen (?)

Danke für Eure Hilfe
Gruß Steffen
 

Lesen sie die antworten

#1 Henry Habermacher
02/11/2007 - 10:09 | Warnen spam
Hallo Steffen

Steffen Brose wrote:
Hallo Allseits, ich habe folgende Problemstellung
bzw. Frage.
(obiger Titel ... najaa, aber mir fiel
nichts anderes ein..)

Also, ich habe 1:n Tab-Bez. in einer 1-Hfo:nUfo - Darstellung
Jetzt gibt es den Wunsch Feldinhalte aus irgendeinem
n-Teil zu kopieren und in einem anderen n-Teil
einzufügen / anzuhàngen.
Teil 1 (mache Kopie) habe ich ja noch hinbekommen... Ich habe mittels
Klickereignis mit:

Dim lgMyID As Long
lgMyID = Forms![Fo02c]!Fo02_Unterformular!ID_Los
CurrentDb.Execute "SELECT" & _
" [Bieter]" & _
" INTO TempBieterListe FROM [AB05_Lose] Where ID_Los = " & lgMyID
End Sub

eine temporàre Tabelle TempBieterListe erzeugt - die nach
Einfügen/Anhàngen jedesmal wieder gelöscht wird.
Diese Tabelle (wohl besser Feldinhalte von Bieter)
soll aber vorher an einen frei wàhlbaren anderen n-Teil an-"hàngbar" sein.

Ihr ahnt es: die ID_Los ist dann eine andere ... und müsste
auch mit dabei sein - wegen der 1:n-Beziehung, aber eben die
aus dem Teil - wo das Anfügen stattfinden soll - wie bekomme ein solches
sql-Teil zum Anfügen hin ?

Im Ufo habe ich zwei Befehlsschalter drin - einen für - Kopie - und einen
für - Einfügen -



Nur so als Warnung: Mit Deinem Ansatz wirst Du die Frontend ziemlich schnell
aufblàhen. Was spricht dagegen, die ausgewàhlten IDs der Datensàtze einfach
im Speicher in einem Array abzulegen?

Das würde dann so aussehen:

In einem neuen Standard Modul:

Public arrAblage As Variant

Public Function inAblage(lngMyID As Long)
Dim I As Long
Dim blnFound As Boolean
If (VarType(arrAblage) And vbArray) <> vbArray Then
ReDim arrAblage(0 To 0)
arrAblage(0) = lngMyID
Else
blnFound = False
For I = LBound(arrAblage) To UBound(arrAblage)
If arrAblage(I) = lngMyID Then
blnFound = True
Exit For
End If
Next
If blnFound = False Then
ReDim Preserve arrAblage(LBound(arrAblage) _
To UBound(arrAblage) + 1)
arrAblage(UBound(arrAblage)) = lngMyID
End If
End If
End Function

Public Function leereAblage()
arrAblage = ""
End Function

Public Function holeAblageIDs() As Variant
Dim I As Long
Dim varTemp As Variant
If (VarType(arrAblage) And vbArray) <> vbArray Then
holeAblageIDs = Null
Else
varTemp = Null
For I = LBound(arrAblage) To UBound(arrAblage)
varTemp = varTemp + ", " & arrAblage(I)
Next
holeAblageIDs = varTemp
End If
End Function


Nun kannst Du beim Klicken auf Kopieren (Ablage löschen musst Du auch noch
vorsehen, nur so nebenbei, siehe oben) einfach folgende Zeile Code
ausführen:

inAblage lgMyID

Die Funktion inAblage(lngMyID) wird die ID in die Ablage hinzufügen, wenn
diese noch nicht drin ist.

Nun kannst Du ein SQL Statement machen, das etwa so aussieht:

CurrentDB.Execute "INSERT INTO ZielTabelle(BieterID, DeinFeld2, DeinFeld3)
SELECT (" & ZielBieterID & ", DeinFeld2, DeinFeld3) FROM DeineQuellTabelle
WHERE ID IN (" & holeAblageIDs & ")", dbFailOnError

Die BieterID kannst Du genauso über eine Stringmanipulation im SQL Statement
ersetzen, wie Du die IDs da in den IN() Konstrukt einfügst.

Ansonsten: Wenn für jeden Bieter eine eigene Tabelle verwendet wird, dann
hast Du bei der Lektion zur Datenmodellierung nicht richtig aufgepasst, das
sollte eine Tabelle sein, ebenfalls wie die Bieterliste (welche wohl dann
eine Beziehungsentitàt wàre). Aber mit obigem Ansatz kannst Du sogar
unterschiedliche Bietertabellen befriedigen, indem Du dann halt einfachach
auch die Ziel- und Quelltabelle als Variable in den String einpflegst.

HTH
Henry


Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen