只是一些背景信息。 我的表(HireHistory)中有50列(水平)。 我有一个窗体(HireHistoryForm),其中有2个文本框(HistoryMovieID和HistoryCustomerID)和一个按钮(该按钮运行查询“ HireHistoryQuery”)

这是我的数据的摘录(CustomerID位于顶部): 数据

所以我需要的是,如果在HistoryCustomerID框中输入数字,那么它将显示该列。 例如,如果输入的值为“ 1”,那么在我的查询中它将显示列1中的所有记录。

如果在HistoryMovieID框中输入一个数字(例如0001),则它将显示特定客户ID的该MovieID的所有实例。 即在第1列中是ID,因此对于ID = 1,它将显示“ 0001 on 19/05/2006”,然后将继续查找下一个“ 0001”实例,依此类推。

对于HistoryCustomerID,我尝试将其放入查询的“字段”中:

=[Forms]![HireHistoryForm]![HistoryCustomerID]

但这没有用。 我的查询仅返回了一个标记为“ 10”的列,而这些行仅由“ 10”组成。

如果您能提供帮助,我将不胜感激。 :)

===============>>#1 票数:1 已采纳

无意冒犯(或尽可能少犯错),但这是构建数据的可怕方式。 确实需要像这样重组它:

CustomerID  MovieID HireDate
----------  ------- --------
1           0001    19/05/2006
1           0003    20/10/2003  
1           0007    13/08/2003
...     
2           0035    16/08/2012
2           0057    06/10/2012
...

如果保留当前数据结构,则

  1. 你会生气的

  2. 几乎没有其他人会接近这个问题的任何地方。

编辑

修改后的数据结构是一个很小的改进,但是仍然不利于您。 考虑到这里的另一个问题您实质上是在查询时要求一种“即时”“修复”数据结构的方法。

好消息是,您可以运行一次VBA代码一次,以将数据结构转换为可行的文件。 首先创建新表,我将其称为“ HireHistoryV2”

ID         - AutoNumber, Primary Key
CustomerID - Number(Long Integer), Indexed (duplicates OK)
MovieID    - Text(4), Indexed (duplicates OK)
HireDate   - Date/Time, Indexed (duplicates OK)

将数据复制到新表的VBA代码如下所示:

Function RestructureHistory()
Dim cdb As DAO.Database, rstIn As DAO.Recordset, rstOut As DAO.Recordset
Dim fld As DAO.Field, a() As String

Set cdb = CurrentDb
Set rstIn = cdb.OpenRecordset("HireHistory", dbOpenTable)
Set rstOut = cdb.OpenRecordset("HireHistoryV2", dbOpenTable)

Do While Not rstIn.EOF
    For Each fld In rstIn.Fields
        If fld.Name Like "Hire*" Then
            If Not IsNull(fld.Value) Then
                a = Split(fld.Value, " on ", -1, vbBinaryCompare)
                rstOut.AddNew
                rstOut!CustomerID = rstIn!CustomerID
                rstOut!MovieID = a(0)
                rstOut!HireDate = CDate(a(1))
                rstOut.Update
            End If
        End If
    Next
    Set fld = Nothing
    rstIn.MoveNext
Loop
rstOut.Close
Set rstOut = Nothing
rstIn.Close
Set rstIn = Nothing
Set cdb = Nothing
MsgBox "Done!"
End Function

注意:您似乎使用的是dd / mm / yyyy日期格式,因此请仔细检查日期转换,以确保其正确转换。

  ask by Night Spy2 translate from so

未解决问题?本站智能推荐: