webForumDet fria alternativet

Jobba med recordset

8 svar · 234 visningar · startad av Jester

JesterMedlem sedan sep. 200188 inlägg
#1

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
#2

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
#3

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
#4

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
#5

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
#6

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
#7

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
#8

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
#9

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?

126 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)