在Delphi中如何动态创建dbf数据库(二)?

unit Form_ToChangCSVforDBFU;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, DB, DBTables, Grids, DBGrids, ExtCtrls,
  StdCtrls;

type
  TForm_ChangCSVToDBFF = class(TForm)
    PopupMenu1: TPopupMenu;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Table1: TTable;
    ProgressBar1: TProgressBar;
    N1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    StatusBar1: TStatusBar;
    Button1: TButton;
    procedure N1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form_ChangCSVToDBFF: TForm_ChangCSVToDBFF;

implementation

{$R *.dfm}

procedure TForm_ChangCSVToDBFF.N1Click(Sender: TObject);
var
  llist,BBList:TStringList;
  i,j:Integer;
  Fname,Path:string;
begin
  self.OpenDialog1.Title :='打开CSV文件';
  Self.OpenDialog1.FileName:='*.CSV';
  Self.OpenDialog1.Filter :='CSV文件(*.CSV)|*.CSV|所有文件(*.*)|*.*';
  if Self.OpenDialog1.Execute then
  begin
    Self.StatusBar1.Panels[1].Text :=Self.OpenDialog1.FileName;
    Self.SaveDialog1.Title :='保存DBF为...';
    Self.SaveDialog1.DefaultExt:='DBF';
    Self.SaveDialog1.Filter :='dDBASE文件(*.DBF)|*.DBF|所有文件(*.*)|*.*';
    Fname :=ExtractFileName(Self.OpenDialog1.FileName);
    Fname:=ChangeFileExt(Fname,'');
    Self.SaveDialog1.FileName:=Fname+'.dbf';
    if Self.SaveDialog1.Execute then
    begin
      Fname:=ExtractFileName(Self.SaveDialog1.FileName);
      Path :=ExtractFilePath(Self.SaveDialog1.FileName);
      llist:=TStringList.Create;
      llist.LoadFromFile(Self.OpenDialog1.FileName);
      BBList:=TStringList.Create;
      BBList.Delimiter:=',';
      Self.Table1.Active :=False;
      Self.Table1.DisableControls;
      Self.Table1.DatabaseName:=Path;
      Self.Table1.TableName:=Fname;
      Self.Table1.TableType :=ttDbase;
      Self.Table1.FieldDefs.Clear;//这句很重要
      Self.Table1.IndexDefs.Clear;//这句很重要
      BBList.DelimitedText:=llist.Strings[0];
      Self.Table1.FieldDefs.Add(BBList[0],ftInteger,0,True);
      for i:=1 to BBList.Count-1 do
      begin
        Self.Table1.FieldDefs.Add(BBList[i],ftFloat,0,True);
      end;
      Self.Table1.CreateTable;
      Self.Table1.Active :=True;
      Self.ProgressBar1.Min:=0;
      Self.ProgressBar1.Max :=llist.Count -1;
      for i:=1 to llist.Count-1 do
      begin
        Self.Table1.Append;
        BBList.DelimitedText:=llist.Strings[i];
        Self.Table1.Fields[0].AsInteger :=StrToInt(BBList[0]);
        for j:=1 to BBList.Count-1 do
        begin
          if BBList[j]<>'' then
          begin
            Self.Table1.Fields[j].AsFloat:=StrToFloat(BBList[j]);
          end else
          begin
            Self.Table1.Fields[j].Value:=-9999;//处理数据为空的情况,这有别于数据为0的情况
          end;
        end;
        Self.Table1.Post;
        Self.ProgressBar1.Position :=i;
      end;
      Self.Table1.EnableControls;
      Self.ProgressBar1.Position :=0;
      llist.Free;
      BBList.Free;
    end;
  end;
end;

end.

 

 

posted on 2014-01-06 09:06  向北方 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/China3S/p/3506599.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值