类似于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.   

    不用一条条的,可以批量插入insert into tablaA(A,B) select C,D from tableB
      

  2.   

    笨办法,逐条分析
    关键是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;