ID terug halen na gebruik Distinct

Status
Niet open voor verdere reacties.

Rommyke

Gebruiker
Lid geworden
29 mrt 2007
Berichten
357
Hoi allemaal,

om een combobox te vullen gebruikt ik een select query .

In deze select query maak ik gebruik van Distinct om geen dubbele waarden in mijn combobox te krijgen .Hierdoor heb ik in mijn query de ID eruit moeten laten .

Code:
StrSql = "SELECT Distinct Materiaal.MateriaalNaam, Materiaal.MateriaalCategoryID "
StrSql = StrSql & "FROM Materiaal "
StrSql = StrSql & "WHERE (((Materiaal.MateriaalCategoryID)=" & Me.CboMateriaalCategory & "));"
 
 Me.CboMateriaalnaam.RowSource = StrSql
 Me.CboMateriaalnaam.Requery


Probleem is echter dat hierna nog zo'n 3 comboboxen komen die telkens afhangen van de vorige combobox.

Maar vermits ik in de eerste geen gebruik gemaakt heb van Materiaal.MateriaalID kan ik via Me.CBoMateriaalNaam.Column(...) niet meer aan MAteriaalID komen of ook niet meer via de daarop volgende comboboxen.

Iemand een idee hoe ik dit kan oplossen ?

Bedankt
Romain
 
volgens mij gebruik je de verkeerde tabel. Als je je materiaalcategory wilt gebruiken dan moet je je combobox daarop baseren.
Als je alleen de gebruikte MateriaalCategorien wil selecteren dan breidt je de where clause uit met:

Code:
SELECT * FROM Categorieen
WHERE CategoryID in (select CategoryID from Materiaal)
Danheb je de ID ook weer beschikbaar.

HTH:D
 
Hoi Guus ,

de ID die ik graag terug terbeschikking heb is die van de materialen .

Zal het eens uitgebreider uitleggen .
Ik heb een tabel materialen en die is gekoppeld aan een tabel materiaalcategorien

In mijn combobox category kan ik een bepaalde category selecteren.(bv kledij , werktuigen ,....)

Als ik eenmaal een category geselecteerd heb( dus in mijn after-update) laat ik afhankelijk van mijn selectie een 2de combobox vullen (combobox met materialen)

Code:
StrSQl = "SELECT Distinct Materiaal.MateriaalNaam, Materiaal.MateriaalCategoryID "
StrSQl = StrSQl & "FROM Materiaal "
StrSQl = StrSQl & "WHERE (((Materiaal.MateriaalCategoryID)=" & Me.CboMateriaalCategory & "));"

Als ik nu als category kledij kies heb ik in mijn tabel van materialen Hemd , schoenen , t-shirt ,Jas , .... staan. Deze materialen komen er meerdere keren in voor omdat er voor elk materiaal meerdere modellen bestaan.
Daarom gebruik ik een distinct om alles maar 1X in mijn lijst te zien en kan ik geen gebruik maken van Materiaal.MateriaalID in deze strSQl.

Als ik een materiaal gekozen heb, bv een Hemd dan wordt een volgende combobox gevuld waar ik het type kan selecteren.Dit doe ik met de volgende code

Code:
StrSQl = "SELECT Materiaal.MateriaalType, Materiaal.MateriaalNaam, Materiaal.MateriaalID "
StrSQl = StrSQl & "FROM Materiaal "
StrSQl = StrSQl & "WHERE (((Materiaal.MateriaalNaam)='" & Me.CboMateriaalnaam.Column(0) & "')) "
StrSQl = StrSQl & "Order BY Materiaal.MateriaalType;"

Me.cboMateriaalnaam.Column(0) geeft me een string weer nl de naam van het materiaal.

Een volgende combobox die gevuld wordt zijn de maten(grote) die je beschikbaar hebt deze komen uit een andere tabel Materiaal eenheidsprijs
die gebeurd met volgende code
Code:
StrSQl = "SELECT MateriaalEenheidsPrijs.Maat, MateriaalEenheidsPrijs.MateriaalPrijsID, Materiaal.MateriaalID, Materiaal.MateriaalNaam, Materiaal.MateriaalType "
StrSQl = StrSQl & "FROM MateriaalEenheidsPrijs INNER JOIN Materiaal ON MateriaalEenheidsPrijs.MateriaalID = Materiaal.MateriaalID "
StrSQl = StrSQl & "WHERE (Materiaal.MateriaalNaam)='" & Me.CboMateriaalnaam.Column(0) & "' "
If Len(Me.CboTypeMAteriaal & "") > 0 Then ' sommige materialen zijn enkel en hebben geen type
     StrSQl = StrSQl & "AND (Materiaal.MateriaalType) = '" & Me.CboTypeMAteriaal.Column(0) & "' "
End If   

Me.TXTEenheidsprijs = ""

 If Me.CboMaat.ListCount <= 1 Then
    Me.CboMaat = DLookup("[Maat]", "MateriaalEenheidsPrijs", "[MateriaalType]='" & Me.CboTypeMAteriaal.Column(0) & "' And '" & Me.CboMateriaalnaam.Column(0) & "'")
    If Len(Me.CboTypeMAteriaal & "") > 0 Then
       Me.TXTEenheidsprijs = DLookup("[EenheidsPrijs]", "MateriaalEenheidsPrijs", "[MateriaalType]='" & Me.CboTypeMAteriaal.Column(0) & "' And '" & Me.CboMateriaalnaam.Column(0) & "'")
    Else
       Me.TXTEenheidsprijs = DLookup("[EenheidsPrijs]", "MateriaalEenheidsPrijs", "[MateriaalNaam]='" & Me.CboMateriaalnaam.Column(0) & "'")
    End If
    If IsNull(Me.CboMaat.Column(0)) Then
       Me.CboMaat.Enabled = False
       Me.CboMaat.Locked = True
       Exit Sub
    End If
    
 End If

En als ik deze gegevens allemaal heb kom ik maar op 1 materiaal uit met zijn eigen materiaalID die ik dan wil gebruiken om de prijs op te zoeken in mijn tabel.
Hiervoor gebruik ik dan een DlookUp maar vermits ik hier geen materiaalID ter beschikking heb moet ik gebruik maken van combinaties in mijn where , Denk ik :confused:
Denk dat ik in volgende code (vermits ik geen materiaalId heb ) een where moet uitvoeren van materiaalnaam , materiaaltype en de maat ?(code klopt nog niet helemaal)
Code:
 Me.TXTEenheidsprijs = DLookup("[EenheidsPrijs]", "MateriaalEenheidsPrijs", "[MateriaalType]='" & Me.CboTypeMAteriaal.Column(0) & "' And '" & Me.CboMateriaalnaam.Column(0) & "'")

Hoop dat je een beetje kunt helpen

Groetjes
Romain
 
Laatst bewerkt:
Zou je je DB kunnen posten? liefst een gedeelte waaruit het probleem blijkt?
Lees even de tips m.b.t. posten van attachments
 
Hoi Guus ,


Heb een voorbeeldje gemaakt.Is ingekort t.o.v. originele database maar de essentie is hierin wel verwerkt.

Voorlopig heb ik het opgelost door een query te maken en in deze query via 2 criteria(nl Materiaalnaam en Typemateriaal) een Dlookup uit te voeren.
Het lijkt me op het eerste ogenblik te werken maar ben niet zeker of het betrouwbaar is zoals het er nu uitziet.

Kan je eens kijken wat er veranderd dient te worden ?

Bedankt
Romain
 

Bijlagen

voor de materiaal soort heb je een comobox gebruikt en die gekoppeld met de naam en de materiaal tabel. aangezien de naam niet uniek voor hoeft te komen, gebruik je distinct om de duplicaten eruit te halen. wat jij wilt kan dus niet. je moet een tabel maken waarin je de soort opneemt.
 
Oké Guus ,

Bedankt ;)

Had het nog wel gedacht

Ga het voorlopig zo laten.En uitkijken of ik het nog ga moeten veranderen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan