JesterMedlem sedan sep. 200188 inlägg Ave
Undrar om någon kan hjälpa mig med följande.
Proceduren skall hämta värden från en tabell och lagra dessa i ett recordset. Med hjälp av värdena i setet skall nya poster skapas i en annan tabell.
Koden ser ut som följer och jag får ett typkonverteringsfel i RunSQL raden.
Mina främsta frågor är:
1. Är det rätt upplagt med recordset?
2. Varför funkar inte RunSQL satsen? Kan jag göra det på annat sätt?
Private Sub cmdNyInmatning_Click()
Dim startTime As Variant
Dim endTime As Variant
Dim rs As New ADODB.Recordset
Dim strSQL As String
startTime = DLookup("Open", "Tbl_Positioner", "Posit_ID=" & Me.cboPosit)
endTime = DLookup("Close", "Tbl_Positioner", "Posit_ID=" & Me.cboPosit)
strSQL = "SELECT Timmar FROM Tbl_Timmar WHERE Timmar BETWEEN #" & startTime & "# AND #" & endTime & "# ORDER BY Timmar"
rs.Open strSQL, CurrentProject.Connection
While Not rs.EOF
DoCmd.RunSQL "INSERT INTO Tbl_PersKontroll (Datum, Post_ID, Tim) VALUES('#Me.txtDate#','Me.cboPosit','rs.Timmar') "
rs.MoveNext
Wend
Här skall lite annan kod ligga men så långt har jag inte kommit än..
End Sub
JonMedlem sedan juli 20011 304 inlägg Vad är det för datatyp på Tbl_PersKontroll.Tim och Tbl_PersKontroll.Post_ID?
Är det ett tal så ska det vara
"INSERT INTO Tbl_PersKontroll (Datum, Post_ID, Tim) VALUES('#Me.txtDate#',Me.cboPosit,rs.Timmar) "
Sen är mina ado-minnen suddiga men kan det inte vara så att det egentligen ska vara:
"INSERT INTO Tbl_PersKontroll (Datum, Post_ID, Tim) VALUES('#Me.txtDate#',Me.cboPosit,rs!Timmar) "
:)
Sen ser det lite udda ut att Post_ID ligger i en combo som heter cboPosit men det kanske är så?
JesterMedlem sedan sep. 200188 inlägg Ave
Datum förklarar ju sig själv, Post_ID är ett tal, Tim är i datumformat. Det funkade inte att utelämna ' - tecknen och
rs!timmar förbättrade inte resultatet....tyvärr..tack för hjälpen iaf.
Anledningen att Post_ID kommer från en kombo är att de värdena väljs i ett formulär från en tredje tabell.
LarsGMedlem sedan dec. 200012 464 inlägg Du behöver bara en SQL-sats
DoCmd.RunSQL "INSERT INTO Tbl_PersKontroll (Datum, Post_ID, Tim) " & _
" select #" & Me.txtDate & "#,'" & replace(Me.cboPosit,"'","''") & "',Timmar from tbl_timmar "
JesterMedlem sedan sep. 200188 inlägg Ave
Man tackar allra mjukast, fungerar kanon efter att jag utvecklat koden lite som följer!!! :birp
DoCmd.RunSQL "INSERT INTO Tbl_PersKontroll (Datum, Post_ID, Tim) " & _
" select #" & Me.txtDate & "#,'" & Replace(Me.cboPosit, "'", "''") & "',Timmar from tbl_timmar WHERE Timmar BETWEEN #" & startTime & "# AND #" & endTime & "# "
Nu skall jag bara försöka lista ut vad det är du gjort så jag kan bli lite klokare oxå... . Så lite följdfrågor därför.. :e
Varför en replace på cboPosit? Vad gör en replace?
Går det att få bort meddelandet om X antal poster har lagts till osv osv... ser ju inte riktigt snyggt ut..
Engine^Medlem sedan dec. 20003 887 inlägg Replace byter ut tecken i en sträng. I det här fallet så byts en apostrof mot två för att komma undan sql injections.
För att slippa meddelandet (jag antar att det är RunSQL som ger det) får du skriva om det lite...
CurrentProject.Connection.Execute "INSERT INTO Tbl_PersKontroll (Datum, Post_ID, Tim) " & _
"SELECT #" & Me.txtDate & "#, '" & Replace(Me.cboPosit, "'", "''") & "', Timmar FROM tbl_timmar " & _
"WHERE Timmar BETWEEN #" & startTime & "# AND #" & endTime & "#", , adExecuteNoRecords
JesterMedlem sedan sep. 200188 inlägg Okej, tack för tipset, skall prova det
Varför används inte replace på det två andra?
Engine^Medlem sedan dec. 20003 887 inlägg Tänkte aldrig på det, men det ska användas för alla fält som användaren själv skriver in värden i.
JesterMedlem sedan sep. 200188 inlägg Ok...kanske för att de andra är tidsformaterade #
Jag försökte sätta in en radbrytning i min SQL kod och då blev det helt plötsligt typfel.....verkar lite skumt det där....spelar det någon roll var man sätter in radbrytningen i dylik sql-sats?