25. marts 2014 - 08:59Der er
7 kommentarer og 1 løsning
Hmm jeg forstår ikke hvorfor dette ikke virker.
Jeg har lavet noget kode der kører når man klikker på afkrydsningsfeltet der hører til et Sand/Falsk felt i tabellen DT_tilbudskalender.
I denne tabel har jeg lavet et felt som bliver fyldt med et unikt tidsstempel hvis nogle poster skal kunne agere sammen som en gruppe.
Når jeg aktiverer afkrydsningsfeltet checker men for om gruppestempel feltet har et andet indhold end "enkeltvis" og hvis den har det, så skal der køres en update på de poster i tabellen som har samme gruppestempel.
Problemet er at når koden kører bliver der ikke opdateret noget som helst. Der står at der bliver opdateret 0 poster.
Hvad kan det være jeg ikke ser ? Selve logikken og koden er jo helt banal. Jeg tror selv det har noget med den SQL sætning at gøre, da jeg stadig er en newb omkring hvordan jeg bruger SQL i VBA, men jeg har bare googlet og googlet og som jeg ser det så er den rigtig ?
På forhånd tak for hjælpen.
Private Sub markering_Click()
Dim grpstmpl As String Dim markeringsvaerdi As Boolean Dim sSql As String
Me.Form.Recordset.Move 1 'For at opdatere posten med markeringen enten true eller false. Me.Form.Recordset.Move -1 'Tilbage til oprindelige post så jeg kan tage værdierne fra posten og bruge dem senere. markeringsvaerdi = Me.Form.Recordset(0) grpstmpl = Me.Form.Recordset(11)
sSql = "UPDATE DT_tilbudskalender SET DT_tilbudskalender.markering = 'markeringsvaerdi' WHERE DT_tilbudskalender.gruppestempel = 'grpstmpl'"
If grpstmpl <> "enkeltvis" Then 'hvis der er sat et gruppestempel under oprettelsen så køre updaten DoCmd.RunSQL sSql, acEdit End If
'slut Me.Requery 'opdatér formen så man kan se de opdaterede data. End Sub
sSql = "UPDATE DT_tilbudskalender SET DT_tilbudskalender.markering = 'markeringsvaerdi' WHERE DT_tilbudskalender.gruppestempel = 'grpstmpl'"
til
sSql = "UPDATE DT_tilbudskalender SET DT_tilbudskalender.markering = '" & markeringsvaerdi & "' WHERE DT_tilbudskalender.gruppestempel = '" & grpstmpl & "'"
Det virker så langt at den nu finder 3 poster som den skal. Men jeg får fejlmeddelelsen "Microsoft Office Access opdaterede ikke 3 felt(er) pga. en typekonverteringsfejl, klik ja for at ignore......."
Det er som om markeringsvaerdi og DT_tilbudskalender.markering ikke er samme type, men markeringsvaerdi er boolean, og DT_tilbudskalender.markering er Ja/Nej. Er det ikke det samme ?
Din første version "SET DT_tilbudskalender.markering = 'markeringsvaerdi'" ville sætte DT_tilbudskalender.markering til konstanten 'markeringsvaerdi'
Din anden version "SET DT_tilbudskalender.markering = '" & markeringsvaerdi & "'" sætter DT_tilbudskalender.markering til en tekststreng, som indeholder markeringsvaerdi (pga apostrofferne)
Det, du skal skrive, er helt enkelt "SET DT_tilbudskalender.markering = " & markeringsvaerdi altså uden apostroffer
... og jo: True/False og Ja/Nej er præcis det samme.
Tak for dit svar. Det har jeg lige prøvet, og sætningen ser nu sådan her ud.
"Update DT_tilbudskalender SET DT_tilbudskalender.markering = " & markeringsvaerdi & " WHERE DT_tilbudskalender.gruppestempel = " grpstmpl
Når jeg debugger koden, får jeg dette resultat inden den kører sql.
"UPDATE DT_tilbudskalender SET DT_tilbudskalender.markering = True WHERE DT_tilbudskalender.gruppestempel = 41718748101852"
Hvilket er fuldstændigt hvad jeg forventer. Når jeg så når til at eksekvere DoCmd.RunSQL sSql, får jeg fejlen. Runtime error 3464. Datatyperne stemmer ikke overens i kriterieudtrykket.
grpstmpl er defineret som String og DT_tilbudskalender.gruppestempel er defineret som Tekst med default felt størrelse på 255.
Yep. Kun apostroffer ved tekststrenge. Det er jo fordi, de kan indeholde blanktegn. Det kan tal og booleans ikke. Det er vel derfor egentlig ikke så tosset med apostroffer, vel ;O)
Takker for point
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.