我有一个Access窗体,它在一个表中列出所有记录。该表中的一列引用了'device‘表,然后该表具有对'brand’列的外键引用。在表单中,由于在每一行的组合框中显示了一些魔术,所以会显示品牌名称+设备名称。
问题:如何按品牌名称对此表单进行排序,同时仍然保留创建新记录的功能?这是我当前的查询:
SELECT ehs.*
FROM ehs, brand, device
WHERE brand.ID=device.brand_id AND ehs.device_id=device.ID
ORDER BY brand.brand_name, device.model;显然(也是可以理解的),当查询中有连接时,您不能添加记录。对列表进行排序的更好方法是什么?
发布于 2013-06-25 17:58:58
您可以通过创建一个窗体,该窗体在查询中具有允许添加和更新的外键。我只是在Access 2010中做了这件事来确认。
可能是你提到的组合框的一些魔力破坏了这样做的能力。
注意:我刚刚注意到我在你使用DeviceName的地方使用了model --你需要调整下面的SQL。
不过,也有一些技巧:
然后我创建了一个查询-我刚刚使用了查询设计器,所以Access的有趣的括号排列完全是它自己做的:
SELECT ehs.*
FROM (Brand INNER JOIN Device ON Brand.brandID = Device.BrandID) INNER JOIN ehs ON Device.DeviceID = ehs.DeviceID
ORDER BY Brand.Brandname, Device.DeviceName;如果您在数据表视图中查看它,您应该能够添加一条记录。这一点很重要,如果你不能,那就有问题,如果你能,那么我们就在路上。
如果这样可以工作,那么我建议基于这个查询创建一个新的表单,并验证新表单是否允许添加记录。这个新表单基本上将有一个device_id的id号。因此,您必须键入一个数字才能使其工作。
你想要表演的把戏是,我猜是给你带来问题的东西:
有一个“品牌”下拉列表,您可以选择一个品牌,这将限制设备下拉列表的选项。
这真的很棘手(我担心我在访问方面有点生疏,这不在问题的范围内,真的)。
你可以做什么,很容易,相反,是有一个设备下拉列表,其中包括品牌名称,并对其进行适当的排序。
我在窗体中添加了一个组合框。向导将引导您使用表或查询,我只选择了设备表(我们稍后将对其进行调整)和字段-您需要device_id模型和brand_id,以及要显示的内容(模型和brand_id -我们将对其进行调整),并且它会隐藏主键。当它显示“您想要将其保存以备以后使用还是存储在此字段中时,请选择将其存储在此字段中,然后选择device_id (在ehs表中)。
向导完成后,单击新的组合框,并获取其属性。切换到数据选项卡,有一个构建器...按钮旁边的RowSource。单击该按钮,您将获得一个查询构建器。添加Brand表,显示brand_name字段并隐藏brand-id字段。(我们只是选择了它,所以组合框有两列)。按您喜欢的方式排序。
当你关闭它时,它会问你是否要保存它,所以说是。您的SQL将类似于(由于我的错误而相应地更改了字段名):
SELECT Device.DeviceID, Brand.Brandname, Device.DeviceName
FROM Brand INNER JOIN Device ON Brand.brandID = Device.BrandID
ORDER BY Device.DeviceName;您的窗体现在应该有一个组合框,该组合框在未选中时显示设备名称,在选择下拉菜单时显示设备名称和品牌名称。
然后,您可以从表单中删除原始device_id文本框。
您还可以将品牌名称添加到源查询中,并将其作为文本字段添加到表单中,这样您就可以看到设备旁边的品牌,即使它不在下拉列表中。
表单的主要查询可以是:
SELECT ehs.*, Brand.Brandname
FROM (Brand INNER JOIN Device ON Brand.brandID = Device.BrandID) INNER JOIN ehs ON Device.DeviceID = ehs.DeviceID
ORDER BY Brand.Brandname, Device.DeviceName;您可以将BrandName作为文本框添加-您不需要设备名(型号),因为它显示在组合框中。
而且您应该仍然能够添加记录。
所以,这并不理想,但比编写一堆VBA要简单得多,我认为如果你想分离你的组合框(不确定),这是你需要去做的,特别是因为这不是最初的问题。
我建议您执行每一步,并验证它在每个阶段是否仍然有效。
祝好运。
https://stackoverflow.com/questions/17292765
复制相似问题