SQL.Text的赋值写在循环外,改用参数的方式

解决方案 »

  1.   

    建议你窗口创建的时候,只生成第一层结点,
    其他结点在Expanding中创建。
      

  2.   

    SQL.Text的赋值写在循环外,改用参数的方式
      

  3.   

    建议你窗口创建的时候,只生成第一层结点,
    其他结点在Expanding中创建。
      

  4.   

    建议你窗口创建的时候,只生成第一层结点,
    其他结点在Expanding中创建。
      

  5.   

    还真想不出什么好方法,
    不过你最好在Formcreate的时间里,加进度条之类的东西,让界面更友好一些。
      

  6.   

    genphone_ru(票票) 的确方法不错,
      

  7.   

    最好能将建树用到的所有数据一次用SQL语句取出来并按照先根遍历的顺序
    排序,这样建树时就可以按照先根遍历的顺序来建,效率还不错。我做过
    相似的优化。.cn,可以写邮件给我,
      

  8.   

    SQL.Text的赋值写在循环外,改用参数的方式
      

  9.   

    var diary_year:integer;
        diary_month:integer;
        diary_month_id:integer;
        diary_day:integer;
    begin
    //开始加载树型菜单
      //第一层菜单
      try
        YearQuery.Close;
        YearQuery.SQL.Clear;
        YearQuery.SQL.Text:='select * from diary_year ordery by diary_year';
        YearQuery.Open;
        MonthQuery.Close;
        MonthQuery.SQL.Clear ;
        MonthQuery.SQL.Text := 'select * from diary_month order by year_id,diary_month';
        MonthQuery.Open;
        DayQuery.Close;
        DayQuery.SQL.Clear ;
        DayQuery.SQL.Text := 'select * from diary_day order by month_id,diary_day';
        DayQuery.Open;
      except
         ShowMessage('查询出错');
         exit;
      end;
      while not YearQuery.Eof do
        begin
         diary_year:=yearQuery.Fieldbyname('diary_year').Value;
         OneNode := Treeview1.Items.Add(nil,inttostr(diary_year)+'年');
         MonthQuery.filter:=' year_id ='+inttostr(diary_year);
         MonthQuery.filtered:=false;
         MonthQuery.Filtered:=true;
           MonthQuery.first;
            while not MonthQuery.Eof do
              begin
                diary_month := MonthQuery.Fieldbyname('diary_month').Value;
                diary_month_id := MonthQuery.FieldByName('id').Value ;
                TwoNode := Treeview1.Items.AddChild(OneNode,inttostr(diary_year)+'年'+inttostr(diary_month)+'月');
                DayQuery.filter:=' month_id ='+inttostr(diary_month_id);
                DayQuery.filtered:=false;
                DayQuery.Filtered:=true;
                DayQuery.first;              While not DayQuery.Eof do
                    begin
                      diary_day := DayQuery.FieldByName('diary_day').Value;
                      ThreeNode := Treeview1.Items.AddChild(TwoNode,inttostr(diary_year)+'年'+inttostr(diary_month)+'月'+inttostr(diary_day)+'日');
                      DayQuery.Next;
                    end;
                MonthQuery.Next;
              end;
         YearQuery.Next;
        end;
    end;