2016-03-21 42 views
1

如果有人解決我的問題,我將非常感激。 我是Ms Access的新成員,我仍然獲得了其基本功能的經驗。在ms-access中使用長文本的最佳做法

我有一個表MyItems。 2個字段是:ItemCode和ItemName。 ItemName是一個非常長的文本(備註類型)。我也有一個查詢和一個有很多領域的表單。表單的記錄來源也由許多字段組成。所有這些事情(與1個領域相關)都有相同或相似的名稱,所以我不能很好地區分它們。

我想要的是當我設置ItemCode的值(在一個沒有綁定的Combobox或名稱爲ItemCode的列表框中)時,ItemName的值將顯示在一個控件中 - 也許是TextBox。

我可以在列表框中顯示它的值(通過它的行源中的sql查詢),我沒有這個問題,我沒有管理事件的問題,但文本很長並且被剪切。我明白,不幸的是ListBoxes沒有多行屬性。所以也許最適合的控制是TextBox。也許最合適的顯示值的方法是在TextBox的控件源中使用DLookUp函數。但是,在這個名字相似或相同的海洋中,我無法處理它的語法,我反覆嘗試了很長時間。所以,我有2個問題:

  1. 是TextBox控件,並查閱函數在其控制源提取表長文沒有約束力或有更適當的控制(直接與SQL查詢工作)的最好方法?

  2. DLookUp的正確語法是什麼? - 究竟在哪裏「,」「,[],.Value,=,&,我必須在哪裏寫入表格或表格的路徑,以及它會出錯?如果我只寫[ItemCode]它將與什麼關聯 - 表單記錄源,表格,表單控件還是其他?如果有人爲我的案例寫出正確的語法,或者他與大量使用DLookUp的示例共享鏈接,我將不勝感激。那些我發現並不滿足我的。

回答

0
  1. 任一個結合的控制,或將未綁定一個。如果未綁定,則需要使用VBA代碼或在控制源中加載DLookup。沒有其他選擇。
    個人而言,我寧願使用AfterUpdate事件ItemCode,並在那裏致電DLookup,但這是一個偏好問題。

  2. 2.

這並不複雜。基本上,在3個參數中有SELECT,FROM,WHERE部分的SQL查詢。包含空格或其他特殊字符的所有標識符以及引用表單控件時都需要[]

=DLookup("ItemName", "[my Table]", "ItemCode = '" & [ItemCode] & "'") 

單引號''需要,如果ItemCode是文本,而不是當它是一個數字。

你也可以使用加倍(轉義)雙引號,但這是可讀性低得多。

=DLookup("ItemName", "[my Table]", "ItemCode = """ & [ItemCode] & """") 

[ItemCode]從哪裏來?

  • 訪問首先查找名爲ItemCode窗體上控制
  • 如果沒有,它會在窗體的RecordSource中查找字段ItemCode

這些是可以評估[ItemCode]的唯一方法。爲避免混淆,建議使用與源字段相同的名稱命名綁定控件。

上述語法只有在所有內容都在同一個表單上時纔有效。如果[ItemCode]是一個不同的形式,或者從一個查詢參考一下吧,你用

=DLookup("ItemName", "[my Table]", "ItemCode = '" & Forms![my Form]![ItemCode] & "'") 

對於更復雜的情況下與子窗體,看到Refer to Form and Subform properties and controls

而在VBA使用它(在ItemCode_AfterUpdate):

Me!ItemName = DLookup("ItemName", "[my Table]", "ItemCode = '" & Me![ItemCode] & "'") 
+0

非常感謝!現在事情變得更加清晰易懂。代碼工作。我還沒有嘗試過「'」。但是我應該糾正一件事,可能是因爲ms-access版本,我的默認值或是否使用vba/design模式 - 函數中的分隔符是「;」 - 不是「,」 – Peter

+0

@彼得:是的,例如在德語Access中,參數分隔符是;而不是在「表單」或「查詢」中使用函數時。不過,不在VBA中。 – Andre