multi-select textbox vraag

Status
Niet open voor verdere reacties.

jorrit126

Gebruiker
Lid geworden
9 feb 2007
Berichten
48
Beste helpers,

Ik heb op een form in mijn database een multiselect textbox staan, waar ik dmv een knop de geselecteerde records uit tabel TXT wil toewijzen aan een artikelnummer (handmatig invoeren), die daarna weer in een extra kolom in de tabel TXT komt te staan.


Dit is misschien nog niet het lastigste!
De tabel TXT bestaat uit 2700 records, waarvan sommige records aan meerdere artikelnummers toegewezen moeten worden. (kan dat in 1 kolom?)

Ik zou hier wel wat hulp bij kunnen gebruiken want mijn kennis van VBA is te klein om het zelf te kunnen doen. Ben al uren bezig geweest op internet zoeken naar een mogelijke oplossing maar over dit specifieke geval kan ik niets vinden.

Bij voorbaat dank:D
 
(kan dat in 1 kolom?)
Niet doen.... zelfs al zou het kunnen (wat zo is) dan verziek je de hele structuur van je db, want die is dan absoluut niet meer genormaliseerd. Je hebt in mijn optiek een koppeltabel nodig, waarin je elke combinatie van records uit TXT en te koppelen artikelnummers vastlegt.
 
Natuurlijk! Bedankt voor de tip. (waarom kom ik hier zelf niet op?:rolleyes:)

Sowieso moeten alle records met de hand toegewezen worden aan een artikelnummer. Dit gaat op basis van het artikelnummer, waaraan +/- 7 records per keer moeten worden opgeslagen.
Ik vraag me af hoe ik dit nu het snelst kan doen. (multi-select tekstbox handig?)
 
Ik weet niet wat je in die keuzelijst zet; je hebt het over 2700 records. Ik neem niet aan dat die in de keuzelijst staan? Maar wat dan wel?
 
In de keuzelijst staan inderdaad 2700 records, deze zijn wel gesorteerd op alfabet dus zoeken is niet een heel groot probleem.
vb: artikelnummer 26000 bevat de records: 26000a, 26000b, 26000c, 18000a,18000b,18000c
De vraag was dus ook of dit handig is, en uit je reactie te lezen is er dus een makkelijkere oplossing?:)
 
Laatst bewerkt:
niemand die me kan helpen? Eventueel alleen met het stukje code wat de selectie van mijn textbox kan opslaan onder een zelf ingevoerde naam?
 
Maak eens een voorbeeldje, dat spreekt wat meer tot de verbeelding. En geeft ons wat meer houvast.
 
Hierbij een voorbeeld database. In het formulier zie je een multi-select textbox waar ik enkele records wil kunnen aanvinken, en ernaast het artikelnummer waar ik deze records aan wil koppelen. De knop op formulier heeft nu geen functie, maar zodra ik deze aanklik wil ik dat hij de geselecteerde records onder het opgegeven artikelnummer opslaat in de koppeltabel ArtikelNr_TXT.
Ik hoop dat het nu een beetje duidelijk is.

Ik krijg het bestand niet in de bijlage? dus hier de downloadlink:
http://www.2shared.com/file/-FNuaf-p/DB_JV.html
 
Laatst bewerkt:
Ben een week uit de roulering geweest wegens ziekte. Helaas blijf ik nog steeds hangen op bovenstaand probleem,
iemand die mij hier mee kan helpen?
 
Laatst bewerkt:
Heb je voorbeeldje een 'klein' beetje aangepast; nu kun je volgens mij wel doen wat je voor ogen hebt.
 

Bijlagen

Haha dat zal je ook weer net zien heb ik het zelf eindelijk uitgevogeld, krijg ik van jou de oplossing!

Ik heb de volgende code gebruikt die volgens mij ongeveer hetzelfde doet als jou code:
Code:
Private Sub cmdAddRecords_Click()

  Dim strSQL        As String
  Dim db            As DAO.Database
  Dim rs            As DAO.Recordset
  Dim ctl           As Control
  Dim varItem       As Variant

  On Error GoTo ErrorHandler

  Set db = CurrentDb()
  Set rs = db.OpenRecordset("ArtikelNr_TXT", dbOpenDynaset, dbAppendOnly)

  If Me.TekstId.ItemsSelected.Count = 0 Then
    MsgBox "Selecteer minstens 1 tekstbestand"
    Exit Sub
  End If

  If Not IsNumeric(Me.ArtikelNr) Then
    MsgBox "Voer een artikelnummer in"
    Exit Sub
  End If

  'Geselecteerde waarden toevoegen aan tabel
  Set ctl = Me.TekstId
  For Each varItem In ctl.ItemsSelected
    rs.AddNew
    rs!TekstId = ctl.ItemData(varItem)
    rs!ArtikelNr = Me.ArtikelNr
    rs.Update
  Next varItem

ExitHandler:
  Set rs = Nothing
  Set db = Nothing
  Exit Sub

ErrorHandler:
  Select Case Err
    Case Else
      MsgBox Err.Description
      DoCmd.Hourglass False
      Resume ExitHandler
  End Select
End Sub

Zie dat je ook de PK's verandert hebt van de koppeltabel, zou je dit misschien toe kunnen lichten? Dan weet ik ook waarom dit nodig is:)

Verder hartstikke bedankt voor je hulp/tijd Michel!:thumb:
 
Laatst bewerkt:
Wat bedoel je met PK's?

Jouw code werkt wel, maar is niet zo netjes als de mijne, omdat je geen controle hebt ingebouwd of de records al een keer zijn toegevoegd. En dat lijkt mij wel belangrijk. Je kan eens kijken welke van de twee het snelst is met een paar honderd records, lijkt mij wel interessant :)
 
Met PK bedoel ik de sleutel.
En die controle is inderdaad wel handig, maar controleert deze de combinatie van tekstdocument samen met artikelNr? Want elk artikelnummer heeft zijn eigen tekstdocumenten maar veel tekstdocumenten komen wel voor op meerdere artikelNr's. (of is dit dmv. de relaties al uitgesloten?)
Ik heb het topic op opgelost gezet
 
Dat was de reden dat ik de sleutel heb aangepast; een autonummerveld is op zichzelf een perfecte sleutel, omdat een nummer maar één keer wordt aangemaakt, maar zo'sn sleutel zegt doorgaans niks over de gegevensintegriteit die je nastreeft. Een combisleutel doet dat vaak wel. Door een sleutel te maken van [TekstId] en [ArtikelNr] voorkom je dat een combinatie meer dan één keer voor kan komen. Uiteraard kun je één ArtikelNr koppelen aan meerdere TekstId's en één TekstId aan meerdere ArtikelNr's, maar elke combinatie dus maar één keer. Op zich is dat al voldoende, en is het met zo'n sleutel al onmogelijk om records dubbel toe te voegen. Je krijgt dan alleen foutmeldingen als je het toch probeert. Door te checken op het bestaan van de combinaties voorkom je die foutmelding dus. En als je toch kiest voor een andere sleutel, dan is de check natuurlijk helemaal nodig.
 
Aah duidelijk! Bedankt voor de uitleg..
Zit nog met 1 kleine vraag:

Ik wil in de Listbox op mijn form kunnen zoeken naar records via een textbox. Hier heb ik een code voor alleen deze geeft fout 94: ongeldig gebruik van null. Ik zie zelf niet waar de fout zit..

Code:
Private Sub TxtSearch_Change()

    Dim I As Integer, IntID As Long

    For I = 0 To Me.LstText.ListCount - 1

        If Left$(Me.LstText.Column(1, I), Len(Me.TxtSearch.Text)) = Nz(Me.TxtSearch.Text, "") Then

            Me.LstText = Me.LstText.ItemData(I)

            Exit For

        End If

        Me.LstText = Null

    Next I

End Sub
 
De structuur is fout. Maar een geinige vraag :thumb:

Code:
Private Sub TxtSearch_Change()
Dim i As Integer
Dim ctl As Control
    
    Set ctl = Me.lstText
    For i = 0 To ctl.ListCount - 1
        If Left(ctl.ItemData(i), Len(Me.TxtSearch.Text)) = Nz(Me.TxtSearch.Text, "") Then
            ctl.Selected(i) = True
        Else
            ctl.Selected(i) = False
        End If
    Next i

End Sub
 
Michel je bent weer de held van de dag!
Heb echter nog 1 hele kleine vraag en dan hoop ik dit forum een tijdje niet meer te bezoeken:)
De zoekfunctie werkt goed alleen hij scroll't in de listbox niet automatisch naar het juiste record, is hier een functie/mogelijkheid voor?
 
Heb je hier nog een oplossing voor michel? Heb van alles geprobeert maar niets mocht baten:(
Klopt het dat ik hiervoor .setfocus moet gebruiken? zoja op wat voor manier want ik krijg alleen maar foutmeldingen op welke manier ik deze functie ook gebruik..
 
Ik snap niet helemaal wat je bedoelt met 'hij scrollt in de listbox niet automatisch naar het juiste record'. Setfocus zal hierbij overigens niet helpen, want daarmee zet je de focus op het object, en niet op een waarde uit die lijst.
 
Ik bedoel hiermee dat zodra ik een record zoek in de textbox het record gemarkeerd word in de listbox, maar als ik van de 2700 records nummer 2650 zoek de listbox niet scrollt naar nummer 2650 maar alleen de eerste 10 records laat zien.

Hoe zorg ik ervoor, dat terwijl ik typ de listbox ook bijgewerkt wordt naar het record dat ik zoek?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan