webForumDet fria alternativet

Välj ut värden i dropdown beroende på valt värde i annan dropdown

Databaser & SQL

7 svar · 460 visningar · startad av higa

Medlem sedan aug. 2000359 inlägg
Frågan#1

Jag håller på och försöker lära mig Access men har kört fast.
Som övning försöker jag göra en databas över livsmedelsinköp. Inköp ska registreras i ett formulär där jag vill att man först ska kunna välja affär från en drop-down (från tabellen Affärer), sedan få en drop-down över kategorier (från tabellen Kategorier) och sedan ska drop-down Matvara inte innehålla alla matvaror som finns i tabellen Matvaror, utan bara dom vars kategori överensstämmer med vald kategori i formulärfältet Kategori samt finns registrerade i tabellen Matvaror för den affär som är vald i fältet Affär.

Om jag t ex köper Kesella på Ica så vill jag med andra ord att när jag valt affär och kategori (mjölkprodukter) så ska jag få en lista med just dom mjölkprodukter som jag brukar handla på Ica, dvs dom som i tabellen Matvaror har Affär = Ica och Kategori = mjölkprodukter.

Tabellstrukturen ser ut så här:

Affärer
+Affär
+Ort
+Öppettider och sånt

Kategorier
+ID
+Kategori

Matvaror
+ID
+Affär
+Kategori
+Matvara
+Förpackning
+Pris

Inköp (kopplat till formuläret)
+ID
+Datum
+Affär
+Kategori
+Matvara
+Förpackning
+â-Pris
+Antal

Mvh Lukas

Medlem sedan dec. 20003 887 inlägg
#2

Du kan använda dig av händelsen OnAfterUpdate, som finns för Dropdowns. Varje gång du ändrar värde i någon av dessa vill du ju även att listan över produkter ska uppdateras.
Nu vet jag inte vart du vill lista dessa produkter, men det räcker med att du ändrar och uppdaterar det objektets RecordSource. Såhär kan det se ut

Public Sub DinLista_AfterUpdate()
  Dim strSQL As String

  strSQL = "SELECT Matvara FROM Matvaror WHERE Affär = '" & Me.[i]AffärDropDown[/i] & "' AND Kategori = '" & Me.[i]KategoriDropDown[/i] & "'"

  Me.DinLista.RecordSource = strSQL
  Me.DinLista.Requery
End Sub
Medlem sedan aug. 2000359 inlägg
#3

Jag testade att skriva in din kod med justering för namn på dropdown-rutorna, men när jag väljer en affär eller kategori så startar en felsökning och det står "Kompileringsfel: kan inte hitta metoden eller datamedlemmen" och texten ".RecordSource" markeras.

Min kod ser ut så här:

Private Sub dd_affär_AfterUpdate()
  Dim strSQL As String

  strSQL = "SELECT Matvara FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Kategori = '" & Me.dd_kategori & "'"

  Me.dd_matvara.RecordSource = strSQL
  Me.dd_matvara.Requery
End Sub

Public Sub dd_kategori_AfterUpdate()
  Dim strSQL As String

  strSQL = "SELECT Matvara FROM Matvaror WHERE Affär = '" & Me.dd_affär & "' AND Kategori = '" & Me.dd_kategori & "'"

  Me.dd_matvara.RecordSource = strSQL
  Me.dd_matvara.Requery
End Sub

Mvh Lukas

Medlem sedan dec. 20003 887 inlägg
#4

Åh... ursäkta mig. Den heter RowSource inte RecordSource... jag tänkte på fel objekt. :)

Medlem sedan aug. 2000359 inlägg
#5

Jag ändrade RecordSource till RowSource, att välja affär (dd_affär) och kategori (dd_kategori) går nu bra, men när jag ska välja matvara (dd_matvara) så får jag en alert-box där det står "Data type mismatch in criteria expression"

Medlem sedan juni 200032 967 inlägg
#6

Vad är det för datatyper på fälten du använder i SQL-frågan?

Medlem sedan aug. 2000359 inlägg
#7

Båda fälten (Affär och Kategori) är skapade mha uppslagsguiden, från varsin tabell. Fältet för affär är text, medan fältet för kategori blev tal när jag skapade det. Det "återges" dock i tabellen Matvaror som text, t ex "såser", "bröd" etc. SQL:en för radkällan är

SELECT Kategorier.ID, Kategorier.Kategori
FROM Kategorier;

Om jag försöker ändra typ i designläget för "Kategorier" till text så får jag meddelandet "Det går inte att ändra datatyp eller fältstorlek för detta fält. Det ingår i en eller flera relationer. Om du vill ändra fältets datatyp måste du först ta bort relationerna i fönstret relationer" Jag har testat att zappa relationen och skapa uppslaget på nytt, men jag vet inte hur jag får det till att bli text.

Mvh Lukas

Medlem sedan aug. 2000359 inlägg
#8

Det fixade sig nu när jag zappade Kategorier.ID och använde Kategorier.Kategori som enda fält. Tack för hjälpen!

Men nu till nästa problem: Hur gör jag om jag vill att textrutan "a-pris" ska få det pris som motsvaras av vald matvara i dd.matvara efter uppdatering?
Priset ligger i Matvaror.Pris

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)