各位帮忙用delphi或sqlserver做一个递归展程序!如产品bom树展开!谢谢!

解决方案 »

  1.   

    各位帮忙用delphi或sqlserver做一个递归展展开程序!如产品bom树展开!谢谢!
      

  2.   

    假定BOM表:BOM_Table
    基于MS SQL SERVER 的表结构如下:
    IF EXISTS(SELECT 1 FROM sysobjects WHERE name = 'BOM_Table' AND Type = 'U') DROP TABLE BOM_Table
    GO
    CREATE TABLE BOM_Table(
    PNo VARCHAR(20) NOT NULL CHECK(PNo <> ''),  /*主件编号*/
    CNo VARCHAR(20) NOT NULL CHECK(CNo <> ''),  /*元件编号*/
         CONSTRAINT PK_BOM PRIMARY KEY COLUSTERED(PNo,CNo),
    QtyPer DECIMAL(18,6) NOT NULL CHECK(QtyPer >=0) DEFAULT 0,  /*用量*/......)
    GO
    GRANT ALL ON BOM_TABLE TO PUBLIC
    GO
      

  3.   

    使用TADOQuery进行展开:
    function ExpandBom(ADOConnection:TADOConnection;PNo:String);
    const
      SQL_STR :String='SELECT CNo AS No,QtyPer FROM BOM_Table WHERE PNo = ''%s''';begin
      with TADOQuery.Create(nil) do
      try
        Connection := ADOConnection;
        CacheSize := 1000;
        LockType := ltReadOnly;
        SQL.Text := Format(SQL_STR,[PNo]);
        Open();
        First();
        While not eof do 
        begin
          {      ...... on do ......      }
          ExpandBom(ADOConnection,FieldByName('No').AsString);
          Next();
        end;
      finally
        if Active then Close();
        Free;
      end;
    end;