Wieder ein Schnipsel wo ich einfach nicht genug weis
Dim D As Long ' Design Schlüssel DID
D = Forms![Bestand1]![cmbDesign]
SQLinsert = "INSERT INTO DesignSize(DID,SizeKey) D, SELECT SizeKey" "FROM Dimension WHERE Mark = True"
D erhält seinen Wert durch das geöffnete Formular "Bestand1" dann sollen in die Tabelle "DesignSize" die Werte DID = D und als Select die Schlüssel "SizeKey" aus der Tabelle "Dimension" bei denen das Feld "Mark" auf True gesetzt ist, eingetragen werden.
Ich weis nicht ob und wie das geht.
Gruß
bejay
Hallo,
möglich wäre es in der Form:
Dim D As Long ' Design Schlüssel DID
Dim SQLInsert As String
Dim strSizeKey as String 'in der Annahme, dass hier ein Textwert in der Tabelle steht
D = Forms![Bestand1]![cmbDesign]
strSizeKey = DLookup("Sizekey","Dimension","Mark=True")
SQLInsert = "INSERT INTO DesignSize(DID,SizeKey)VALUES(" & D & ",'" & strSizeKey & "')"
'eintragen
CurrentDB.Execute(SQLInsert), dbFailOnError
Wenn SizeKey ein Integerwert sein sollte:
Dim D As Long ' Design Schlüssel DID
Dim SQLInsert As String
Dim lngSizeKey as Long
D = Forms![Bestand1]![cmbDesign]
lngSizeKey = DLookup("Sizekey","Dimension","Mark=True")
SQLInsert = "INSERT INTO DesignSize(DID,SizeKey)VALUES(" & D & "," & lngSizeKey & ")"
'eintragen
CurrentDB.Execute(SQLInsert), dbFailOnError
Allerdings ist diese Variante nur für einzelne Werte geeignet.
Wenn Durch die Ermittlung von SizeKey mehrere Datensätze anfallen wäre folgendes möglich:
Dim D As Long ' Design Schlüssel DID
Dim SQLInsert as String
Dim rs as DAO.Recordset
D = Forms![Bestand1]![cmbDesign]
Set rs = CurrentDB.OpenRecordset("SELECT SizeKey FROM Dimension WHERE Mark=True")
If rs.RecordCount > 0 Then
rs.MoveFirst
Do While Not rs.EOF
SQLInsert = "INSERT INTO DesignSize(DID,SizeKey)VALUES(" & D & "," & rs!SizeKey & ")"
CurrentDB.Execute(SQLInsert), dbFailOnError
rs.MoveNext
Loop
Else
MsgBox "Es wurden keine Daten gefunden."
End If
Set rs = Nothing
Codes sind NICHT getestet!
HTH
Aha, an das letzte Beispiel hatte ich schon gedacht, ich dachte aber das geht mit dem Insert einfacher. Das ganze fusst auf der Tatsache dass es von manche Designs eben nicht jede Größe gibt. Die Tabelle DesignSize ist sozusagen die Übersetzung. Beide Werte in der Tabelle sind vom Typ Long.
Danke
bejay
Man könnte wie ursprünglich vorgesehen eine einfache Anfügeabfrage verwenden. Ohne die überflüssigen Variablen:
Dim SQLInsert As String
SQLInsert = "INSERT INTO DesignSize (DID, SizeKey)" & _
" SELECT " & Forms!Bestand1!cmbDesign & _
", SizeKey FROM Dimension WHERE Mark = True"
CurrentDB.Execute SQLInsert, dbFailOnError
Das sieht zwar nicht so spektakulär aus wie eine Schleife durch ein Recordset, ist aber auf jeden Fall schneller.
MfGA
ebs