Datum in Access 2016 VBA SQL Toevoeg-Query

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • KlaasJanBolhuis
  • Registratie: November 2020
  • Laatst online: 27-09 18:04
Wat is de juiste manier om de datum van vandaag als datum toe te voegen aan een tabel in VBA Access 2016 NL. De tabellen zijn gekoppelde tabellen van SQL-Server Express en gebruik ODBC versie 17

-- deel van de docmd.runsql INSERT INTO instructie --:
sql_str = sql_str & "#" Date" & "#, "
sql_str = sql_str & "#" & Format(Date, "yyyy/mm/dd") & "#, "
sql_str = sql_str & DateValue(Date) & ", "

De eerste gaat goed op 30 november, maar maakt van 1 december 12 januari
De tweede gaat goed op zowel 30 november als op 1 december, maar deze manier van programmeren lijkt omslachtig.
De derde geeft een heel andere datum (08-06-1894).

Moet ik het zoeken in de instellingen van de tabel in SQL, de instelling van de ODBC verbinding of is het toch de manier van opbouw van de SQL instructie.

Beste antwoord (via KlaasJanBolhuis op 04-12-2021 13:28)


  • dixet
  • Registratie: Februari 2010
  • Laatst online: 11:29
VBA zal een tekst die als datum moet worden geïnterpreteerd altijd eerst op z'n Amerikaans proberen te lezen. Dus eerst de maand, dan de dag en dan het jaar. Vandaar dat je 1e voorbeeld goed gaat met 30-11, dat kan maar op één manier gelezen worden. 1-12 kan 1 december of 12 januari zijn, VBA kiest dan voor 12 januari.

Als je interpretatiefouten wilt voorkomen kan je datums het beste altijd in de internationale schrijfwijze omzetten: yyyy-mm-dd, daarom gaat je tweede voorbeeld goed.

Je derde voorbeeld werkt niet, omdat DateValue een datumtekst als parameter verwacht, geen datum (wat onder water een getal is die nu door datevalue weer als jaarmaanddag wordt gelezen)

Alternatief is het niet in en string omzetten, maar het record via DAO functies toevoegen. Dan hoef je de datum niet eerst naar tekst om te zetten, maar geef je de datum als parameter mee.

[ Voor 13% gewijzigd door dixet op 04-12-2021 10:40 ]

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • dixet
  • Registratie: Februari 2010
  • Laatst online: 11:29
VBA zal een tekst die als datum moet worden geïnterpreteerd altijd eerst op z'n Amerikaans proberen te lezen. Dus eerst de maand, dan de dag en dan het jaar. Vandaar dat je 1e voorbeeld goed gaat met 30-11, dat kan maar op één manier gelezen worden. 1-12 kan 1 december of 12 januari zijn, VBA kiest dan voor 12 januari.

Als je interpretatiefouten wilt voorkomen kan je datums het beste altijd in de internationale schrijfwijze omzetten: yyyy-mm-dd, daarom gaat je tweede voorbeeld goed.

Je derde voorbeeld werkt niet, omdat DateValue een datumtekst als parameter verwacht, geen datum (wat onder water een getal is die nu door datevalue weer als jaarmaanddag wordt gelezen)

Alternatief is het niet in en string omzetten, maar het record via DAO functies toevoegen. Dan hoef je de datum niet eerst naar tekst om te zetten, maar geef je de datum als parameter mee.

[ Voor 13% gewijzigd door dixet op 04-12-2021 10:40 ]


Acties:
  • 0 Henk 'm!

  • KlaasJanBolhuis
  • Registratie: November 2020
  • Laatst online: 27-09 18:04
Dankjewel Dixet. Ik ga de docmd.runsql ombouwen naar ADO (ADO omdat de DAO Object Libary op de verschillende werkplekken niet goed in de verwijzingen gaat).
Het zou me niets verbazen als ook het probleem hiermee opgelost wordt met teksten die quotes (") bevatten en getallen met decimalen. Daarnaast is het ook wat leesbaarder in deze vorm.

[ Voor 3% gewijzigd door KlaasJanBolhuis op 04-12-2021 13:29 ]