MS Access:使用单一表单在MS访问中输入查询参数

时间:2012-06-25 21:04:19

标签: mysql forms ms-access

赞美当天。 根据之前收到的反馈,

在MS Access中创建故障单销售数据库之后。我想使用单个表单查询特定月份的特定票证的价格,并将价格显示在表单中的文本字段或标签中。

以下是示例表和使用过的查询

CompanyTable

CompID    CompName
   A        Ann
   B        Bahn
   C        Can
   KK       Seven
   -        --

TicketTable

 TicketCode    TicketDes

 10            Two people
 11            Monthly
 12            Weekend
 14            Daily

TicketPriceTable

 ID    TicketCode    Price    ValidFrom

  1    10            $35.50    8/1/2010
  2    10            $38.50    8/1/2011
  3    11            $20.50    8/1/2010
  4    11            $25.00    11/1/2011
  5    12            $50.50    12/1/2010
  6    12            $60.50    1/1/2011
  7    14            $15.50    2/1/2010
  8    14            $19.00    3/1/2011
  9    10            $40.50    4/1/2012

二手查询:

SELECT TicketPriceTable.Price
 FROM TicketPriceTable
 WHERE (((TicketPriceTable.ValidFrom)=[DATE01]) AND ((TicketPriceTable.TicketCode)=[TCODE01]));
  • 在MS Access中,弹出迷你框以在运行查询时输入参数。如何使用单个表格输入[DATE01]和[TCODE01]的参数。以及在文本字段中以相同形式显示的价格(用于进一步计算)。

例如'Month'字段等于输入[DATE01]参数 'Ticket Code'等于[TCODE01]参数的输入 Textfield等于查询结果的输出(票价)

  • 如果可能的话,我想只使用MM / YYYY格式的月份和年份。这一天不是必需的。如何在MS Access中实现它?

如有任何疑问,请不要犹豫 非常感谢您的时间和预期的反馈。

3 个答案:

答案 0 :(得分:1)

您可以使用以下表达式来引用表单字段中的值:[Forms]![NameOfTheForm]![NameOfTheField]

答案 1 :(得分:0)

在Access窗体中,您可以将RecordSource设置为查询,而不仅仅是表格。这可以是存储查询的名称,也可以是SQL语句。这允许您通过此查询将控件绑定到不同的表。

您还可以在主窗体上放置与主窗体之外的其他表绑定的子窗体。

您还可以通过以等号开头将TextBox设置为表达式,在ControlSource中显示表达式的结果

=DLookUp("Price", "TicketPriceTable", "TicketCode=" & Me!cboTicketCode.Value)

您可以将TextBox的格式设置为MM\/yyyy或使用格式函数

s = Format$(Now, "MM\/yyyy")

答案 2 :(得分:0)

输入最多300种不同类型的门票

回答您关于Accessing data from a ticket database, based on months in MS Access)的评论

您可以使用笛卡尔积来创建大量记录。如果在查询中选择两个表但不加入它们,则结果是笛卡尔积,这意味着一个表中的每个记录与另一个表中的每个记录合并。

让我们添加一个名为MonthTable

的新表
MonthNr    MonthName
    1      January
    2      February
    3      March
  ...      ...

现在,如果将包含12条记录的此表与包含4条记录的TicketTable组合在一起,您将获得包含48条记录的结果

SELECT M.MonthNr, M.MonthName, T.TicketCode, T.TicketDes
FROM MonthTable M, TicketTable T
ORDER BY M.MonthNr, T.TicketCode

你得到这样的东西

MonthNr    MonthName   TicketCode  TicketDes
    1      January         10      Two people
    1      January         11      Monthly
    1      January         12      Weekend
    1      January         14      Daily
    2      February        10      Two people
    2      February        11      Monthly
    2      February        12      Weekend
    2      February        14      Daily
    3      March           10      Two people
    3      March           11      Monthly
    3      March           12      Weekend
    3      March           14      Daily
  ...      ...            ...      ...

您还可以获得实际对此类票据类型有效的价格

SELECT TicketCode, Price, ActualPeriod AS ValidFrom
FROM (SELECT TicketCode, MAX(ValidFrom) AS ActualPeriod
      FROM TicketPriceTable
      WHERE ValidFrom <= Date
      GROUP BY TicketCode) X
    INNER JOIN TicketPriceTable T
        ON X.TicketCode = T.TicketCode AND X.ActualPeriod=T.ValidFrom

如果您输入了未来价格,则WHERE ValidFrom <= Date

此处子查询选择实际有效的时间段,即适用于每个ValidFrom的{​​{1}}。如果您发现子选择有点令人困惑,您还可以将它们存储为Access中的查询或MySQL中的视图,并基于它们进行后续查询。这样做的好处是您可以在查询设计器中创建它们。

考虑不要在物理上创建所有300条记录,而只是从笛卡尔积中动态创建它们。

我让你现在把所有的部分放在一起。