1

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

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

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

公司表

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

票务表

 TicketCode    TicketDes

 10            Two people
 11            Monthly
 12            Weekend
 14            Daily

票价表

 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 中实现它?

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

4

3 回答 3

1

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

于 2012-06-25T21:17:28.657 回答
0

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

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

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

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

您可以将文本框的格式设置为MM\/yyyy或使用格式功能

s = Format$(Now, "MM\/yyyy")
于 2012-06-25T21:22:51.680 回答
0

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

根据 MS Access 中的月份,回答您关于从票证数据库访问数据的评论)

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

让我们添加一个名为的新表MonthTable

MonthNr    MonthName
    1      January
    2      February
    3      March
  ...      ...

现在,如果您将此包含 12 条记录的表与TicketTable包含 4 条记录的表结合起来,您将得到包含 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适用于每个TicketCode. 如果您发现子选择有点混乱,您还可以将它们存储为 Access 中的查询或 MySQL 中的视图,并基于它们进行后续查询。这样做的好处是您可以在查询设计器中创建它们。

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

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

于 2012-06-28T14:50:47.477 回答