Recordset en WHERE

Status
Niet open voor verdere reacties.

test1000

Gebruiker
Lid geworden
7 jul 2017
Berichten
258
Hoi,

Ik wil een recordset openen.

Code:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM A WHERE [nummer] = nr")

Het veld nr haal ik uit een andere tabel met DLOOKUP.
Veld nummer heeft in tabel A : numeriek, dubbel precisie, standaard en 2 decimalen

Nr gedefineerd als : Dim nr as double

Als ik msgbox nr doe zie ik 10 staan.
10 bestaat in de tabel.
Maar krijg de melding dat er geen records zijn gevonden.


Code:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM A WHERE [nummer] = 10")
Krijg ik wel een waarde. (een record)

Wat gaat er fout ?

Alvast bedankt.
 
Omdat je de variabele niet als variabele gebruikt.
Code:
     Set rst = CurrentDb.OpenRecordset("SELECT * FROM A WHERE [nummer] = " & nr)
 
Code:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Nummer] = " & nr & " and [Naam] = '" & fullnaam & "'" & " And huisnummer = " & rst!huisnr, dbOpenDynaset)

Dit resulteert in 1 record (via rst.recordcount) alhoewel er 2 records zijn.

En ik wil er ORDER BY [Datum] toevoegen en wil maar niet lukken.

Enig idee wat er fout gaat ?

Thx
 
Laatst bewerkt:
Om te kijken of (en hoeveel) er records zitten in je recordset, kun je de code kopiëren in een Inputbox en plakken in een nieuwe query.
Code:
Dim tmp as String
     tmp="SELECT * FROM [A] WHERE Nummer = " & nr & " and Naam = """ & fullnaam & """ And huisnummer = " & rst!huisnr & " Order By Datum "
     Inputbox("","",tmp)
     Set rst = CurrentDb.OpenRecordset(tmp, dbOpenDynaset)
 
Recordset WHERE met alfanumerieke waarde

Beste,


Ik heb een tabel A met een kolom "Omschrijving" (en natuurlijk ook meerdere kolomen)
De kolom omschrijving kan de waarde APPEL, PEER of CITROEN bevatten.

Op welke manier kan ik de recordset instellen ?

Als je APPEL vervangt door me.omschrijving werkt het wel.

Code:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Omschrijving] = '" & APPEL & "'", dbOpenDynaset)

Alvast bedankt.
 
En de oplossing is :

Code:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Omschrijving] = 'APPEL'", dbOpenDynaset)
 
Laatst bewerkt:
Je blijft enkele quoots gebruiken; leer dat af en gebruik bij voorkeur altijd dubbele quoots, zoals ik ook consequent in mijn voorbeelden laat zien. Strings opknippen, zoals je in bericht #5 laat zien, werkt net zo goed als de oplossing in bericht #6; daar zit technish geen verschil tussen, alleen kun je je afvragen of het nou wel zo handig is om elk woord apart in een stringetje te zetten :). Kortom: als je op één vaste waarde wilt filteren, zet je die waarde binnen de string, is het een variabele, dan zet je hem erbuiten. Dus deze twee varianten zijn 100% correct:
PHP:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Omschrijving] = ""APPEL""", dbOpenDynaset)
PHP:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Omschrijving] = """ & Me.Omschrijving & """", dbOpenDynaset)

Jouw variant is dus niet 100% correct. Neem deze twee recordsets:
PHP:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Plaats] = 'Rotterdam'", dbOpenDynaset)
PHP:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Plaats] = ''s Gravenhage'", dbOpenDynaset)

Jij krijgt een foutmelding op de tweede plaatsnaam.

Ik nooit, want ik filter dus zo:
PHP:
Set rst = CurrentDb.OpenRecordset("SELECT * FROM [A] WHERE [Plaats] = ""'s Gravenhage""", dbOpenDynaset)

Voorkom problemen, en gebruik oplossingen die 100% goed werken, ongeacht of het nodig is of niet in je huidige situatie. Een goede database gebruikt technieken die toekomstbestendig zijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan