我现在做程序用到了多线程,听人说如果用到多线程最好能用Session控件……
但我不明白这种情况下怎么用它?它是起什么作用??  请高手指点……

解决方案 »

  1.   

    1. 检 测 表 格 是 否 存 在 
    通 过 调 用Session.GetTableNames(const DatabaseName, Pattern: string; Extensions,SystemTables: Boolean; List: TStrings) 方 法, 可 将 当 前 指 定 数 据 库 别 名 中 所 有 表 格 的 名 称 存 放 到 List 字 符 串 列 表 中。list.IndexOf(' 需 要 检 测 的 表 格 名') 的 值 会 告 诉 我 们 这 个 表 格 是 否 存 在( 其 值 为-1 时 不 存 在)。 2. 建 立 一 个 表 格 
    第 一 步, 设 置TTable 组 件 的DataBase Name( 别 名)、TableName ( 表 格 名)、TableType( 数 据 库 类 型); 
    第 二 步, 调 用Table.FieldDefs.Add(const Name: string; DataType: TFieldType; Size: Word; Required: Boolean) 增 加 表 格的 各 个 字 段, 其 中Name 为 字 段 名,DataType 为 字 段 类 型( 常 用 的 有 ftInteger,ftString,ftDate,ftBoolean 等),Size 为 字 段 长 度, Required 为 该 字 段 是 否 允 许 有 空 值。 
    第 三 步, 调 用Table.IndexDefs.Add(const Name, Fields: string; Options: TIndexOptions) 方 法 增 加 表 格 的 索 引 文 件, 其 中 Name 为 索 引 文 件 名,Fields 为 索 引 字 段,options 为 索 引 参 数 的 集 合, 常 用 的 索 引 参 数 有ixPrimary( 主 键)、 ixDescending( 降 序)、 ixUnique( 具 有 唯 一 值) 等。 
    第 四 步, 调 用Table.CreateTable 建 立 表 格。 实例 :在Form1.Formcreate 事 件 中 写 入 如 下 代 码, 程 序 启 动 时, 将 自 动 检 测 是 否 存 在 数 据 库 别 名Cntssamp, 如 果 没 有 则 建 立 之; 自 动 检 测 别 名Cntssamp 中 是 否 存 在 表 格TSK( 图 书 库), 如 果 没 有 则 自 动 建 立 表 格TSK。 procedure TForm1.FormCreate(Sender: TObject);
    var
       ap:TStringList;   {字符串列表变量}
       answer:Integer;
    begin
       ap:=TStringlist.Create;
       Session.GetAliasNames(ap);   {取得别名列表}
       if (ap.IndexOf('Cntssamp')=-1) then   {判断别名是否存在}
       begin
          answer:=Application.MessageBox('别名Cntssamp不存在,现在创建吗?','BDE信息窗口',mb_OKCancel);
        {增加一个名为Cngzsamp的数据库别名}
          if  answer=IDCANCEL then 
          begin
              ap.Free;
              Exit;
          end;
          Session.AddStandardAlias('Cntssamp','c:\delphp11','Paradox');
          Session.SaveConfigFile;    {BDE配置文件存盘}
       end ;    ap.Clear;      {取得别名Cngzsamp中的所有表格名称列表}
        Session.GetTableNames('Cntssamp','',False,False,ap);
        if (ap.IndexOf('TSK')=-1)  then  {判断表格是否存在}
        begin
           answer:=Application.MessageBox( '别名Cntssamp中不存在表格TSK,现在创建吗?','表格信息窗口',mb_OKCancel);
           if answer=IDCANCEL then 
           begin
              ap.Free;
              Exit;
          end;      with table1 do 
          begin
             Active:=false;
             DatabaseName:='Cntssamp';     {数据库别名}
             TableName:='TSK';             {表格名}
             TableType:=ttParadox;         {数据库类型}
             with FieldDefs do 
              begin       {增加字段}
                  Clear;
                  Add('SH',ftString,30,False);   {书号 String(30)}
                  Add('SM',ftString,30,False);   {书名 String(30)}
                  Add('CBS',ftString,20,False); {出版社 String(20)}
                  Add('CBRQ',ftDate,0,False);    {出版日期 Date}
                  Add('YS',ftInteger,0,False);    {页数 Integer}
             end;         with IndexDefs do 
             begin      {增加索引}
                Clear;                       {按书号字段建立主索引}
                Add('SHSY','SH',[ixPrimary,ixUnique]);
             end;        CreateTable;      {创建表格}
         end;
       end ;
       ap.free;            {释放变量ap}
    end;
      

  2.   

    用动态的方法创建SESSION数组!每一个会话期连接一个SESSION。比如数据库多线程查询!
      

  3.   

    我这是一个POS软件,我把收据打印单独做了个线程,想必就不用这SESSION控件了吧!!  请高手指点……