Nedanstående kod lägger in poster i en temporärtabell i Access från en annan tabell. Du får kolla av om ett fält är tomt och att du då istället sätter ditt ett NULL. Det finns också en egenskap som heter "Allow Zero Lenght". När fältet med din tid är tom är dess värde Null. Detta anger du med det reserverade ordet Null i SQL satsen. Då utan sträng- eller datumavgränsare(' och #-tecknen).Typblandningsfel!!
I båda tabellerna är Tidsfälten definierade som Kort Tidsformat.
Om ett fält ex.vis BK("BOKN_AvgTid") är tomt får jag Typblandningsfel i INSERT trots att alla fält också är satta till "Obligatoriskt=Nej".
Vad gör man åt det?
<code>
BK.MoveFirst
do while not BK.EOF
SQLStmt = "INSERT INTO TEMPLIST (BoknID, Datum, AvgTidHH, AvgTid, AnkTid, AnkTidHH)"
SQLStmt = SQLStmt & " VALUES(" & BK("BOKN_ID") & ", #" & BK("BOKN_Utdatum") & "#, '"
SQLStmt = SQLStmt & BK("BOKN_AvgTidHH") & "', '" & BK("BOKN_AvgTid") & "', '"
SQLStmt = SQLStmt & BK("BOKN_AnkTid") & "', '" & BK("BOKN_AnkTidHH") & "')"
Connection.Execute(SQLStmt)
BK.MoveNext
loop
</code>Sv: Typblandningsfel!!
Eller skippar att sätta in ett värde/null i de fältet.Sv: Typblandningsfel!!
Kolla så att den är satt till "Yes".
Micke MicrosoftSv: Typblandningsfel!!
Du kan ju skipa loopen och göra en INSERT INTO fråga med SQL istället. Mycket effektivare och du slipper strul.
T.Ex.
<code>
Dim strSQL
strSQL = "INSERT INTO TEMPLIST (BoknID, Datum, AvgTidHH, AvgTid, AnkTid, AnkTidHH)" & vbCrLf & _
"SELECT BOKN_ID, BOKN_Utdatum, BOKN_AvgTidHH, BOKN_AvgTid, BOKN_AnkTid, BOKN_AnkTidHH" & vbCrLf & _
"FROM TabellNamnFörBK" & vbCrLf & _
"WHERE FältNamn = 'Ditt villkor'"
Connection.Execute strSQL
</code>
Om du vil fortsätta använda loop. Kan du tillämpa följande funktion:
<code>
Function SQLDate(Value)
If IsDate(Value) Then
SQLDate = "#" & Value & "#"
Else
SQLDate = "Null"
End If
End Function
Function SQLText(Value)
If Len(Value) > 0 Then
SQLText = "'" & Replace(Value, "'", "''") & "'"
Else
SQLText = "Null"
End If
End Function
Do Until BK.EOF
SQLStmt = "INSERT INTO TEMPLIST (BoknID, Datum, AvgTidHH, AvgTid, AnkTid, AnkTidHH)"
SQLStmt = SQLStmt & " VALUES(" & BK("BOKN_ID") & ", " & SQLDate(BK("BOKN_Utdatum")) & ", "
SQLStmt = SQLStmt & SQLText(BK("BOKN_AvgTidHH")) & ", " & SQLDate(BK("BOKN_AvgTid")) & ", "
SQLStmt = SQLStmt & SQLDate(BK("BOKN_AnkTid")) & ", " & SQLText(BK("BOKN_AnkTidHH")) & ")"
Connection.Execute SQLStmt
BK.MoveNext
Loop
</code>