在BOM中,我们可以根据成品查找下层->最低层物料,组成产品的树形结构。
现在我在反过来使用,就是根据低层物料,查找有多少种成品中使用到它。比如:
成品1:=物料A+物料B+物料C 组成;
成品2:=物料A+物料D+物料E 组成。现根据物料A进行查找,就可以得出成品1,成品2。(即成品1,成品2中使用了物料A)给出代码,马上结贴,100分奉上,多谢了!不够在开新贴给分,因为CSDN系统限制我一次最多只能给出100分(级别太低,不好意思!)
现在我在反过来使用,就是根据低层物料,查找有多少种成品中使用到它。比如:
成品1:=物料A+物料B+物料C 组成;
成品2:=物料A+物料D+物料E 组成。现根据物料A进行查找,就可以得出成品1,成品2。(即成品1,成品2中使用了物料A)给出代码,马上结贴,100分奉上,多谢了!不够在开新贴给分,因为CSDN系统限制我一次最多只能给出100分(级别太低,不好意思!)
解决方案 »
- 郁闷贴.... 散分五
- cxDateEdit能不能设置显示格式为年与月,不需要日期。
- 新人询问 由于时间比较紧 烦请在线高手帮助解答
- dbgrid中如何实现特定显示?
- 用FastReport第二次预览就报错,说是 access violation. 求救
- 请问在delphi中怎样打印立方厘米?要求不能是中文,必须是字母‘cm’加3上标的形式。
- fastreport的简单打印问题!在线等!
- 如何得到操作系统当前登录的域(或者没有登录到域)?
- adotable的索引问题?
- 急救,在线>>>>>>>>>>>>>>>>>>>>>>>>
- 不懂提示是什么意思,大哥帮看看哦!
- 求购《Delphi 6组件大全》
2、在数据库中直接查找你要的数据再加分析
http://community.csdn.net/Expert/topic/4309/4309888.xml?temp=.3988916在线等结果,满意马上结贴,多谢了!
select p,c from pctable
P C
---- ----
A A1
A A2
A B3
B B1
B B2
B B3
B3 D1
B3 D2
D1 E1
D1 E2CREATE VIEW dbo.PCTREE
AS
SELECT dbo.pctable.p, dbo.pctable.c AS C1, pctable_1.c AS C2, pctable_2.c AS C3
FROM dbo.pctable pctable_2 RIGHT OUTER JOIN
dbo.pctable pctable_1 ON pctable_2.p = pctable_1.c RIGHT OUTER JOIN
dbo.pctable ON pctable_1.p = dbo.pctable.cSELECT * FROM PCTREE
p C1 C2 C3
---- ---- ---- ----
A A1 NULL NULL
A A2 NULL NULL
A B3 D1 E1
A B3 D1 E2
A B3 D2 NULL
B B1 NULL NULL
B B2 NULL NULL
B B3 D1 E1
B B3 D1 E2
B B3 D2 NULL
B3 D1 E1 NULL
B3 D1 E2 NULL
B3 D2 NULL NULL
D1 E1 NULL NULL
D1 E2 NULL NULLCREATE VIEW dbo.pcview
as
SELECT p as '产品',isnull(c3,isnull(c2,c1)) AS '物料' FROM PCTREE
where p not in (select c from pctable)select * from pcview
产品 物料
---- ----
A A1
A A2
A E1
A E2
A D2
B B1
B B2
B E1
B E2
B D2求用到物料B2的产品:
select 产品 from pcview where 物料 like 'B2'
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type TMultiArr = array of array of string;
type TArr = array of string;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetLeaf(arr: array of string; rsArr:TMultiArr; var rs: TArr):boolean;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.GetLeaf(arr: array of string; rsArr:TMultiArr; var rs: TArr): boolean;
var
i,j,k:integer;
tmpArr:array of string;
bFlag:boolean;
begin
Result := True; k := High(arr)-Low(arr)+1;
if k=0 then Exit; for j:= Low(arr) to High(arr) do
begin
bFlag := False;
for i:= Low(rsArr) to High(rsArr) do
begin
if AnsiSameStr(Trim(arr[j]),Trim(rsArr[i,1])) then
begin
bFlag := True;
SetLength(tmpArr,High(tmpArr)-Low(tmpArr)+2);
tmpArr[High(tmpArr)-Low(tmpArr)]:=rsArr[i,0];
end;
end;
if not bFlag then
begin
SetLength(rs,High(rs)-Low(rs)+2);
rs[High(rs)-Low(rs)]:=arr[j];
end;
end;
GetLeaf(tmpArr,rsArr,rs);
Result := True;
end;procedure TForm1.Button1Click(Sender: TObject);
var
rs:TArr;
rsArr:TMultiArr;
i:integer;
begin
SetLength(rsArr,11);
for i:=low(rsArr) to High(rsArr) do
SetLength(rsArr[i],2);
rsArr[0,0] := 'A';
rsArr[0,1] := 'A1';
rsArr[1,0] := 'A';
rsArr[1,1] := 'A2';
rsArr[2,0] := 'A';
rsArr[2,1] := 'B3';
rsArr[3,0] := 'B';
rsArr[3,1] := 'B1';
rsArr[4,0] := 'B';
rsArr[4,1] := 'B2';
rsArr[5,0] := 'B';
rsArr[5,1] := 'B3';
rsArr[6,0] := 'B3';
rsArr[6,1] := 'D1';
rsArr[7,0] := 'B3';
rsArr[7,1] := 'D2';
rsArr[8,0] := 'B3';
rsArr[8,1] := 'D3';
rsArr[9,0] := 'D3';
rsArr[9,1] := 'E1';
rsArr[10,0] := 'D3';
rsArr[10,1] := 'E2';
GetLeaf(['E1'],rsArr,rs);
Memo1.Lines.Clear;
for i := Low(rs) to High(rs) do
Memo1.Lines.Add(rs[i]);
end;end.