MS Access Kaskádové Combo box proti jednomu stolu, pak uložit výsledný ID

0

Otázka

Pomocí MS Access, mám tabulku s názvem "Místa" a tabulku s názvem "Trasy". Chci vytvořit formulář, který bude v podstatě současné trasy tabulky pro uživatele (já.e vyberte "z" a vyberte "k") a budou filtrovat "na" umístění na základě toho, co uživatel zvolil pro "z" místo, tj. kaskádové combo box. Odpovídající "Trasy.ID" budou uloženy do výsledné tabulky na vyplnění formuláře.

Umístění má následující sloupce -

ID Jméno Poznámky
1 Londýn Velká Británie
2 Manchester Velká Británie
3 Alabama Spojené státy

Trasy má následující sloupce -

ID From_LID To_LID KM Poznámky
1 1 2 450 Pomocí M1 trasu
2 2 1 450 Pomocí M1 trasu
3 1 2 485 Použití uvnitř trasy
4 2 1 485 Použití uvnitř trasy
5 1 3 5450 Příliš daleko, aby zvážila
6 3 1 5450 Příliš daleko, aby zvážila

Chci vytvořit formulář s css combo box - "ComboFrom", "ComboTo". Kde "ComboFrom", bude vyhledávat v tabulce pro seznam různých IDs, a pomocí spojení s místy, tabulka, mohu zobrazit místo jména. "ComboTo" je závislé na ID hodnotu v "ComboFrom" a bude proto vrátit pouze seznam míst, kde to odpovídá From_LocationID tras stolu.

Já mám první část více či méně hotovo. ComboFrom má na níže uvedený dotaz:

SELECT DISTINCT Location.Location_ID, Location.[Location Name], Location.Description
FROM Location INNER JOIN Route ON Location.Location_ID = Route.From_LID
ORDER BY Location.[Location Name];

ComboTo má na níže uvedený dotaz:

SELECT Location.Location_ID, Location.[Location Name], Location.Description, Route.From_LID
FROM Location INNER JOIN Route ON Location.Location_ID = Route.To_LID
WHERE (((Route.From_LID)=[Forms]![fmrRoute1]![From_LID]))
ORDER BY Location.[Location Name];

Ten kus kódu v "Kde" klauzule v ComboTo pole v podstatě dostane na vstup ID z ComboFrom a výstupy správné Id z odpovídajících To_LID seznamu. Pak jsem přidat vba proti aktualizace akcí pro ComboFrom na znovuspustitdotaz ComboTo pole.

Co mám potíže s přemýšlením, je způsob, jak získat příslušné trasy-ID se zobrazí správně. jsem.e když jsem si vybrat "1" pro ComboFrom, a "3" pro ComboTo, Trasa ID by mělo ukázat, "5" a "7" (kde "7" je nový rekord v Trasách tabulka). Mám zvláštní dotaz, který chcete vyhledat ComboFrom a ComboTo a vrátit výsledné Trasy ID? Pokud ano, jak to mám udělat, a připojit ji do pole ve formuláři, který se automaticky aktualizuje pokaždé, když ComboFrom a ComboTo pole změnit?

Existuje lepší způsob, jak dělat to, co jsem se snaží udělat?

Díky předem za jakoukoli pomoc!

ms-access sql
2021-11-22 19:52:15
1

Nejlepší odpověď

0

Vypadá to jako kaskádové combo boxy do filtrování formuláře z těchto dvou nevázaného pole se seznamem. Můžete google tyto dvě myšlenky.

Self join udělal to složité. Klíčové bylo ignorování vztah mezi Polohou.ID a From_LID. Tento vztah je v databázi, ale ignoroval (vypouští se) v dotazu.
enter image description here

to nám dává sql budeme potřebovat pro druhé pole se seznamem zdroj záznamů.

SELECT Routes.From_LID, Routes.To_LID, First(Locations.LocationName) AS FirstOfLocationName
FROM Locations INNER JOIN Routes ON Locations.ID = Routes.To_LID
GROUP BY Routes.From_LID, Routes.To_LID
HAVING (((Routes.From_LID)=2))
ORDER BY First(Locations.LocationName)  
'just need to replace the 2
Private Sub cmbFrom_AfterUpdate()
'cascade combobox
Dim strRowSource As String
strRowSource = "SELECT Routes.From_LID, Routes.To_LID, First(Locations.LocationName) AS FirstOfLocationName" & _
" FROM Locations INNER JOIN Routes ON Locations.ID = Routes.To_LID " & _
"GROUP BY Routes.From_LID, Routes.To_LID " & _
"HAVING (((Routes.From_LID) = " & Me.cmbFrom & "))" & _
"ORDER BY First(Locations.LocationName)"
Debug.Print strRowSource
Me.cmbTo.RowSource = strRowSource
Me.cmbTo.Visible = True 
'a look and feel choice
End Sub



[![enter image description here][2]][2]

Private Sub cmbTo_AfterUpdate()
'filter form 'most of the time you want to create a search form where you filter to the records you want
Me.Filter = "From_LID = " & Me.cmbFrom & " AND To_LID = " & Me.cmbTo
Me.FilterOn = True
Me.Detail.Visible = True
End Sub

enter image description here

enter image description here

2021-11-23 13:00:23

Je možné, aby výstup jen route_ids, které odpovídají z a na místo?
Hob

ano, v tomto příkladu From_LID, To_LID, KM, a Konstatuje, textová pole jsou v sekci a vázán na tyto proměnné v záznamu zdroj. Dostat jen route_ids, odstranit tyto textová pole a nahradit textové pole vázáno na route_id.
mazoula

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................