我用下边代码做了一个treeview与数据库相连的小程序,但是在点击treeview的节点时老是出现‘缺少用于更新或刷新的基本表信息’的错误
不知道是怎么回事啊?下边是建立的三个数据表:
表 名      列 名       列 描 述  
SCHOOL    SCH_NO       学 校 编 号 
          SCH_NAME     学 校 名 称 
CLASS     CLS_NO       班 级 编 号  
          CLS_SCHNO    学 校 编 号  
          CLS_TEACHER  班 主 任 姓 名 
STUDENT   STU_NO       学 生 学 号 
          STU_NAME     学 生 姓 名  
          STU_BIRTHDAY 学 生 出 生 年 月 
          STU_ADDR     学 生 家 庭 地 址 
          CLS_NO       班级编号
一下是代码部分:先定义了一个全局变量:TempClassNo:string;   STUTable 的Filtered 属 性 为True
procedure TForm1.FormCreate(Sender: TObject);
   var
     Node1,Node2,Node3:TTreeNode;
     NodeText1,NodeText2:String;
     TempValue:integer;
   begin
     with TreeView1.Items do
     begin
       clear;
       Node1:=Add(nil,' 学 校');// 添 加 根 节 点
                     // 指 定 显 示 在 节 点 文 字 的 图 标
       Node1.ImageIndex:=0;       // 打 开 三 个 数 据 表
        SCHTable.Active:=True;
             CLASSTable.Active:=True;
             STUTable.Active:=True;      with SCHTable do
      begin
         First;
         while not eof do
         begin
                                  // 获 得 学 校 的 名 称
           NodeText1:=Fields[1].AsString;
                                 // 获 得 学 校 的 编 号
           TempValue:=Fields[0].AsInteger;
                                // 插 入 一 个 学 校 节 点
            Node2:=AddChild(Node1,NodeText1); 
                              // 指 定 学 校 节 点 前 的 图 标
           Node2.ImageIndex:=1;           with CLASSTable do
           begin
             First;
             while not eof do
             begin
                                             // 查 找 与 当 前 学 校 编 号 匹 配 的 班 级 记 录
                  if TempValue=Fields[1].AsInteger then 
               begin
                                                 // 获 得 班 级 编 号
                  NodeText2:=Fields[0].AsString; 
                                               // 插 入 一 个 班 级 节 点
                    Node3:=AddChild(Node2,NodeText2); 
                                             // 指 定 班 级 节 点 前 的 图 标
               Node3.ImageIndex:=2;
             end;
             Next;
           end;
         end;
         Next;
       end;
     end;
     end;     Treeview1.FullExpand;// 展 开 全 部 节 点
     // 关 闭 学 校、 班 级 表
     SCHTable.Close;
     CLASSTable.Close;
   end;
procedure TForm1.TreeView1MouseDown (Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
 begin
   if TreeView1.Selected = nil then 
                Exit;
case  TreeView1.Selected.Level of
     0:  TreeView1.Selected.SelectedIndex:=3;
     1:  TreeView1.Selected.SelectedIndex:=4;
     2:  TreeView1.Selected.SelectedIndex:=5;
   end;
 // 该 值 将 传 递 给 表STUTable 的OnFiltereRecord 事 件 以 筛 选 被 选 中 班 级 的 学 生
      TempClassNo:=TreeView1.Selected.Text; 
 // 更 新 数 据 表, 激 发 表 STUTable 的OnFiltered 事 件。 
      STUTable.Refresh;  //在运行时可能是此处出错?
 end;
procedure TForm1.STUTableFilterRecord(DataSet:TDataSet;var Accept: Boolean);
begin
 Accept:=(STUTable.Fields[3].AsString=TempClassNo);
end;
请高手给我个详细的解答啊,非常感谢,高分相送!!