使用代码创建一个kbmMemTable数据表

    在程序中,有时表结构可能是未知的,这时就不能事先创建好一个表了,使用如下代码可动态创建一个内存表: 
    with kbmMemTable1 do
     begin
          Close;
          MasterSource:=nil;

          // Define data fields.
          with kbmMemTable1.FieldDefs do
          begin
               Clear;
               Add('Period', ftInteger, 0, false);
               Add('VALUE', ftInteger, 0, false);
               Add('String', ftString, 30, false);
               Add('BytesField', ftBytes, 20, false);
               Add('Color', ftInteger, 0, false);
               Add('Date', ftDate, 0, false);
               Add('Bool', ftBoolean, 0, false);
               Add('Memo', ftMemo, 0, false);
               Add('AutoInc', ftAutoInc,0,false);
               Add('Currency',ftCurrency,0,false);
          end;

          // 定义索引字段
          with kbmMemTable1.IndexDefs do
          begin
               Clear;
               Add('Period','PERIOD',[]);
               Add('Index1','VALUE',[ixdescending]);
               Add('StringIndex','String',[]);
               Add('combined','PERIOD;VALUE',[]);
               Add('descending','PERIOD',[ixDescending]);
//               Add('Index2','Color;Period',[]);
          end;

          // 创建表
          CreateTable;
          //显示格式
          TCurrencyField(FieldByName('Currency')).DisplayFormat:='$###0.00';

          // 设置字段事件.
          with FieldByName('BytesField') do
          begin
               OnSetText:=kbmMemTable1BytesFieldSetText;
               OnGetText:=kbmMemTable1BytesFieldGetText;
          end;

          // 索引及排序
          IndexFieldNames := 'VALUE';
     end;

posted on 2008-04-06 23:54  bfxd  阅读(1309)  评论(1编辑  收藏  举报

导航