2017-06-06 106 views
0

我管理大型綜合設施,負責爲我們的客戶發放和跟蹤物理鑰匙。鑰匙印有特定的代碼(與鑰匙本身相匹配),而且我還在單獨的系統上編制了單獨的門的編號,以說明鎖經常改變門的事實。我有一個空間表(其中包括建築物,房間和門的號碼)和另一個單獨的表鍵(關鍵代碼,鑰匙檔號,主鑰匙等)。我還在空格表中包含了一個引用鍵表(通過ID字段)的字段來指示哪些鎖與哪些門相關聯。如何創建兩個字段,其中先填充哪一個會自動填充另一個字段?

最後,我有一個日誌表,我記錄了客戶端的密鑰請求。他們可以通過門號碼或密碼來請求鑰匙。我希望能夠以表單的形式輸入門號或關鍵碼(綁定到從兩個表中拉出的查詢),並使其自動填充其他字段。目前,我管理一個配置,輸入門號將自動完成關鍵字段,但我無法使其工作,反之亦然。

這可能需要某種結構上的改變,但我願意甚至鑽研直接編寫SQL代碼(如果需要的話)。我甚至在編寫INNER JOIN代碼時嘗試過我的手,但它已經在進行雙連接,我不確定這是否可以鏈接。

Halp!

+0

這需要VBA編碼 – June7

+0

或者可能不需要,也許只需要兩個組合框綁定到同一個字段,每個組合框顯示不同的文本別名,但都保存s ame ID值。 – June7

+0

這聽起來很有希望,但你能否闡述實現?我一直在努力完全掌握綁定和別名等的控制。在這方面我已經取得了一些微薄的進展,但是有這樣的事情會有助於澄清(即使它不能解決這個特定的問題)。 – RedRooster

回答

0

您可以通過在文本框字段的AfterUpdate事件中添加一些VBA來完成此操作。您可以在每種情況下使用相同的查詢。

對於參數的緣故,我會調用門號文本框「txtDoorNbr」和關鍵代碼文本框「txtKeyCode」。

首先,編寫一個查詢,查詢所有門號和密鑰代碼。我認爲你表示你已經有了這個查詢。

接下來,在txtDoorNbr的AfterUpdate事件,你會寫是這樣的:

Dim db as Database 
Dim rec as Recordset 

Set db = CurrentDB 
Set rec = db.OpenRecordset("Select KeyCode from MyQuery where DoorNumber = " & Me.txtDoorNbr & "") 

Me.txtKeyCode = Rec(0) 

rec.Close 
db.Close 

在txtKeyCode的AfterUpdate事件,寫的很類似:

Dim db as Database 
Dim rec as Recordset 

Set db = CurrentDB 
Set rec = db.OpenRecordset("Select DoorNbr from MyQuery where KeyCode = " & Me.txtKeyCode & "") 

Me.txtDoorNbr = Rec(0) 

rec.Close 
db.Close 

應該這樣做。可能需要稍微調整一下以考慮到某些條件(例如,如果在查詢中找不到相應的記錄,則會出現錯誤消息等)以及您在查詢中使用的實際字段名稱,但這基本上是方法。

+0

您能否澄清最後一條語句「Me.txtDoorNbr = Rec(0)」中發生了什麼?我可以告訴你設置Rec(0)的值,但我不熟悉「Rec」(我認爲它與「rec」不同)。另外,0是一個數組索引?這是如何定位目前的記錄?對不起,再見:Noob。 – RedRooster

+0

Typo。應該被rec(0)。基本上,它是記錄集「rec」中第一個單元格的值,它應該只返回DoorNbr或KeyCode,具體取決於運行哪一個單元。 –

0

您有一個輸入日誌記錄的窗體?這只是數據錄入新記錄,對嗎?輸入什麼數據 - 日期,鍵ID,用戶ID?所以窗體綁定到日誌表和控制與ControlSource設置爲每個字段,所以輸入是直接保存到表中記錄?

我的建議是有2個組合框。其中一個設置爲顯示門號,一個設置爲顯示密鑰代碼,但都將ControlSource設置爲密鑰字段並保存keyID。這是一個非常規的設計。用戶必須知道,如果他們用一個組合框進行選擇,他們可以忽略另一個組合框。您可以在兩個組合框上方放置一個標籤「選擇門號或密鑰代碼。「

門組合框行來源,如:SELECT keyID, DoorNum FROM ...;"
密鑰組合框行來源,如:SELECT keyID, KeyCode FROM ...;

對於這兩種組合框設置屬性:
控件:密鑰字段在日誌表
列數:2
列寬:0」 ; 1「

相關問題