[Access] Vaag : Records zoeken, fout door 2 cijfererig ID?

Pagina: 1
Acties:
  • 62 views sinds 30-01-2008

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Ik ben bezig met een Acces database.
Er moet een getal ingevuld worden (een studentennummer) en als men op een knop duwt dan zoekt hih met behulp van dat getal naar een aantal record die dat getal bevatten en laat info zien die daar aan gekoppeld zit.

Ik heb nu een probleem dat als ik zoek op cijfers als 1, 2, 3, 4 is er niks aan de hand,
Dan vind hij gewoon 4 records zoals dat hoort.

maar als ik zoek op een 2 cijferig getal: 12, 13. 14. 15 dan vind hij er maar 3.
Vul ik dan waar er eerst twee cijfers stonden enekele getallen in dan vind hij er weer 4.

Ik doe een Recordset.movelast en Recordset.movefirst, dus daar mag het niet aan liggen.

Dit is mijn query

code:
1
2
3
MYSQL = "SELECT Tsn_Tbl_Stud_Sport.[ID_Sport], tbl_Sport.[NaamSport], tbl_Sport.[SportOmschrijving] " _
        & "FROM Tsn_Tbl_Stud_Sport INNER JOIN tbl_Sport ON Tsn_Tbl_Stud_Sport.[ID_Sport] = tbl_Sport.[ID_Sport]" _
        & "WHERE OvNummer = " & StrOvNummerZkClinics & ";"


Zoals gezegd met een enkel getal gaat het goed, maar als het een tweecijferig getal is of een mix van beide dan gaar het fout.
Ik snap dit niet.
Ik heb gegoogled, een aantal vaste forums die ik gebruik, en hier de search gebruikt.

8)

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Witte
  • Registratie: Februari 2000
  • Laatst online: 18-08 10:09
Het lijkt me logisch dat je minder records overhoudt als je op 2 cijfers zoekt...

ik bedoel: stel studentummer is: 9208062
de 8 komt wel voor, vaar 81 niet... Duh!

Wacht even, ik begin het te begrijpen:
Je hebt in je database de studentnummer 1 2 3 4 en 11 12 13 14
van beide 4, en dan doet hij het niet?
inderdaad vreemd. Is het studennummer een tekst-veld of een lange integer?

[ Voor 40% gewijzigd door Witte op 01-09-2005 10:36 ]

Houdoe


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Dat studentennummer is een tekstveld:
code:
1
StrOvNummerZkClinics = TxtZoekOvNUmmer.Value

en wordt in de var gestopt.
En dan wordt er gezocht in een tabel die alijd 4 clinics (idiote naam voor sportopleidingen hier)
bevat per studentennummer. (het is een tussentabel die het studentennumeer bevat en het ID van een sport (clinic dus)

OvNummer (studentennummer) en Sport ID
2002 ----------------------------------- 1
2002 ----------------------------------- 2
2002 ----------------------------------- 3
2002 ----------------------------------- 4
// bovenstaand gaat goed, vind er idd 4
2003 ----------------------------------- 12
2003 ----------------------------------- 13
2003 ----------------------------------- 14
2003 ----------------------------------- 15
// gaat fout vind er maar 3

Is het zo iets duidelijker :+

[ Voor 31% gewijzigd door bluesbrother op 01-09-2005 11:21 . Reden: Maar even stippellijntjes ipv spaties, die onthield hij niet., ]

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

  • En je weet zeker dat er echt ook 4 in de tabel staan?
  • En als je de query rechstreeks maakt (dus de variabele vervangen door de waarde)?
  • Van welk type is de variabele StrOvNummerZkClinics? Gezien Str lijkt het een String, maar moet dat geen Integer zijn?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Dit lijkt mij meer een dataprobleem dan iets anders. Kijk nog eens goed of de SportID wel goed staat in beide tabellen.

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Tussen_tabel_SportID_StudentenID
- Sport_ID Numeriek
- OvNummer Numeriek

tbl_Sport
ID_Sport Autonummering
Sportnaam Text

Ik denk (stom van me :o ) dat het txtveld er text van maakt.
Dat daar het probleem zit. Alleen raar dat hij dat pas doet als het om meer dan 1 cijfer gaat.
Als ik de variabele in de query vervang geeft hij me er gewoon 4.

(het zijn er altijd 4 records ivm de keuze die de student eerder gedaan heeft, hij kiest vier sportopleidingen uit)

Dus ik denk dat het probleem daar zit.
Hoe maak ik nu op een makkelijke manier hier weer een integer van?

[ Voor 2% gewijzigd door bluesbrother op 01-09-2005 11:52 . Reden: woordje vergeten ]

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Ik heb met
StrOvNummerZkClinics = CInt(TxtZoekOvNUmmer.Value)
er een integer van gemaakt en nog steeds dezelfde probelmen.

in de tabel staat dit:

OvNummer ID_Sport
2002--------------- 12
2002------------- 14
2002------------ 13
2002------------ 15

Hij vind er maar 3.
De zoektocht gaat verder.
8)

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

En alle sporten 12 t/m 15 staan ook in tbl_sport?

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Yep

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Nogmaals de vraag:
Wat is het type van StrOvNummerZkClinics? Want je kan er met CInt() wel een integer instoppen, als het van het type Str(ing) is, blijft het natuurlijk een string :)

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Het wordt als een getal ingevoerd in een txtbox.
Dan wordt het in die variabele gestopt en gaat ie zoeken.
Het is een nummeriek veld in de tabel.
Of snap ik je vraag niet goed?

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Ik snap een paar dingetjes niet.
Je hebt het in je voorbeelden steeds over een vier of meer cijferig ov-nummer en je query bevat ook een where voorwaarde op OV-nummer. Maar je schrijft ook: als ik zoek op een twee-cijferig nummer etc. Dan heb je het dus over het sport_id, maar ik zie nergens een criterium op sport_id.

Overigens zou je hele query zoals je die hier post niet eens mogen werken: ik mis een spatie voor 'where etc'. Loop eens goed door de ingevoerde gegevens heen, want zoals ik het nu zie moet het wel bijna een datafout zijn.

Als je die hele where voorwaarde weglaat, geeft ie dan wel alle records van alle studenten correct weer?

[ Voor 9% gewijzigd door Lustucru op 01-09-2005 13:49 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Als je een variabele gebruikt (StrOvNummerZkClinics in dit geval) moet je deze, als je het netjes doet, eerst declareren. Je moet Access vertellen dat je StrOvNummerZkClinics gaat gebruiken in de code, en wat voor type het is.

Dat doe je met het commando Dim. Op de eerste regel van de procedure (onder Private Function ...) begin je daar meestl mee:
code:
1
Dim StrOvNummerZkClinics as Integer

En als je het netjes doet maak je er meteen IntOvNummerZkClinics, dan weet een andere programmeur ook meteen dat er een Int(eger) in die variabele staat.

Als je de variabele niet eerst declareerd met Dim, gaat Access er zelf iets voor kiezen. Waarschijnlijk wordt het dan een Variant, en dan kan je rare dingen krijgen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Nee ik heb het denk ik niet helemaal goed uitgelegd.

Er is een tabel met Studenten
ID_Studenten
Naam
NAW etc
-------------------------------------------
Dan is er een Tabel Sporten:
ID_Sport
NaamSport
----------------------------------------
Er is een tussen tabel die de twee met elkaar verbind.
OvNummer -------------------- Sport ID
2002 ----------------------------------- 1
2002 ----------------------------------- 2
2002 ----------------------------------- 3
2002 ----------------------------------- 4
------------------------------------------------------
De query die hierboven staat zoekt in de tussentabel naar de 4 sporten met het OVnummer.
Als er maar 3 records zijn gevonden dan geeft hij een (doormij gemaakte ) error.
(een student geet zich op voor 4 sportopleidingen, de docent maakt daar uiteindelijk 3 van)
Als een docent de keuze voor de student al gemaakt heeft zijn het er 3 en dat klopt dan wel.
Maar ik zie duidelijk in de tabel staan:

TussenTabel:
2002 ----------------------------------- 9
2002 ----------------------------------- 10
2002 ----------------------------------- 12
2002 ----------------------------------- 13
------------------------------------------------------------------
SportTabel:
ID_Sport ---------------------- NaamSport
9 ---------------------- Softbal
10 ---------------------- Volleybal
12 ---------------------- Zwemmen
13 ---------------------- Streethockey

------------------------------------------------------------------

En hij komt er maar met 3.

Hieronder de hele sub die het doet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Sub ZoekStudent()

Dim StrOvNummerZkClinics As String
Dim MYSQL, MYSQL2  As String

On Error GoTo Err_Handl_Records

StrOvNummerZkClinics = CInt(TxtZoekOvNUmmer.Value)

MYSQL = "SELECT Tsn_Tbl_Stud_Sport.[ID_Sport], tbl_Sport.[NaamSport], tbl_Sport.[SportOmschrijving] " _
        & "FROM Tsn_Tbl_Stud_Sport INNER JOIN tbl_Sport ON Tsn_Tbl_Stud_Sport.[ID_Sport] = tbl_Sport.[ID_Sport]" _
        & "WHERE OvNummer = " & StrOvNummerZkClinics & ";"
       
            
        
MYSQL2 = "SELECT tbl_Student.OvNummer, tbl_Student.VoorLetters, tbl_Student.Vnaam, " _
            & " tbl_Student.Anaam, tbl_Student.TsnVgsl, tbl_Student.Geslacht," _
            & " tbl_Student.Geboortedatum, tbl_Student.OpmerkingenStudent FROM tbl_Student" _
            & " WHERE OvNummer = " & StrOvNummerZkClinics & ";"
    
    Set dbase = CurrentDb()
    Set RSDocentMaakKeuzeClinicsDefinitief = dbase.OpenRecordset(MYSQL)
    
        Set RSDocentMaakKeuzeClinicsDefinitiefAlleenStudentenInfo = dbase.OpenRecordset(MYSQL2)
    


    RSDocentMaakKeuzeClinicsDefinitief.MoveLast
        RSDocentMaakKeuzeClinicsDefinitief.MoveFirst
            RSDocentMaakKeuzeClinicsDefinitiefAlleenStudentenInfo.MoveLast
                RSDocentMaakKeuzeClinicsDefinitiefAlleenStudentenInfo.MoveFirst
                
                MsgBox RSDocentMaakKeuzeClinicsDefinitief.RecordCount
      
     If RSDocentMaakKeuzeClinicsDefinitief.RecordCount < 4 Then
      MsgBox "Er is voor deze student al een definitieve keuze gemaakt."
      Else
            'MsgBox RSDocentMaakKeuzeClinicsDefinitief.RecordCount
                Call Vulvelden
                Call ShowElementsKeuzeStudDefenitief
                Call ZoekSportElectives
    End If
    
            
Err_Handl_Records:

Select Case Err.Number

    Case 3021
                    MsgBox "Er zijn geen records gevonden"
    Case 0
    
    '    Resume Next
        
    Case Else
        '    MsgBox "Er is een fout gebeurd met foutnummer" & " " & Err.Number & " En de Omschrijving:" & "  " & Err.Description
        End Select
            
End Sub


De tweede recordset is voor de studenten NAW die hij in het zelfde formulier zet.

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Leuk, maar nog 1 keer:
Verander
code:
1
Dim StrOvNummerZkClinics As String

in
code:
1
Dim StrOvNummerZkClinics As Integer


Je stopt er toch een integer waarde in? Ik weet niet zeker of dit het probleem zal oplossen voor je, maar zoals het er nu staat is het in ieder geval (strikt genomen) fout.

Edit:
Ik zie geen code staan die gebruik maakt van die tweede recordset (met die absurd-lange-maar-vast-wel-duidelijke naam. Is dat niet overbodig binnen deze sub?

[ Voor 22% gewijzigd door Boss op 01-09-2005 14:37 ]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Helaas het is niet de oplossing. :X

de tweede recordset wordt met
Dat gebeurd met de sub Vulvelden

code:
1
Call VulVelden


Gevuld maar is meer als controle of de docent de juiste leerling te pakken heeft.

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

^^^met Boss, enne
Hoe weet je zo zeker dat hij er drie retourneert? Het lijkt me waarschijnlijker dat ie helemaal niets teruggeeft, omdat er nog steeds een spatie ontbreekt achteraan regel2 van mysql
Doe anders eens een 'debug.print mysql' en plak de sql tekst in een queryontwerp en probeer die query eens te runnen.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Ik doe een
code:
1
Recordset.RecordCount


Als ik in de query de variabalen vervang door gewone waarden dan geeft ie er ook maar 3.
Ook in het query ontwerp venster en er staan er echt 4 !!
Ik slaap er nog een nachtje over en kijk of ik morgen iets stoms zie.

Ik wil het ding ook best mailen, kan je eens op je gemak kijken?

8)

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


Verwijderd

Ik zeg het nogmaals: dit is hoogstwaarschijnlijk een dataprobleem. Zip de database en mail hem maar naar het email adres in mijn profiel.

Edit:
Via een URL is beter idd.

[ Voor 15% gewijzigd door Verwijderd op 01-09-2005 15:25 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zet hem ergens online, dan kunnen meer mensen die tijd en zin hebben ernaar kijken.
offtopic:
Post je iig de oplossing ook even?

[ Voor 21% gewijzigd door Lustucru op 01-09-2005 15:17 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

verwar de veldtypes niet met type dat je variabele StrOvNummerZkClinics moet hebben, heel je SQL-statement is immers toch altijd een string.
in dit geval zorgt de functie cint voor problemen, deze voorziet immers bij positieve getallen een spatie als tekenaanduiding.
doe eens StrOvNummerZkClinics = cstr(val(TxtZoekOvNUmmer.text)).

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Hier


http://www.ictkb.com/db/SportDataBase v0.3.mdb


(en _heretic_ het probleem bestond al voor dat ik cint had gebruikt.)

Mensen dank voor de hulp.

8) = _/-\o_

[ Voor 13% gewijzigd door bluesbrother op 01-09-2005 16:11 . Reden: URL werkte niet. ]

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • TXC
  • Registratie: Oktober 2002
  • Laatst online: 24-12-2025

TXC

Ga ook even checken.

Je moet trouwens je URL even aanpassen...

edit:

Oh ik zie het al de URL werkte al niet..hmz. Misschien met %20's werken ipv spaties?


edit 2:
Overigens nog een tipje voor het kiezen van de sporten voor de studenten. Je hebt nu 4 keuzelijsten met alle sporten waarin je steeds 1tje kan selecten. Ik gebruik voor dergelijke constructies meestal 1 keuzelijs met alle sporten en dan een knop daarnaast en daarnaast weer een keuzelijst met de gekozen sporten. Vervolgens laat je met VBA de keuzes van lijst 1 met de knop naar lijst 2 komen. Lijst 2 gebruik je na het definitief maken van de keuze als input voor je tabel.

[ Voor 105% gewijzigd door TXC op 01-09-2005 16:21 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
Moet je van die 14 eens 11 make ofzo,
nog steeds hetzelfde probleem.

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01-2025

bluesbrother

Blues Rocks!!!

Topicstarter
En 11 bestaat ook niet.

Ik ga mee heeeeeeeeeeeeeeeeel diep schamen en mijn excuses dat ik jullie tijd heb zitten verprutsen heb.
Ik ben gaar en moe en andere smoesjes die hier op van toepassing kunnen zijn.

8)7 8)7 8)7

[ Voor 1% gewijzigd door bluesbrother op 01-09-2005 16:46 . Reden: typefout ]

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Is hier een ban-beleid voor :)

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Hier gaat een slotje op zodat het zo snel mogelijk wegzakt in de krochten van GOT.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1

Dit topic is gesloten.