【发布时间】:2011-12-01 22:01:25
【问题描述】:
我有一个由几个子部分组成的单元。每个子部分都有一个表格,如下所示:
Part#ID PartBarcode BuildDate comments
------ ----------- --------- --------
## someBC datetime string
## someBC datetime string
## someBC datetime string
....
上面的表我有 3 个
然后我有一个如下所示的子表:
PartID PartSubBarcode1 PartSubBarcode1 PartSubBarcode1 BuildDate comments
(project code) (intraproject S/N) (Antenna presence)
------ --------------- --------------- --------------- --------- --------
## ABC 123 Z Datetime string
## ABC 124 X Datetime string
## ABC 125 Z Datetime string
编辑:每个条码子部分都代表物理/项目属性。
那时他们都组装好了,我有一张桌子,里面有子部分作为一个单元
AssembledUnitID Part1ID Part2ID Part3ID Part4ID ActiveState
--------------- ------- ------- ------- ------- -----------
## ## ## ## ## true
## ## ## ## ## false
## ## ## ## ## true
...
我想创建一个表格,其中包含 活动 组装单元中所有子部分的条形码。额外的问题是,因为我有 1 个子部分,其中的条形码实际上分成了多列,所以我需要某种方法将组件连接成一个字符串供用户查看(或者不是真的......没什么大不了的)。
Part1BC Part1BuildDate Part2BC Part2BuildDate ...
------- -------------- ------- --------------
这里的最终游戏是在 C#.NET 中的 WinForm 上填充一个 datagridview 对象,以便用户导航和查看库存状态。 如果用一条 SQL 语句填充这张表就好了。 代码的简洁性实际上并不重要,只要最终结果相同即可。
我的 SQL 新手技能结合阅读论坛帖子和帮助文档真的让我头晕目眩。我一直在尝试不同的 SELECT 语句,但它们似乎都没有真正让我有所收获。
附加信息: 我正在用 C#.NET 中的数据网格视图制作一个 winform 我正在连接到 Access 2007 .mdb 数据库。我将查询存储在 .xsd 文件中的 C# 解决方案中。 需要更多信息吗?
编辑: 做到了!这就是我为解决这个问题所做的! 在 C# .xsd 设计器中,我创建了一个新的 DataTable。通过数据表的表适配器,我创建了一个带有如下文本的查询:
SELECT
UnitBarcodes.GroupID + UnitBarcodes.Version
+ UnitBarcodes.SubSerial + UnitBarcodes.AntennaStatus AS [Unit Barcode],
Subpart1.Barcode AS [part1 Board Barcode],
Subpart2.Barcode AS [part2 Board Barcode],
Subpart3.Barcode AS [part3 Board Barcode],
AssembledUnits.DateAssembled AS [Date Assembled],
Subpart1.OnBoardBuildDate AS [Firmware Build Date] FROM ((((MainBoards INNER JOIN
AssembledUnits ON Subpart1.ID = AssembledUnits.Subpart1ID)
INNER JOIN
UnitBarcodes ON AssembledUnits.UnitBarcodesID = UnitBarcodes.ID)
INNER JOIN
Subpart2 ON AssembledUnits.Subpart2ID = Subpart2.ID)
INNER JOIN
Subpart3 ON AssembledUnits.Subpart3ID = Subpart3.ID)
WHERE (AssembledUnits.ActiveState = ?) AND (AssembledUnits.DateAssembled > ?)
一旦我填写了我设置的数据表
bindingSource1.DataSource=
dataGridView2.AutoResizeColumns();
(在调用查询之前,我还设置了 'dataGridView2.AutoGenerateColumns = true;' 并且当然在我的表单上创建了 dataGridView2 对象)
瞧!有用!多么棒的学习体验(而且比我最初想象的要简单得多)
【问题讨论】:
-
你绝对应该阅读规范化。像你说的那样有许多表用于相同的数据(部分):
I have 3 of the above tables是一个禁忌。有许多列用于相同的数据(PartSubBarcode_XX 和 Part_XX_ID)是另一个禁忌。尝试将规范化问题标准化或发布为 SO 的新问题。归一化简介:en.wikipedia.org/wiki/Database_normalization -
每个零件都是独立生产的,并且有不同的制造日期,并且将来(由于零件故障)可能会组装成不同的整体单元。在示例中,每个子部分表具有相同的列,但实际上它们仅共享一些列/特征。有些有更多/更少/不同。
-
至于将一个子部分中的条形码拆分开来,这似乎是应该做的事情,因为条形码本身有 4 个组件代表不同的事物。在这四个组件中,有 3 个描述了该部分的物理特性和第四个是项目的唯一编号(但可能不是普遍唯一的)。我想通过像这样将它们分开来减少冗余。但你不这么认为?
-
不管怎样,我会阅读链接的文章,看看我能做什么。
-
如果
(PartSubBarcode1, PartSubBarcode2, PartSubBarcode3)的意思是(ColourCode, StrengthCode, DiameterCode),那么就可以了(实际上是一个标准化步骤)。但在您详细描述之前,我们无法知道这一点。
标签: c# sql ms-access ms-access-2007