currentdb.execute "update"

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
258
Hoi,

Ik heb een tabel met een "datum"veld van korte notatietype. (dd/mm/yyyy)

Ik wil dit veld via currentdb.execute "update ...." gaan updaten.
Maar wanneer ik in het formulier, een ander veld, een datum geef en via currentdb.execute het veld in de tabel wil updaten krijg ik een totaal andere waarde.

Voorbeeld.

Formulier "Onderhoud".
Veld "Registratiedatum".
Tabel "auto" met veld smering.
Zowel veld registratiedatum als smering zijn datumvelden van korte notatietype.

Wanneer ik het veld registratiedatum aanpas wil ik het veld smering van tabel auto dezelfde datum geven.
In formulier geeft ik voor registratiedatum vb 21/05/2018.
Via het currentdb.execute "update" zie ik de waarde 30/12/1899 !!!!!

CurrentDb.Execute "UPDATE auto SET smering=" & registratiedatum & " WHERE Equip_PM_Def_ID=" & Me.Equip_PM_Def_ID

Waarom krijg ik zo'n vreemde datumwaarde ?

Alvast bedankt.
 
Die 21/05/2018 in een formulier is wellicht een string en zal in een Date field als 0 terecht komen.
De datum 0 is inderdaad 30/12/1899.
Converteer dus die string naar een Date.
 
Laatst bewerkt:
Wanneer ik de waarde van het veld laat weergeven zie je 21/05/2018.
Dus ik krijg/zie de juiste waarde. Maw ik zie niet de waarde 0.
 
Dat is ook niet wat ik zeg.
 
Dat is ook niet wat ik zeg.

sorry als ik te bruut ben overgekomen.
Maar ik kan alleen melden wat ik zie.
En dat is dat de waarde 21/05/2018 is.
Dus ..... wat moet ik dan aanpassen aan de code ?
Of in welke richting ik moet zoeken ?
 
Zo bedoelde ik dat niet :)

Een datum is een getal, een Long waarde.
Dat is intern dus anders dan wat je op het scherm ziet.
0 is dus 30/12/1899
Vandaag, 26-5-2018 is 43246
Die 21/5/2018 is dus een String die bij het inserten moet worden geconverteerd naar een datum.

Het zal dus iets als dit moeten zijn:
Code:
CurrentDb.Execute "UPDATE auto SET smering=" & CDate(registratiedatum) & " WHERE Equip_PM_Def_ID=" & Me.Equip_PM_Def_ID
 
Laatst bewerkt:
Vermoed dat het niet datum 0 is.
Wanneer ik datum 01 maart 2018 (01/03/2018) ingeef en converteer naar mm-dd-yyyy dan is de waarde in de tabel 23/06/1894 !!
Dus is een converteer probleem.
Maar heb al verschillende format(xxxx, MM-DD-YYYY) of DD-MM-YYYY) ed geprobeerd.
 
Je kan een string niet met Format naar datum converteren, dat is ook niet wat ik liet zien.
 
Klopt. Heb natuurlijk ook CDATE geprobeerd maar ook helaas.
Ik vermoed/denk ook wel dat er een 'verkeerde' waarde wordt weggeschreven maar op welke manier kan ik wel de juiste waarde wegschrijven !!!
Ik laat telkens de waarde van het veld weergeven via msgbox en dan is het wel de juiste waarde.
 
De waarde in de messagebox is altijd goed omdat het een String is.
Ik heb zelf geen Acces dus kan geen voorbeeld geven.
Maar even op Helpmij collega Octafish wachten, die weet echt wat je moet doen en kan het laten zien :)
 
Altijd leuk om een draadje te lezen waar zowel vraagsteller als helper de draad kwijt zijn :). Toch is het probleem simpel (en ook simpel op te lossen): een update via VBA moet altijd via een conversie lopen, omdat je een Nederlandse datum nooit goed in een tabel krijgt omdat VBA met Amerikaanse notatie werkt. Je moet de datum uit je formulier dus eerst omzetten naar een getal, en via de query terugvertalen naar een datum met CDate.
PHP:
CurrentDb.Execute "UPDATE auto SET smering=CDate(" & CDbl(Me.registratiedatum) 
& ") WHERE Equip_PM_Def_ID=" & Me.Equip_PM_Def_I
Zou moeten werken.
 
Je hebt vast van de mooie dag genoten dat je er niet eerder was :)
 
We zijn het eens, da's nog beter :D
 
Top. Is de oplossing.
Geniet van het mooie weer en de concerten :)
Nu kan ik ook gaan genieten :);)
 
Ben aan het test met de currentdb.execute maar het wil toch niet lukken.
Voor jullie is dit 'very easy'.

Wat is het currentdb.execute "UPDATE" commando voor
A) een numeriek veld in een tabel
B) een alfanumeriek veld in een tabel

Een doodgewone tabel met een aantal velden.
Een formulier waar je voor een veld een waarde aanpast.
En via currentdb.execute wil ik dat veld updaten in de tabel.
Maar wil niet lukken.
Al op internet gezocht maar helaas.

Voor alfanumeriek veld :
- CurrentDb.Execute ("UPDATE Orders SET Visa='NO' WHERE OrderID=" & Me.txtOrderID)
- CurrentDb.Execute ("UPDATE Orders SET Visa='Me.txtBetaalmiddel' WHERE OrderID=" & Me.txtOrderID)

Voor numeriek veld :
- CurrentDb.Execute ("UPDATE Orders SET Bedrag=10 WHERE OrderID=" & Me.txtOrderID)
- CurrentDb.Execute ("UPDATE Orders SET Bedrag=Me.txtBetaalbedrag WHERE OrderID=" & Me.txtOrderID)

Of zou het probleem kunnen zijn dat je meerdere regels en één keer wil aanpassen in de tabel ?
Maw kan je maar 1 record aanpassen. Soms kan het voorkomen dat je meerdere OrderID records hebt.

Alvast bedankt
 
Laatst bewerkt:
Je haalt een aantal zaken door elkaar. Numerieke velden kun je zonder extra tekens updaten, hetzij met een fysieke waarde, hetzij met een variabele waarde die uit een tabel of formulier komt. In het eerste geval zet je een getal in de query, in het tweede moet je de variabele waarde toevoegen. Voorbeeld van het eerste:
PHP:
CurrentDb.Execute ("UPDATE Orders SET Bedrag=10 WHERE OrderID=" & Me.txtOrderID)
Inderdaad, je eigen voorbeeld. Ja/Nee velden zijn in essentie ook getallen, dus dat gaat op een vergelijkbare methode. Die doe jij dus al fout:
PHP:
CurrentDb.Execute ("UPDATE Orders SET Visa= FALSE WHERE OrderID=" & Me.txtOrderID)
Wil je een flexibele waarde uit een formulier halen, dan moet je die waarde uit de query laten. Uiteraard moet de waarde er wel in, maar het veld dus niet. Gek genoeg doe je dat wél goed voor het criterium, maar niet voor het veld.
PHP:
CurrentDb.Execute ("UPDATE Orders SET Visa=""" & Me.txtBetaalmiddel & """ WHERE OrderID=" & Me.txtOrderID)
En als je het zo doet, kun je ook meerdere velden tegelijk updaten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan