Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

SQL in VBA (ACC00) Insert mit Select und Variable

Begonnen von bejay, Juni 10, 2012, 14:10:42

⏪ vorheriges - nächstes ⏩

bejay

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

database

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

bejay

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

ebs17

#3
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
Mit freundlichem Glück Auf!

Eberhard