Toon posts:

[ACCESS] Probleem met WHERE statement in DAO procedure

Pagina: 1
Acties:

Verwijderd

Topicstarter
In mijn db wil ik in een form een recordset aanmaken met de records uit een tabel waarbij een veld gelijk moet zijn aan een waarde op het form. Dit doe ik als volgt:

Tabel:
Machinenaam (sleutel), tekst
BU (sleutel), integer
Prestatiecijfer


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
'maak de recordset aan
     Dim Db As DAO.database
     Dim Rs As DAO.Recordset
     Set Db = CurrentDb()
     Dim SQL As String
    
     SQL = "SELECT [Prestatie-BU/Machine].Machinenaam, 
[Prestatie-BU/Machine].Prestatiecijfer, [Prestatie-BU/Machine].BU 
FROM [Prestatie-BU/Machine] 
WHERE [Prestatie-BU/Machine].BU='" & Me.keuze.Value & "' 
ORDER BY [Prestatie-BU/Machine].BU, [Prestatie-BU/Machine].Prestatiecijfer;"
    
     Set Rs = Db.OpenRecordset(SQL, dbOpenDynaset)

let maar niet op de uitlijning.... *ahum*

Bij het uitvoeren krijg ik bij de stap Set Rs= ….. de foutmelding:

Runtime error 3464: Data-type mismatch in criteria expression.

Er is helemaal geen data type mismatch volgens mij!! BU is integer, maar hoe kan ik het veld op het form configureren dat het ook als integer gezien wordt??

Heb al geprobeerd:
Dim Waarde as Integer
Waarde = me.keuze.value

En dan bij de WHERE verwijzen naar Waarde...... zo zou de waarde toch als integer gezien moeten worden, en er geen data type mismatch mogelijk zijn??

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

en Cstr(Me.keuze.Value) al geprobeerd? Probeer anders ook ff compact en repair van de mdb....

Verwijderd

Topicstarter
henkleerssen schreef op 11 februari 2003 @ 14:12:
en Cstr(Me.keuze.Value) al geprobeerd? Probeer anders ook ff compact en repair van de mdb....
heb ik geprobeerd, maar heeft geen zin.

of de WHERE nu een string, integer, of wat dan ook ziet maakt niet uit, hij blijft een data-type mismatch geven :( :(

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Vreemd met die typemismatch.. zegt iets over de variable...

Ook db.openrecordset(SQL, dbOpenSnapshot) geprobeerd?

maar...Ik neem aan dat je data wilt filteren op basis van wat je op je form dan selecteert... dan kan niet met de standaard functionaliteit "Filter by form"?

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

btw welke dao heb je (3.6 of zo?) ... moet eigenlijk niks uitmaken .. maar toch...

Verwijderd

Topicstarter
henkleerssen schreef op 11 februari 2003 @ 14:30:
Vreemd met die typemismatch.. zegt iets over de variable...

Ook db.openrecordset(SQL, dbOpenSnapshot) geprobeerd?

maar...Ik neem aan dat je data wilt filteren op basis van wat je op je form dan selecteert... dan kan niet met de standaard functionaliteit "Filter by form"?
deze procedure is bedoelt om een bepaalde serie data te verifieeren op juistheid. Beetje vaag om zo uit te leggen, maar de Filter by Form werkt niet.

Het moet gewoon kunnen, want als ik de Recordset reocrd voor record laat doorlopen (loop) dan kan het wel. De SQL statement werkt alleen niet, en dat is echt heel erg lastig

Verwijderd

Topicstarter
henkleerssen schreef op 11 February 2003 @ 14:30:
btw welke dao heb je (3.6 of zo?) ... moet eigenlijk niks uitmaken .. maar toch...
Ja, 3.6, maar dat kan toch niks uitmaken??

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

die dbOpenSnapshot maakt het verschil niet uit?

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Het probleem is uiteindelijk heel simpel. In je code staat namelijk
code:
1
2
...WHERE [Prestatie-BU/Machine].BU=' " & Me.keuze.Value & " ' 
ORDER BY...
Zie je hier niks geks aan? Je zet enkele quotes om de waarde van het veld keuze!!! Je doet dus net alsof dit een string is! Terwijl je zelf net al aangeeft dat het een integer waarde moet zijn! KLein code-foutje dus, en niks problemen met DAO...

[ Voor 5% gewijzigd door OZ-Gump op 11-02-2003 17:05 . Reden: leer typen... ]

My personal website


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

mmm .. over het hoofd gezien...

Verwijderd

Topicstarter
ehhhh.....

hoe kan ik deze statement dan veranderen dat het een integer is?? zonder die enkele quotes wordt de SQL-string onderbroken ??

zonder de dubbele quotes wordt het gehele me.keuze.value gezien als stringwaarde ipv waarde van veld.

Of zie ik nu iets over het hoofd??

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Je ziet iets over het hoofd. De dubbele quotes zorgen ervoor dat je de string laat stoppen & er iets tussen plakt & weer verder laat gaan. De enkele quotes hebben hier geen enkel nut, behalve dan dat ze rond de waarde van dat veld gaan staan. En dus dat SQL denkt dat het een stringwaarde moet zijn, want in SQL een enkele quote om een waarde heen wil zeggen dat het een string is. Oftewel: enkele quotes weghalen en gas op de plank!

PS Het lijkt er wel sterk op dat je de basics van het programmeren niet geheel onder de knie hebt. Misschien is het verstandig een keer een goed boek te lezen over VB en/of Access...

My personal website

Pagina: 1