类似于SQL里的列转行,因为我是ACCESS,无法用SQL的办法处理
大家帮看看,谢了。。
请问:1。偶的原表A数据如下:IID CompNo LocNo
----- -------------- -----------
21 0805C-100NF C2,C4,C5,C6,
22 0805C-20PF C18
23 0805R-120K R1,R2,R3,R4,R5,R6,R
24 0805R-33K R20,R21,
25 IN4148 D1,D2,D3,D4,D6,D7
。2。偶想将上面的插入到另一表B里的数据如下:
CompNo LocNo
-------------- -----------
0805C-100NF C2
0805C-100NF C4
0805C-100NF C5
0805C-100NF C6
0805C-20PF C18
。
我的以下代码怎么改?或有别的好办法吗?
//处理BOM位号
with DataM.Q3 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from ImportBom');
Open;
if RecordCount>0 then
begin
for i :=0 to RecordCount-1 do
begin
CompNo:=VarToStr(FieldValues['CompNo']);
LocNo:=VarToStr(FieldValues['LocNo']);
if pos(',',CompNo)>0 then //如果位号有多个
begin
for j :=0 to Length(LocNo)-1 do
begin
ExeSql('Insert into ImportBomTemp(CompNo,LocNo)values('''+CompNo+''','''+LocNo+''') ');
end;
end;
end;
end;
end;
大家帮看看,谢了。。
请问:1。偶的原表A数据如下:IID CompNo LocNo
----- -------------- -----------
21 0805C-100NF C2,C4,C5,C6,
22 0805C-20PF C18
23 0805R-120K R1,R2,R3,R4,R5,R6,R
24 0805R-33K R20,R21,
25 IN4148 D1,D2,D3,D4,D6,D7
。2。偶想将上面的插入到另一表B里的数据如下:
CompNo LocNo
-------------- -----------
0805C-100NF C2
0805C-100NF C4
0805C-100NF C5
0805C-100NF C6
0805C-20PF C18
。
我的以下代码怎么改?或有别的好办法吗?
//处理BOM位号
with DataM.Q3 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from ImportBom');
Open;
if RecordCount>0 then
begin
for i :=0 to RecordCount-1 do
begin
CompNo:=VarToStr(FieldValues['CompNo']);
LocNo:=VarToStr(FieldValues['LocNo']);
if pos(',',CompNo)>0 then //如果位号有多个
begin
for j :=0 to Length(LocNo)-1 do
begin
ExeSql('Insert into ImportBomTemp(CompNo,LocNo)values('''+CompNo+''','''+LocNo+''') ');
end;
end;
end;
end;
end;
关键是LocNo这个字段值的处理if pos(',',LocNo)>0 then
begin
str:=TstringList.create;
str.clear;
extractstrings([','],[],pchar(LocNo),str);
i:=str.count;
for j:=0 to i-1 do
begin
//插入数据表处理 这里只写出语句部分
sql.add('Insert into ImportBomTemp(CompNo,LocNo) value(:s1,:s2)');
param.parambyname('s1').value:=CompNo;
param.parambyname('s2').value:=str[j];
end;
end;