下面使用c++builer写得程序,请帮忙翻译成delphi
  void TForm1::TreeAdd(TADOQuery * Q1, TTreeNodes * tn)
{
    int i,j,num,t,pos=0;
    String sql,tem_dm,tem_mc,bh;
    TTreeNode *node[100000];
    tn->Clear();
    node[0]=NULL;    sql="SELECT dwbh, dwmc, REPLACE(dwbh, '-', '.') AS Exp FROM dwxx ORDER BY REPLACE(dwbh, '-', '.')";
    Q1->Close();
    Q1->SQL->Clear();
    Q1->SQL->Add(sql);
    Q1->Open();
    while(!Q1->Eof)
    {
        tem_dm =Q1->FieldByName("dwbh")->AsString.Trim();
        tem_mc =Q1->FieldByName("dwmc")->AsString.Trim();
        j = 1;
        num = tem_dm.Length();
        for(pos=0,t=1;t<=num;t++)
            if(tem_dm[t] == '-'){ pos = t; j++; }
        node[j] = tn->AddChild(node[j-1],bh+" "+tem_mc);
        Q1->Next();
    }}
非常急,在线等

解决方案 »

  1.   

    procedure TForm1.TreeAdd(Q1 : TADOQuery; tn : TTreeNodes);
    var
      i, j, num, t, pos : integer;
      sql, tem_dm, tem_mc, bh : string;
      node : array[0..100000 - 1] of TTreeNode;
    begin
      tn.Clear;
      node[0] := nil;  sql := 'SELECT dwbh, dwmc, REPLACE(dwbh, ''-'', ''.'') AS Exp FROM dwxx ORDER BY REPLACE(dwbh, ''-'', ''.'')';
      Q1.Close;
      Q1.SQL.Clear;
      Q1.SQL.Add(sql);
      Q1.Open;
      while (not Q1.Eof) do
      begin
        tem_dm := Trim(Q1.FieldByName('dwbh').AsString);
        tem_mc := Trim(Q1.FieldByName('dwmc').AsString);
        j := 1;
        num := length(tem_dm);
        pos := 0;
        for t := 1 to num do
            if(tem_dm[t] = '-') then
            begin
              pos := t;
              inc(j);
            end;
        node[j] := tn.AddChild(node[j-1], bh + ' ' + tem_mc);
        Q1.Next();
      end;
    end;
    以上是根据代码直译过来的,需要在uses中包括ADODB, ComCtrls
    没有时间仔细看,不过翻译中发现在循环内代码质量不好。比如说内层for循环实际上是找到最后一个'-',那为什么不倒循环呢?等等,你自己好好想吧
      

  2.   

    procedure TForm1.TreeAdd(Q1 : TADOQuery; tn : TTreeNodes);
    var
      i, j, num, t, pos : integer;
      sql, tem_dm, tem_mc, bh : string;
      node : array[0..100000 - 1] of TTreeNode;
    begin
      tn.Clear;
      node[0] := nil;  sql := 'SELECT dwbh, dwmc, REPLACE(dwbh, ''-'', ''.'') AS Exp FROM dwxx ORDER BY REPLACE(dwbh, ''-'', ''.'')';
      Q1.Close;
      Q1.SQL.Clear;
      Q1.SQL.Add(sql);
      Q1.Open;
      while (not Q1.Eof) do
      begin
        tem_dm := Trim(Q1.FieldByName('dwbh').AsString);
        tem_mc := Trim(Q1.FieldByName('dwmc').AsString);
        j := 1;
        num := length(tem_dm);
        pos := 0;
        for t := 1 to num do
            if(tem_dm[t] = '-') then
            begin
              pos := t;
              inc(j);
            end;
        node[j] := tn.AddChild(node[j-1], bh + ' ' + tem_mc);
        Q1.Next();
      end;
    end;