Hoeveel Records kan een keuzelijst met invoervak bevatten.

Status
Niet open voor verdere reacties.

Saalk

Gebruiker
Lid geworden
3 jan 2011
Berichten
85
Goedenavond. Ik heb een vraag ik heb een formulier met daarin een keuzelijst met invoervak daar zoek in drie velden. Maar nu is de tabel waar ik de gegevens uit haal enormgroot ongeveer 530.000 Rekords en blijft ongeveer bij de letter B steken want hij gaat gewoon niet verder. Het zijn overegens Puzzelwoorden die bestaan uit de velden Omschrijving en Woord en Aantal letters.

BVB vriendelijk dank.
 

Bijlagen

Ik heb wel eens geprobeerd het uit te zoeken, en kwam op ongeveer 16000 rijen, een beetje afhankelijk ook van de hoeveelheid tekens in de lijst. Jouw aantal ga je zeker niet redden; ik zou iets verzinnen waarmee je de keuzelijst vult met een selectie die je eerst laat maken, zoals een beginletter.
 
Laatst bewerkt:
Ik heb wel eens geprobeerd het uit te zoeken, en kwam op ongeveer 16000 rijen, een beetje afhankelijk ook van de hoeveelheid tekens in de lijst. Jouw aantal ga je zeker neit redden; ik zou iets verzinnen waarmee je de keuzelijst vult met een selectie die je eerst laat maken, zoals een beginletter.

Ik heb net de letter A geteld en dat zijn er ongeveer 31.000 Records.
Als ik kopieer en plak kan ik maximaal 65.000 rekords kopieren.
Hoe zou ik zo'n selectie moeten maken met een SelectieQuery?
En dan bvb de letter "a" bij criteria invullen.

BVB Hartelijkdank.
 
Er zijn een paar mogelijkheden... Je kunt bijvoorbeeld een tekstvak maken, en dat als basis gebruiken voor de keuzelijst, of je filtert op de keuzelijst zelf. Die geef je dan een Rowsource bij het laden van het formulier

Code:
Private Sub Form_Current()
    Dim strSQL As String
    If Not IsNull(Me!IPID) Then
        strSQL = "SELECT IPID, Domain FROM tlkpIPAddress WHERE IPID=" & Me!IPID
        Me!cboIPID.RowSource = strSQL
    Else
        Me!cboIPID.RowSource = ""
    End If
End Sub
... en je zet een actie bij de gebeurtenis <Bij gewijzigd>.
Code:
Private Sub cboIPID_Change()
Dim strSQL As String
    If Len(Me!cboIPID.Text & "") >= 3 Then
        strSQL = "SELECT IPID, Domain FROM tlkpIPAddress" _
            & " WHERE Domain LIKE '" & cboIPID.Text & "*'" _
            & " ORDER BY Domain;"
        Me!cboIPID.RowSource = strSQL
    Else
        Me!cboIPID.RowSource = ""
    End If
End Sub
 
In dit draadje vind je een voorbeeldje dat ik gemaakt heb met de andere oplossing: een tekstvak om de keuzelijst te beperken.
Overigens is een keuzelijst beperkt tot zo'n 65000 records als je hem koppelt aan een tabel; de beperking die ik zelf aangaf geldt voor het instellen van een Lijst met waarden.
Om dat wat preciezer aan te duiden:

Veldnamen mogen niet langer zijn dan 50 tekens, en het totaal aantal tekens niet groter dan 2050, of het aantal velden groter dan 71. Anders kan de lijst namelijk niet worden gemaakt....
Met deze routine kun je dat checken.
Code:
iTeller = 0
strList = ""
For i = 0 To db.TableDefs(strTabel).Fields.Count - 1
    strName = db.TableDefs(strTabel).Fields(i).Name
    If Len(strName) <= 50 Then
        iTeller = iTeller + 1
        If Len(strList) + Len(strName) < 2046 And iTeller < 71 Then
            If iTeller > 1 Then strList = strList & ";"
            strList = strList & "'" & strName & "'"
        End If
    End If
Next i
 
Er zijn een paar mogelijkheden... Je kunt bijvoorbeeld een tekstvak maken, en dat als basis gebruiken voor de keuzelijst, of je filtert op de keuzelijst zelf. Die geef je dan een Rowsource bij het laden van het formulier

Code:
Private Sub Form_Current()
    Dim strSQL As String
    If Not IsNull(Me!IPID) Then
        strSQL = "SELECT IPID, Domain FROM tlkpIPAddress WHERE IPID=" & Me!IPID
        Me!cboIPID.RowSource = strSQL
    Else
        Me!cboIPID.RowSource = ""
    End If
End Sub
... en je zet een actie bij de gebeurtenis <Bij gewijzigd>.
Code:
Private Sub cboIPID_Change()
Dim strSQL As String
    If Len(Me!cboIPID.Text & "") >= 3 Then
        strSQL = "SELECT IPID, Domain FROM tlkpIPAddress" _
            & " WHERE Domain LIKE '" & cboIPID.Text & "*'" _
            & " ORDER BY Domain;"
        Me!cboIPID.RowSource = strSQL
    Else
        Me!cboIPID.RowSource = ""
    End If
End Sub

Bedankt voor u snelle reactie. Ik snap het niet ik weet niet waar ik het een ander moet plaatsen. Ik begrijp eruit dat u twee opties voor mij hebt gemaakt. BvB Dank
 

Bijlagen

Heb je de oplossing in het andere draadje al bekeken? Die is denk ik wel simpel over te zetten naar een andere database. Je hoeft alleen maar een tekstvak te maken, en de gebeurtenis die in het voorbeeld zit ongeveer letterlijk over te nemen. Uiteraard moet je dan wel de tabel- en veldnamen aanpassen, anders werkt het niet.
Op basis van het plaatje dat je aanlevert kan ik niet zo veel doen. Dan zou je toch een voorbeeldje moeten maken en posten. Liefst ook nog in 2003 format.
 
Heb je de oplossing in het andere draadje al bekeken? Die is denk ik wel simpel over te zetten naar een andere database. Je hoeft alleen maar een tekstvak te maken, en de gebeurtenis die in het voorbeeld zit ongeveer letterlijk over te nemen. Uiteraard moet je dan wel de tabel- en veldnamen aanpassen, anders werkt het niet.
Op basis van het plaatje dat je aanlevert kan ik niet zo veel doen. Dan zou je toch een voorbeeldje moeten maken en posten. Liefst ook nog in 2003 format.

Ik heb de database er bijgevoegd. In het formulier kijk ik of een omschrijving al bestaat door hem linksboven intevoeren. Als dat niet zo is voer ik de omschrijving er onder in.
En daar weer onder het puzzelwoord(en). Dat werkt goed. Maar de rechterzijde van het formulier daar wil ik zoeken op Puzzelwoord in plaats van Omschrijving. Maar door de hoeveelheid van woorden zijn ze niet allemaal zichtbaar vanwege de max van 65000 records. Als ik bijvoorbeeld Edam invoer zou ik als omschrijving kunnen krijgen Plaats in Nederland en Plaats in Noord-Holland of Plaats in Europa. Snapt u het nog? Ik krijg nu ook een melding dat ik een parameter moet invoeren maar komt dat ik heb zitten vogelen als u op (ok) drukt gaat hij verder. BVB Hartelijk dank voor al u moeite. Ik hoop niet dat ik te veel noten op mijn zang heb.
 

Bijlagen

Ik heb de filtering op de keuzelijst gezet; als je drie letters of meer intypt in de keuzelijst, wordt de lijst beperkt tot de woorden die met de drie ingetypte letters begint. Dat aantal kun je denk ik zelf wel aanpassen, mocht dat nodig zijn.
Ook heb ik de structuur van de tabellen een beetje aangepast. Je veldnamen waren een beetje verwarrend ;)
 

Bijlagen

Ik heb de filtering op de keuzelijst gezet; als je drie letters of meer intypt in de keuzelijst, wordt de lijst beperkt tot de woorden die met de drie ingetypte letters begint. Dat aantal kun je denk ik zelf wel aanpassen, mocht dat nodig zijn.
Ook heb ik de structuur van de tabellen een beetje aangepast. Je veldnamen waren een beetje verwarrend ;)

Ten eerste Hartelijk dank voor u tijd en moeite. Ik heb gekeken en ik begrijp nu ook wat u bedoelde oa de eerste 3 letters typen en door het getal te veranderen naar 1 hoef je maar 1 letter intevoeren. en weet nu ook waar de code opgeslagen is. Voor u makkelijk maar voor mij moeilijk. Ik heb nog een vraag. Als ik in het tekstvak alkmaar type dat ik alleenmaar alkmaar met omschrijving in beeld zie. En niet de rest die erna volgt. Ik hoop dat u het begrijpt. BVB Hartelijk dank en mocht u denken ik ben er klaarmee dan is dat ook goed. Groet Klaas. Ps Ik heb er ook nog een plaatje bij gedaan. Ik heb de nieuws brief ontvangen en heb gezien dat u ook een cursus gaat geven. ik zie er naar uit en hoop het nodige er van te leren.
 

Bijlagen

Laatst bewerkt:
Het eerste deel van je vraag (van de afbeelding) zal helaas niet lukken; als je een keuzelijst wilt beperken op basis van een aantal ingetypte letters, doe je dat op basis van drie manieren:
1. de ingetypte letters staan aan het begin van de zoektekst
2. de ingetypte letters staan op een willekeurige plaats in de zoektekst.
3. De ingetypte tekst is volledig identiek met de zoektekst.

Een paar voorbeelden:
In de lijst staan de woorden
Alkmaar
Alkmaarderhout
Alkmaardermeer
Haarlem

Optie 1:
Ik typ in: alk; ik vind: Alkmaar,Alkmaarderhout, Alkmaardermeer.
Optie 2:
Ik typ in: aar; ik vind: Alkmaar,Alkmaarderhout, Alkmaardermeer,Haarlem.
Optie 3:
Ik typ in: alk; ik vind: niks
Ik typ in: alkmaar; ik vind: Alkmaar

Oftewel: bij optie 1 zoekt Access naar de beginletters die je intypt, en laat vervolgens alles zien wat daaraan voldoet. Bij optie 2 wordt gekeken of de letter(combinatie) voorkomt ergens in de tekst. Maakt niet uit op welke plek. Bij optie 3 moet de volledige zoektekst overeenkomen met de volledige tekst in de zoeklijst.

Ik hoop dat nu duidelijk is dat de vraag een onmogelijke is; door op een deel van de beginletters van de lijst te zoeken, vind je per definitie alle begriipen die met die letters beginnen. Optie 3 (de volledige tekst intypen) is niet heel erg gebruiksvriendelijk, omdat je dan van de gebruiker verwacht wat de exacte omschrijving is die in de lijst voorkomt. En je wilt juist dat de gebruiker met een paar letters een bruikbare zoeklijst krijgt.

Je hebt overigens zelf al een subformulier gemaakt op basis van de keuzelijst Omschrijving; het subformulier voor de keuzelijst Woorden werkt ongeveer op dezelfde manier. Volgens mij moet je daar wel uit kunnen komen...
 
Het eerste deel van je vraag (van de afbeelding) zal helaas niet lukken; als je een keuzelijst wilt beperken op basis van een aantal ingetypte letters, doe je dat op basis van drie manieren:
1. de ingetypte letters staan aan het begin van de zoektekst
2. de ingetypte letters staan op een willekeurige plaats in de zoektekst.
3. De ingetypte tekst is volledig identiek met de zoektekst.

Een paar voorbeelden:
In de lijst staan de woorden
Alkmaar
Alkmaarderhout
Alkmaardermeer
Haarlem

Optie 1:
Ik typ in: alk; ik vind: Alkmaar,Alkmaarderhout, Alkmaardermeer.
Optie 2:
Ik typ in: aar; ik vind: Alkmaar,Alkmaarderhout, Alkmaardermeer,Haarlem.
Optie 3:
Ik typ in: alk; ik vind: niks
Ik typ in: alkmaar; ik vind: Alkmaar

Oftewel: bij optie 1 zoekt Access naar de beginletters die je intypt, en laat vervolgens alles zien wat daaraan voldoet. Bij optie 2 wordt gekeken of de letter(combinatie) voorkomt ergens in de tekst. Maakt niet uit op welke plek. Bij optie 3 moet de volledige zoektekst overeenkomen met de volledige tekst in de zoeklijst.

Ik hoop dat nu duidelijk is dat de vraag een onmogelijke is; door op een deel van de beginletters van de lijst te zoeken, vind je per definitie alle begriipen die met die letters beginnen. Optie 3 (de volledige tekst intypen) is niet heel erg gebruiksvriendelijk, omdat je dan van de gebruiker verwacht wat de exacte omschrijving is die in de lijst voorkomt. En je wilt juist dat de gebruiker met een paar letters een bruikbare zoeklijst krijgt.

Je hebt overigens zelf al een subformulier gemaakt op basis van de keuzelijst Omschrijving; het subformulier voor de keuzelijst Woorden werkt ongeveer op dezelfde manier. Volgens mij moet je daar wel uit kunnen komen...

U bent duidelijk met u uitleg en snap het ook. En met het subformulier ga ik proberen. Dat ik de database heb gemaakt is zeker al zeven à achtjaar geleden.
Nogmaal mijn hartelijke dank. Groet klaas.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan