CmbBox waarde laten opzoeken in een tabel

Status
Niet open voor verdere reacties.

klablabla

Gebruiker
Lid geworden
28 apr 2008
Berichten
116
In mijn database heb ik diverse artikelen staan die op een aantal plekken kunnen staan.

In mijn form heb ik een combobox waar ik het partnumber invul. Nu heb ik in tabel waar deze eventueel kunnen liggen.
Met de volgende code wil ik de lokatie uit die tabel laten halen:

Private Sub CmbPartNumber_AfterUpdate()
Dim PartNumber As String
PartNumber = Nz(Me.CmbPartNumber, 0)

Me.CmbLocation.RowSource = "select PartNumber from TblPartnumberLocation where location=" & Chr$(34) & PartNumber & Chr$(34) & _
" order by PartNumber asc "
Me.CmbLocation.Value = " "
Me.CmbLocation.Requery

End Sub

Helaas zoekt hij het niet op.
 
Je code kan iets netter, en er zitten een paar foutjes in:

Code:
Dim PartNumber As String

PartNumber = Me.CmbPartNumber.Value
Me.CmbLocation.RowSource = "SELECT PartNumber from TblPartnumberLocation " _
    & "WHERE location='" & PartNumber &'" ORDER BY PartNumber"
Me.CmbLocation.Value = ""
Me.CmbLocation.Requery

Maar ik zit nog wel met een vraag: je haalt een waarde op uit CmbPartNumber; ik zou zeggen, op basis van de naam dat je een Partnummer uitleest. Vervolgens ga je een query maken die uit TBLParnumerLocation de Partnummers opvraagt. En je criterium daarbij is:
location=" & PartNumber. En dat snap ik niet helemaal; ofwel je hebt een keuzelijst met Locaties, en je zoekt Partnummers op basis van die locatie, ofwel je zoek Locaties en die zoek je op basis van Partnummer op.
Je zet nu Partnummers in een keuzelijst Locatie, en je doet dat door Locaties te vergelijken met Partnummers. Vind het nogal verwarrend...
 
Daar zit denk ik de fout. Ik zoek de Lokatie op aan de hand van het partnumber. Hij moet dan in de Combobox weergeven wat de mogelijke lokaties zijn.
In iedergeval bedankt ik ga het nu proberen.
 
Ik krijg hem nog niet aan de praat :(

Dit moet nu als het goed is, goed zijn. Maar helaas.

Hij zegt Data Type Mismatch in criteria expression...

Dim PartNumber As String
PartNumber = Nz(Me.CmbPartNumber, 0)

Me.CmbLocation.RowSource = "select location from TblPartnumberLocation where PartNumber=" & Chr$(34) & PartNumber & Chr$(34) & _
" order by location asc "
Me.CmbLocation.Value = " "
Me.CmbLocation.Requery
 
Laatst bewerkt:
Zolang ik niet kan zien wat je nu echt aan het doen bent, kan ik ook niet veel meer sturen dan wat ik al heb aangegeven.
In mijn form heb ik een combobox waar ik het partnumber invul. Nu heb ik in tabel waar deze eventueel kunnen liggen.
Ik neem aan dat je in de tabel [TblPartnumberLocation] opslaat op welke locaties een PartNumber voorkomt. Dus als een artikel op 6 locaties voorkomt, heb je in [TblPartnumberLocation] 6 records gemaakt. Wat je dan vermoed ik wil, is dat je in je formulier in <CmbPartNumber> een partnumber opzoekt, en dat vervolgens op basis van dat partnummer SQL string wordt gemaakt die een andere keuzelijst vult, namelijk CmbLocation. Die string zou er dan zo uit moeten zien:

Code:
strSQL = "SELECT Location from TblPartnumberLocation " _
    & "WHERE PartNumber='" & PartNumber &'" ORDER BY PartNumber"
Me.CmbLocation.RowSource = strSQL 
Me.cmbLocation.Requery
Althans: dat lijkt mij logischer.
Geen idee of Location numeriek is of niet (zou wel moeten), en dat je de Location omschrijving dus uit een andere tabel zou moeten halen.
 
Location is niet nummeriek.

De Partnumbers haal ik uit TblPartnumberDescription
Hier staat het artikel nummer in en de omschrijving.


TblPartnumberLocation ziet er zo uit.

Location PartNumber
LB01E02D 161657
LB01E02A 161657
LB01E01B 161667


Als ik jou SQL string erin zet, werkt het niet: (hij zegt Syntax error)

Private Sub CmbPartNumber_AfterUpdate()

strSQL = "SELECT Location from TblPartnumberLocation " _
& "WHERE PartNumber='" & PartNumber &'" ORDER BY PartNumber"

Me.CmbLocation.RowSource = strSQL
Me.CmbLocation.Requery
End Sub
 
Zit er aan het eind van de regel strSQL een spatie tussen de " en _
Niet zo "_
Maar zo " _

Weet niet of het de oplossing is.
 
Code:
strSQL = "SELECT Location from TblPartnumberLocation " _
    & "WHERE PartNumber='" & PartNumber & "' ORDER BY PartNumber"
 
Code:
strSQL = "SELECT Location from TblPartnumberLocation " _
    & "WHERE PartNumber='" & PartNumber & "' ORDER BY PartNumber"

helaas geeft deze ook, "Data type mismatch in criteria expression (Error 3464)"
 
Laatst bewerkt:
Ik kan de db niet bekijken nu omdat het geen 2003 versie is, maar de fout komt voort uit het gegeven dat de twee velden die je probeert te matchen niet van hetzelfde type zijn. Dus ofwel het veld Partnumber heeft gegevenstype Tekst, en de keuzelijst levert een numerieke waarde of omgekeerd, ofwel de keuzelijst levert een Integer, en het veld Partnumber een Lange Integer. In die hoek kun je nog kijken. Verder is het erg onhandig dat je een tekstveld of keuzelijst op een formulier dezelfde naam geeft als de veldnaam. Access kan daardoor niet goed zien of je de waarde uit een veld haalt, of uit een object. Ik zou de keuzelijst <PartNumber> dus op zijn minst omdopen naar <cboPartNumber>. En in je code kun je er ook beter zo naar verwijzen: "WHERE PartNumber='" & Me.cboPartNumber & "'"
Maar controleer eerst de veldeigenschappen van de velden die je probeert te matchen.
 
Ik had partNumber als number (overal), deze naar text verandert en het werkt nu.
iemand nog een tip om hem sneller te laten zoeken, het duurt nu af en toe 30 seconden.
in partnumbers staan 10000 entrys en in location 9000. (dit kan helaas niet sneller)
 
Na het opschonen van de DB draait hij weer stukken sneller.
In ieder geval bedankt allemaal.
Nu het volgende probleem mailen vanuit form. Maar dat ga ik eerst bouwen.
 
Maak eventueel ook nog een index op Partnummer, dan zoekt hij ook aanzienlijk sneller. Mits je dat nog niet hebt gedaan natuurlijk :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan