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[].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[];
Self.Table1.FieldDefs.Add(BBList[],ftInteger,,True);
for i:= to BBList.Count- do
begin
Self.Table1.FieldDefs.Add(BBList[i],ftFloat,,True);
end;
Self.Table1.CreateTable;
Self.Table1.Active :=True;
Self.ProgressBar1.Min:=;
Self.ProgressBar1.Max :=llist.Count -;
for i:= to llist.Count- do
begin
Self.Table1.Append;
BBList.DelimitedText:=llist.Strings[i];
Self.Table1.Fields[].AsInteger :=StrToInt(BBList[]);
for j:= to BBList.Count- do
begin
if BBList[j]<>'' then
begin
Self.Table1.Fields[j].AsFloat:=StrToFloat(BBList[j]);
end else
begin
Self.Table1.Fields[j].Value:=-;//处理数据为空的情况,这有别于数据为0的情况
end;
end;
Self.Table1.Post;
Self.ProgressBar1.Position :=i;
end;
Self.Table1.EnableControls;
Self.ProgressBar1.Position :=;
llist.Free;
BBList.Free;
end;
end;
end; end.

在Delphi中如何动态创建dbf数据库(二)?的更多相关文章

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

    table2.Close; table2.Active:=false; table2.Exclusive:=true; table2.TableName:='h:\gzkd\sds'; table2. ...

  2. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  3. (转载)在Delphi中利用MSDASC来配置数据库链接

    在Delphi中利用MSDASC来配置数据库链接 在运行期进行数据库的连接是一个问题,自己写一个窗体配置吧,数据库不一样,所用的参数也不一样,还有那讨厌的连接字符串,有时真不知该写什么好.那天无意中发 ...

  4. Delphi中DLL的创建和使用(转)

    Delphi中DLL的创建和使用     1.DLL简介:   2.调用DLL:   3.创建DLL:   4.两个技巧:   5.初始化:   6.例外处理.            1.DLL简介  ...

  5. 有谁知道Delphi中"窗口"的创建过程?

      求助:有谁知道Delphi中窗口的创建过程,此“窗口”不仅仅指 TForm 类型, 还包括一般的窗口控件,如TButton,TEdit等等,希望有能够十分详细的运作 过程,比如说CreatPara ...

  6. DELPHI中使用UNIDAC连接ORACLE数据库

    DELPHI中使用UNIDAC连接ORACLE数据库   最近在DELPHI中使用到UNIDAC连接到oracle数据库,这样可以不要安装oracle客户端,比较方便使用:所以简单学习了一下,主要是用 ...

  7. Delphi中的动态包,有详细建立包的步骤(答案很简单:因为包的功能强大)

    为什么要使用包? 答案很简单:因为包的功能强大.设计期包(design-time package)简化了自定义组件的发布和安装:而运行期包(run-time package)则更是给传统的程序设计注入 ...

  8. Delphi中DLL的创建和使用

    参考:http://blog.csdn.net/ninetowns2008/article/details/6311663 结合这篇博客:http://www.cnblogs.com/xumenger ...

  9. Delphi中的窗体创建与销毁

    Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时候你是不能操作本程序的其他窗体的,你不能把焦 ...

随机推荐

  1. cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建

    一.创建文件 首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene 最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =. 二.GameScene.h和 ...

  2. TeeChart注册方法

  3. http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html

    http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html

  4. POJ2686 Traveling by Stagecoach(状压DP+SPFA)

    题目大概是给一张有向图,有n张票,每张票只能使用一次,使用一张票就能用pi匹马拉着走过图上的一条边,走过去花的时间是边权/pi,问从a点走到b点的最少时间是多少. 用dp[u][S]表示当前在u点且用 ...

  5. 学习C# XmlSerializer 序列化反序列化XML

    类.变量常用头: [XmlRootAttribute]:对根节点的描述,在类声明中使用 如:下例的Html类 [XmlType]:对节点描述,在类声明中使用         如:下例的Head类 [X ...

  6. TYVJ P1068 STR Label:KMP匹配 不懂

    描述 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度.给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个.N,M,K<=200000 输入格式 第一行三个数  ...

  7. 【BZOJ】2929: [Poi1999]洞穴攀行(最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2929 题意描述不清..搞得我wa了一发.. 应该是,有1和n的点的边容量都为1,其余随便... 然后 ...

  8. 【SPOJ】10628. Count on a tree(lca+主席树+dfs序)

    http://www.spoj.com/problems/COT/ (速度很快,排到了rank6) 这题让我明白了人生T_T 我知道我为什么那么sb了. 调试一早上都在想人生. 唉. 太弱. 太弱. ...

  9. 【SPOJ】375. Query on a tree(树链剖分)

    http://www.spoj.com/problems/QTREE/ 这是按边分类的. 调试调到吐,对拍都查不出来,后来改了下造数据的,拍出来了.囧啊啊啊啊啊啊 时间都花在调试上了,打hld只用了半 ...

  10. HDU 4612 Warm up(Tarjan)

    果断对Tarjan不熟啊,Tarjan后缩点,求树上的最长路,注意重边的处理,借鉴宝哥的做法,开标记数组,标记自己的反向边. #pragma comment(linker, "/STACK: ...