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.
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
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
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"
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.
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