Query niet altijd juist

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.682
hallo,
Volgende query doet niet altijd wat ik wil:

Code:
SQL = "UPDATE DATA SET DATA.CODE = '" & f![CODE] & "', DATA.GETUIGTHER = '" & f![peut] & "', DATA.OFFEUSTHER = '" & f![beh] & "' " & _
"WHERE DATA.Kodelang= '" & [Forms]![patlijst]![KODELANG] & "' AND DATA.DATUM = #" & [Forms]![patlijst]![datalijst].Column(1) & "#;"

dit levert als resultaat bvb:

UPDATE DATA SET DATA.CODE = '560011', DATA.GETUIGTHER = 'M', DATA.OFFEUSTHER = 'M' WHERE DATA.Kodelang= '210312490061' AND DATA.DATUM = #2/05/2018#;

waarin velden de waarde M zouden moeten krijgen, maar dat gebeurt niet altijd..
Ik vermoed dat Access zich verslikt op de datum (weer eens) en dat ik de syntax dus moet aanpassen
Iets in de zin van :DATUM = CDate(" & CDbl([Forms]![patlijst]![datalijst].Column(1)) & ")"), maar ik krijg de syntax niet correct, ik krijg altijd een foutmelding (Typen komen niet overeen)

ik schrijf:
Code:
SQL = "UPDATE DATA SET DATA.CODE = '" & f![CODE] & "', DATA.GETUIGTHER = '" & f![peut] & "', DATA.OFFEUSTHER = '" & f![beh] & "' " & _
"WHERE DATA.Kodelang= '" & [Forms]![patlijst]![KODELANG] & "' AND DATA.DATUM = CDate(" & CDbl([Forms]![patlijst]![datalijst].Column(1)) & ");"
 
Zou toch moeten kloppen (niet jouw voorbeeldje trouwens, daar staan wat code tags verkeerd ;) )
Probeer dit eens:
Code:
sql = "UPDATE DATA SET DATA.CODE = """ & f!Data.GETUIGTHER & "= """ & f![peut] & """, DATA.OFFEUSTHER = """ & f![beh] & """ " _
    & "WHERE DATA.Kodelang= """ & [Forms]![patlijst]![KODELANG] & """ AND DATA.DATUM = CDate(" & CDbl([Forms]![patlijst]![datalijst].Column(1)) & ");"
Dim tmp
tmp = InputBox("", "", sql)
Als je de string kopieert en in een nieuwe query plakt, zou die moeten werken. Of aangeven wat er fout is.
 
Ik vrees dat, wat je schreef, niet helemaal correct is:

de oorspronkelijke code is:

Code:
'SQL = "UPDATE DATA SET DATA.CODE = '" & f![CODE] & "', DATA.GETUIGTHER = '" & f![peut] & "', DATA.OFFEUSTHER = '" & f![beh] & "' " & _
"WHERE DATA.Kodelang= '" & [Forms]![patlijst]![KODELANG] & "' AND DATA.DATUM = CDate(" & CDbl([Forms]![patlijst]![datalijst].Column(1)) & ");"


je mist de verwijzing naar f!
Code:
en schrijft f!Data.GETUIGTHER wat verwijst naar een veld dat niet bestaat..
de f! zou weg moeten maar ik geraak in de knoop met al die "
 
Ik vrees dat jouw ‘code’ verwart raakt door de tag CODE. En dat ziet er dus behoorlijk geklutst uit. Maak hem eens met een extra spatie tussen de tags, zodat we de complete syntax correct zien.
 
dit is de code zoals het er in oorsprong uitzag en wat dus niet altijd oplevert wat het zou moeten zijn... (ik krijg de code niet allemaal tussen de code-tags, zelfs met de spaties... ook weer raar)


SQL = "UPDATE DATA SET DATA.CODE = '" & f!
Code:
 & "', DATA.GETUIGTHER = '" & f![peut] & "', DATA.OFFEUSTHER = '" & f![beh] & "' " & _
"WHERE DATA.Kodelang= '" & [Forms]![patlijst]![KODELANG] & "' AND DATA.DATUM=# " & [Forms]![patlijst]![datalijst].Column(1) & "#;" 


ik heb een blauw vermoeden dat het aan het datumonderdeel ligt, maar in elk geval de ene keer blijkt de update te lopen, de andere keer niet

JP
 
Waarom zet je überhaupt de velden tussen rechte haken? Nergens voor nodig, dat moet alleen bij veldnamen met spaties. En dat scheelt dus aanzienlijk in het plaatsen van code :)
Ik wil de uitkomst wel eens zien van die inputbox.
 
der zit wat fout met de code Michel
ik krijg als foutmelding dat de typen niet met elkaar overeen komen
als ik via ctrl-G in het extra venster onderaan het scherm het volgende schrijf:

? Forms!patlijst!datalijst.Column(1)
Krijg ik een correcte datum
typ ik
? CDate(" & CDbl(Forms!patlijst!datalijst.Column(1)) & ")
dan krijg ik de bovenstaande foutmelding

mijn code nu is:

SQL = "UPDATE DATA SET DATA.CODE = '" & f!CODE & "', DATA.GETUIGTHER = '" & f!peut & "', DATA.OFFEUSTHER = '" & f!beh & "' " & _
"WHERE DATA.Kodelang= '" & Forms!patlijst!KODELANG & "' AND DATA.DATUM = G;"
Dim tmp
tmp = InputBox("", "", SQL)
DoCmd.RunSQL SQL
 
Nogmaals mijn vraag: wat is het resultaat dat je in de inputbox ziet? Zolang ik dat niet kan zien, weet ik niet wat er fout gaat.
 
Nogmaals... ik krijg de foutmelding VOOR de inputbox gelanceerd kan worden dus .., geen reultaat
 
Maar we hebben de code niet die je vóór de SQL hebt. Maar ik vermoed dat de fout in die SQL zit, en dat je daar dus niet verder mee komt. Zie je gauw genoeg als je dit uitprobeert in het venster Direct:
Code:
? Forms!patlijst!datalijst.Column(1)
? CDbl(Forms!patlijst!datalijst.Column(1))
? Cdate(CDbl(Forms!patlijst!datalijst.Column(1)))
Ik heb het net even uitgetest met een ander formulier en deze code:
Code:
? Forms!Startdatum_F_aanvraag!Startdatum_F
2-5-2018 
? CDbl(Forms!Startdatum_F_aanvraag!Startdatum_F)
 43222 
? CDate(CDbl(Forms!Startdatum_F_aanvraag!Startdatum_F))
2-5-2018
Krek wak wou :)
 
? CDbl(Forms!patlijst!datalijst.Column(1))
gaat in de fout:

fout 13 tijdens uitvoering:
Typen komen niet met elkaar overeen

de bewuste SQL komt altijd in fluo Geel met deze foutmelding... er blijft dus in die code iets wat niet klopt, en niet in wat eerder gebeurt want daar krijg ik nergens een fout

JP
 
Er zit niks fout in de code, maar in je gegevens. Ik durf er wel wat op te zetten dat je een tekstveld uitleest, geen datumveld.
 
de rijbron van datalijst waarnaar verwezen wordt is:

SELECT DATA.id, DATA.DATUM, DATA.CODE, DATA.GETUIGTHER, DATA.OFFEUSTHER, DATA.ID, DATA.OPMERKING FROM DATA WHERE (((DATA.OPMERKING)="Behandeling") And ((DATA.KODELANG)=forms!patlijst!kodelang)) ORDER BY DATA.id DESC , DATA.DATUM DESC;

en data.datum IS een datumveld...
snap er niets van, vooral omdat de code soms doet wat het moet maar soms ook niet
 
Voorbeeldje hier neer zetten wellicht?
 
Ik zie twee keer het veld [ID] (alles met de tekst “DATA.” Kan trouwens weg, en daar wordt je string ook een stuk leesbaarder door) staan, dus dat hoort niet, en als ID een autonummerveld is, zijn dat unieke waarden en is aflopend op [ID] sorteren al voldoende; dan heb je per [ID] nooit meer dan één record, en is een tweede sorteersleutel (maakt niet uit op welk veld) volslagen overbodig. Wil je per datum op [ID] sorteren, dan moet je de sorteervolgorde omdraaien, dan kan het wel met twee sleutels. Maar dat is niet de oorzaak van je probleem.

Kijk eens of deze varianten wat opleveren:
Code:
? Year(Forms!patlijst!datalijst.Column(1))
? Month(Forms!patlijst!datalijst.Column(1))
? Day(Forms!patlijst!datalijst.Column(1))
? DateSerial(Year(Forms!patlijst!datalijst.Column(1)),Month(Forms!patlijst!datalijst.Column(1)),Day(Forms!patlijst!datalijst.Column(1)))
 
Dit levert op:

? Year(Forms!patlijst!datalijst.Column(1))
2018
? Month(Forms!patlijst!datalijst.Column(1))
5
? Day(Forms!patlijst!datalijst.Column(1))
7
? DateSerial(Year(Forms!patlijst!datalijst.Column(1)),Month(Forms!patlijst!datalijst.Column(1)),Day(Forms!patlijst!datalijst.Column(1)))
7/05/2018

het heeft wel degelijk met de datum te maken
als ik de sql:

SELECT DATA.CODE, DATA.GETUIGTHER, DATA.OFFEUSTHER
FROM DATA
WHERE (((DATA.Kodelang)='210312490061'));

lanceer krijg ik de correcte records te zien, MET de 2 records van 07/05/2018

doe ik:
SELECT DATA.CODE, DATA.GETUIGTHER, DATA.OFFEUSTHER
FROM DATA
WHERE (((DATA.Kodelang)='210312490061') AND ((DATA.DATUM)=#7/5/2018#));
dan krijg ik niets....

ziet er zo een basic probleem uit maar is blijkbaar toch moeilijk op te lossen...

Bedankt
JP
 
Laatst bewerkt:
WHERE (((DATA.Kodelang)='210312490061') AND ((DATA.DATUM)=#7/5/2018#));
Blijkbaar staan de settings van access/het systeem zo dat 210312490061 wel werkt en 7/5/2018 niet, dus als je een AND gebruikt moeten beiden werken om een resultaat (de 2 records immers met 7/5/2018, te vinden).

Wat is de exacte veld definitie daarvan en hoe zien de Windows datum systeem/regio settings eruit?

Kun je een DB-voorbeeld hier neer zetten?
 
Ik heb al een paar keer gezegd dat je datumfilter nooit kan werken, omdat je in VBA met een Amerikaanse datum werkt. Je moet die datum dus converteren. Omdat de DateSerial prima werkt, zou ik die formule gebruiken om een datumvariabele te vullen, die je dan gebruikt in de query.

Code:
Dim dtDatum as Date
     dtDatum = DateSerial(Year(Forms!patlijst!datalijst.Column(1)),Month(Forms!patlijst!datalijst.Column(1)),Day(Fo rms!patlijst!datalijst.Column(1)))

     SQL = "UPDATE DATA SET CODE = '" & f!Code, GETUIGTHER = '" & f!peut & "', OFFEUSTHER = '" & f!beh & "' " & _
          "WHERE Kodelang= '" & [Forms]![patlijst]!KODELANG & "' AND DATUM = CDate(" & CDbl(dtDatum) & ");"

Als dit niet werkt, weet ik het ook niet meer.
 
Ik heb blijkbaar iets te snel victorie geroepen...
De query loopt wel correct nu maar om welke reden ook worden om de een of andere reden ook andere records aangepast die niets met de query te maken hebben
Dat kan natuurlijk de bedoeling niet zijn...
Ultieme oplossing?? laat maar komen hoor

JP
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan