Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: bejay am Juni 10, 2012, 14:10:42

Titel: SQL in VBA (ACC00) Insert mit Select und Variable
Beitrag von: bejay am Juni 10, 2012, 14:10:42
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
Titel: Re: SQL in VBA (ACC00) Insert mit Select und Variable
Beitrag von: database am Juni 10, 2012, 14:52:55
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
Titel: Re: SQL in VBA (ACC00) Insert mit Select und Variable
Beitrag von: bejay am Juni 10, 2012, 17:23:57
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
Titel: Re: SQL in VBA (ACC00) Insert mit Select und Variable
Beitrag von: ebs17 am Juni 10, 2012, 23:31:38
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