如何动态建立VFP能够打开的中文字段 dbf 表

本文介绍如何使用Delphi创建DBF文件,并详细说明了配置步骤以支持中文字段,包括定义字段、设置数据库类型及创建索引的方法。

(整理自网络)

示例:

var table1: TTable;

begin

  table1 := ttable.create(self);

  with table1 do

  begin

    active := false;

    DatabaseName := 'c:\'; {预定义的别名数据库工作区名}

    tablename := 'CiKu.dbf'; {将定义的数据库名}

    tabletype := ttDbase;

{数据库类型,可为ttParadox,ttDbase,ttFOXPRO,ttASCII

如果要让 dbf  支持中文字段

1.打开 BDE Administrator 窗体后在Database页上选择Dbase,在Definition页中将
Type项设为Standard;将Default Driver项设为Dbase;

2. 选择Configration页,在Drivers的Native项中选择Dbase,在Definition页中将T
ype项设为File;将Langdriver项设为DBASE CHS CP936;将Level项设为5。
3. 完成上述工作后,在Object菜单中选择Save as Configration,按出现的对话框要
求将以上的设置保存好。至此,数据库的基本配置工作就完成了,我们就可以进行下面的
工作了。}

     with fielddefs do
       begin

      clear;
      add('编码', ftstring, 2048, false);

      add('词汇', ftstring, 1024, false);

      add('词频', ftinteger, 0, false);

      add('字数', ftinteger, 0, false);

         end;

            {使用TTable.IndexDefs.Add()方法定义索引。Add有三个参数:索引名:string; 索引字段名:string; 索引类型:TIndexOptions;   
     with indexdefs do 

    begin

     clear;

      Add('index1', '词频',[ixprimary]);

    end;

   加索引后VFP打不开 dbf 文件。不加就能打开。看delphi源码

     if FileExists(ChangeFileExt(Name, '.FPT')) or
             FileExists(ChangeFileExt(Name, '.CDX')) then
            Result := ttFoxPro else
            Result := ttDBase;

可以发现 delphi 以索引文件判断 DBase 和 FoxPro 。
     } 
    createtable;

  end;

end;

***********************************************************************************

附 delphi 的TTable 的属性 GetTable

TTable.GetTableType

 function TTable.GetTableType: TTableType;
var
  Name, Extension: string;
  FDb: Boolean;
begin
  Result := ttDefault;
  FDb := SetDBFlag(dbfDatabase, True);
  try
    if not Database.IsSQLBased then
      if TableType = ttDefault then
      begin
        Extension := ExtractFileExt(TableName);
        if CompareText(Extension, '.DB') = 0 then Result := ttParadox
        else if CompareText(Extension, '.DBF') = 0 then
        begin
          Name := GetFileName;
          if FileExists(ChangeFileExt(Name, '.FPT')) or
             FileExists(ChangeFileExt(Name, '.CDX')) then
            Result := ttFoxPro else
            Result := ttDBase;
        end
        else if CompareText(Extension, '.TXT') = 0 then Result := ttASCII
      end else Result := TableType;
  finally
    if not FDb then SetDBFlag(dbfDatabase, False);
  end;
end;

转载于:https://www.cnblogs.com/bjxsky/archive/2012/12/14/2818590.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值