sql update probleem in vba

Status
Niet open voor verdere reacties.

Berryke

Gebruiker
Lid geworden
31 mei 2011
Berichten
8
goedeavond,

Ik ben een database aan het maken voor me werk nu wil ik dmv een knop een tabel updaten maar ik heb ergens een fout staan kan iemand me vertellen wat en hoe ik deze kan oplossen.

DoCmd.RunSQL ("UPDATE tbl_Cursusoverzicht SET tbl_Cursusoverzicht.Datum_Geldigheidsbewijs = #" & Me.txtDatumbehaald1 & "#, tbl_Cursusoverzicht.Current_tot = #" & Me.txtDatumcurrent1 & "# WHERE(tbl_Cursusoverzicht.Peoplesoftnr) = " & Me.txtLookuppeoplesoftnr & " And(tbl_Cursusoverzicht.Cursusnr) = " & Me.txtLookupcursusnr1 & ";"

Gr. Ber
 
Er zitten een paar foutjes in, en daarom werkt-ie niet. Om te beginnen, deze constructie is fout: WHERE(tbl_Cursusoverzicht.Peoplesoftnr). Er ontbreekt een spatie. Bovendien zijn de haakjes overbodig. Dus dat moet worden: WHERE Peoplesoftnr. Hetzelfde voor de AND syntax; ook daar geen spatie.
Belangrijker foutje: een datum via VBA gegenereerd is in de Amerikaanse datumnotatie. Daarbij wordt 10 juli 2011 (10-7-2011) gelezen als: 7 oktober 2011 (7-10-2011). En dat zal toch niet je bedoeling zijn.... vertaal de datum daarom eerst naar een getal, en converteer hem in de query terug naar een datum. Dat ziet er dan zo uit: Current_tot = CDate(" & CDbl(Me.txtDatumcurrent1) & ")
De totale code zou ik zo doen:

Code:
Dim strSQL As String

strSQL = "UPDATE tbl_Cursusoverzicht SET Datum_Geldigheidsbewijs = CDate(" & CDbl(Me.txtDatumbehaald1) _
    & "), Current_tot = CDate(" & CDbl(Me.txtDatumcurrent1) & ") WHERE Peoplesoftnr = " _
    & Me.txtLookuppeoplesoftnr & " And Cursusnr  = " & Me.txtLookupcursusnr1

DoCmd.RunSQL (strSQL)
 
Het was me net op een andere manier gelukt, heb de jouwe ook geprobeerd maar dan
krijg ik een foutmelding. Fout 94 ongeldig gebruik van null.
 
Dan is je datumveld vermoedelijk niet altijd gevuld... Je kunt een leeg veld uiteraard niet omzetten naar een getal.
 
is dan het veld txtDatumcurrent1 hoeft niet altijd gevuld te zijn. maar ik begin het al een stuk beter te begrijpen.
 
Blijft staan dat je datums omgedraaid worden :) Of had je dat nog niet opgemerkt? Overigens kun je dat ook nog ondervangen, als je niks wilt veranderen aan je oorspronkelijke opzet:

strSQL = "UPDATE tbl_Cursusoverzicht SET Datum_Geldigheidsbewijs = Format(" & Me.txtDatumbehaald1 & ";'\#mm\/dd\/yyyy\#') etc.
 
deze werkt ook

DoCmd.RunSQL ("UPDATE tbl_Cursusoverzicht SET tbl_Cursusoverzicht.Datum_Geldigheidsbewijs = [Forms]![frm_Cursussentoevoegen]![txtDatumbehaald1], tbl_Cursusoverzicht.Current_tot = [Forms]![frm_Cursussentoevoegen]![txtDatumcurrent1]WHERE (((tbl_Cursusoverzicht.Peoplesoftnr)=[Forms]![frm_Cursussentoevoegen]![txtLookuppeoplesoftnr]) AND ((tbl_Cursusoverzicht.Cursusnr)=[Forms]![frm_Cursussentoevoegen]![txtLookupcursusnr1]));")

En pakt de datums normaal.
 
Omdat je nu niet de waarden gebruikt, maar verwijzingen naar het formulier. Overigens zou ik het dus op mijn manier doen, en de waarden gebruiken i.p.v. formulierverwijzingen. Je hebt dan meer controle over de feitenlijke gegevens die je wegschrijft.
 
oke ik ben behoorlijk nieuw met vba, aangezien txtDatumcurrent1 niet ingevuld hoeft te worden wordt het dus zoiets:

Code:
If IsNull(Me.txtDatumcurrent1) Then
strSQL = "UPDATE tbl_Cursusoverzicht SET Datum_Geldigheidsbewijs = CDate(" & CDbl(Me.txtDatumbehaald1)& ") WHERE Peoplesoftnr = " _
    & Me.txtLookuppeoplesoftnr & " And Cursusnr  = " & Me.txtLookupcursusnr1
DoCmd.RunSQL (strSQL)

Else
Dim strSQL As String

strSQL = "UPDATE tbl_Cursusoverzicht SET Datum_Geldigheidsbewijs = CDate(" & CDbl(Me.txtDatumbehaald1) _
    & "), Current_tot = CDate(" & CDbl(Me.txtDatumcurrent1) & ") WHERE Peoplesoftnr = " _
    & Me.txtLookuppeoplesoftnr & " And Cursusnr  = " & Me.txtLookupcursusnr1

DoCmd.RunSQL (strSQL)
End If
 
Omdat je niet altijd een datumveld hebt; en je probeert een datumveld te vullen. Ik zou in dat geval de formule met Format uitproberen. Maar eigenlijk zou je een aparte query moeten draaien; als je een Update query uitvoert, moet je alleen die velden bijwerker waar daadwerkelijk wat in staat; je wilt niet per ongeluk een veld leegmaken bijvoorbeeld.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan