Avatar billede kimsand Nybegynder
25. marts 2014 - 08:59 Der 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
Avatar billede kimsand Nybegynder
25. marts 2014 - 11:21 #1
OK. Nu har jeg ændret sætningen

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 ?
Avatar billede kimsand Nybegynder
25. marts 2014 - 11:28 #2
Hvad der er mere mærkeligt er at jeg jo får værdien True/False fra markeringsvaerdi = Me.Form.Recordset(0)

så den vej kan det godt lade sig gøre.
Avatar billede kimsand Nybegynder
25. marts 2014 - 11:38 #3
nu har jeg været i tabellen og sætte formatet til at være Sand/Falsk i stedet for Ja/Nej, men det hjalp ingenting.

Jeg læser også ind i markeringsvaerdi værdierne True eller False, men kan ikke skrive det tilbage i feltet.
Avatar billede fdata Forsker
25. marts 2014 - 16:21 #4
Hm. Du har sat dig mellem to stole.

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.
Avatar billede kimsand Nybegynder
25. marts 2014 - 21:06 #5
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.
Avatar billede kimsand Nybegynder
25. marts 2014 - 21:52 #6
YEEEHAAAA  Jeg fandt ud af det.... :)

Det er fordi grpstmpl er en streng og syntaxen er derfor  ='" & grpstmpl & "'"

hvorimod markeringsværdi er en boolean og har syntaxen = " & markeringsvaerdi

DAMN hvorfor har de lavet det så vanvittigt svært....
Avatar billede kimsand Nybegynder
25. marts 2014 - 21:53 #7
tak for hjælpen, jeg forstod faktisk ikke essensen af dit svar, men det var jo kun syntaxen omkring den ene variabel der skulle laves om....
Avatar billede fdata Forsker
27. marts 2014 - 23:09 #8
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester