你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
学生成绩管理系统的设计与开发(六)
 

Chk := True;

  for i:= 0 to Level-1 do begin

    for j:= 1 to 2 do begin

      if DataSet.FindField(Fields[i][j])=nil then begin

        ShowMessage('Fields数组中的字段名 '+Fields[i][j]+' 没有包含在数据集中');

        Chk := False;     Break;

      end;

    end;

    if Chk = False then Exit; // 退出

  end;

  setLength( KeyFieldValue, Level);

  for i:= 0 to Level-1 do     //清空关键字值

    KeyFieldValue[i] := '';

  Tree_Items := TStringList.Create;

  try

    Tree_Items.clear;

    TreeList.Clear;

    DataSet.First;

    while Not DataSet.Eof do begin

     for i:= 0 to Level-1 do begin

     // i级节点值KeyFieldValue[i]DataSet中的第i个关键字值进行比较

       if (DataSet.FieldByName(Fields[i][1]).AsString<>'')

             And (KeyFieldValue[i]<>DataSet.FieldByName(Fields[i][1]).AsString) then begin

         StrIndent := ''; // 生成缩进字符串,第几级就是几个#9

         for j:= 0 to i-1 do

           StrIndent := StrIndent + #9;

         // 新的第i层节点开始

         KeyFieldValue[i] := DataSet.FieldByName(Fields[i][1]).AsString;

         // 显示的节点信息

         Tree_Items.Add(StrIndent+DataSet.FieldByName(Fields[i][2]).AsString);

         // 节点的关联信息 -> 关键字

         TreeList.Add(KeyFieldValue[i]);

         for j:=i+1 to Level-1 do KeyFieldValue[j]:='';

       end

     end;

     DataSet.Next;

   end;

   Tree_Items.SaveToFile('c:\$.txt');   // 临时文件

   TreeView.LoadFromFile('c:\$.txt');

  finally

   Tree_Items.free;

   DataSet.Active:=False;

  end;

end;

5) 动态填充TComboBox对象Items属性列表值的CreateItems函数。因本系统中存在大量的外键,而外键值必须在主表中存在,故编制该函数使用户只能从主键值中选择使用,从而避免用户输入非法数据。填充时若有两个字段,则两个字段值之间使用空格分隔。

CreateItems函数中,DataSet为要填充数据的数据集对象;Items为要填充的列表对象;KeyFields为要使用什么字段数据填充;AddBlankItem指示是否需要在第一行添加一个“请选择”项目,默认为不需要;WantClose指示用于填充的数据集使用后是否需要关闭,默认为关闭;WantSearch指示是否需要返回一个查询值在列表中的位置,仅用于与登录用户ID比较,默认为否。

Function CreateItems(DataSet: TDataSet; Items: TStrings; KeyFields: String;

    AddBlankItem :Boolean=False; WantClose: Boolean=True; WantSearch: Boolean=False) : Integer;

var

 iPos, iCount :  Integer;

begin       // KeyFields中的2个字段名以;分隔

 Result := 0;

 iPos := Pos(';', KeyFields);

 Items.Clear;  // 清空列表

 iCount := 0;

 if AddBlankItem then begin

  Items.Add( strEmptySelect ); // 添加一个没有选择行

  iCount := 1;

 end;

 with DMServerDB do begin

  DataSet.First;

  while not DataSet.Eof do begin

   if iPos=0 then // 只有一个字段

    Items.Add(DataSet.FieldByName(KeyFields).AsString)

   else begin

    strTemp:=DataSet.FieldByName(Copy(KeyFields,1,iPos-1)).AsString;

    Items.Add(strTemp+' '+DataSet.FieldValues[Copy(KeyFields,iPos+1,Length(KeyFields))]);

    if (WantSearch) And (UserType=2) then

     if strTemp=ADODataSetUser.FieldValues[ Copy(KeyFields,1,iPos-1) ] then

       Result := iCount;

   end;

   Inc(iCount);

   DataSet.Next;

  end;

  if WantClose then  DataSet.Close;  // 关闭数据集

 end;

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089