热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Delphi数据库编程新手指南(11)

使用ADO将Paradox数据导入Access(FromParadoxtoAccesswithADO)本章将着重于运用TADOCommand组件以及SQLDDL语言,将BDEPar

使用ADO将Paradox数据导入Access (From Paradox to Accesswith ADO)

  本章将着重于运用TADOCommand组件以及SQL DDL语言,将BDE/ Paradox中的数据导入至ADO/Access中。

数据定义语言(Data definitionlanguage

通过编程创建一个数据库并不是大多数开发人员每天都在做的事情 - 大家都使用某种可视化工具,如MSAccess维护一个MDB文件。不幸的是,有时你需要通过代码创建和销毁数据库以及数据库对象。现今使用的最基本的技术是结构化查询语言数据定义语言(SQL DDL)。数据定义语言(DDL)语句是支持数据库对象的定义或声明的SQL语句(例如CREATE TABLE,DROP TABLE,CREATE INDEX和类似声明)。

在这里我的目的不是教大家DDL语言,如果你熟悉SQL DML,对DDL应该没有障碍。需要注意的是使用DDL可是相当棘手的,因为每个数据库供应商通常会提供自己扩展的SQL。

让我们来看看一个简单的CREATETABLE语句:

CREATE TABLE PhoneBook(
Name TEXT(50)
Tel TEXT(50)
)
上述DDL语句(MS Access)在执行时,将创建一个名为PhoneBook的新表。该表具有两个字段,Name及Tel。两个字段都是字符串(文本)类型,大小为50个字符。


TFieldDef.DataType

显然,在Access中string类型用TEXT表示,Paradox则为string。为了将Paradox表导入Access中,我们必须知道哪些数据类型可用,以及字段名是什么。在BDE及Paradox表中,TFieldDef.DataType属性指定字段(数据集)类型。要成功将Paradox表迁移到Access,你需要一个函数将Paradox字段类型“转换”为Access相应类型。

下面的函数用于检查字段(FD)类型,并返回Access的相应类型和字段大小,提供给CREATE TABLE DDL语句。

function AccessType(fd:TFieldDef):string;
begin
case fd.DataType of
ftString:Result:='TEXT('+IntToStr(fd.Size)+')';
ftSmallint: Result:='SMALLINT';
ftInteger: Result:='INTEGER';
ftWord: Result:='WORD';
ftBoolean: Result:='YESNO';
ftFloat : Result:='FLOAT';
ftCurrency: Result := 'CURRENCY';
ftDate, ftTime, ftDateTime: Result :='DATETIME';
ftAutoInc: Result := 'COUNTER';
ftBlob, ftGraphic: Result := 'LONGBINARY';
ftMemo, ftFmtMemo: Result := 'MEMO';
else
Result:='MEMO';
end;
end;

TADOCommand

在ADOExpress中,TADOCommand是具有代表性的ADO Command对象VCL组件。 Command对象表示一个可以由数据源处理的指令(作为查询或语句),可以通过ADOCommand的Execute方法来执行。 TADOCommand常用于执行数据定义语言(DDL)SQL指令。 CommandText属性用于指定需要执行的命令;CommandType属性用于判断如何解释CommandText属性;cmdText type用于指定DDL语句。你也可以用ADOCommand组件来检索表、执行查询或存储过程等等,虽然这没有任何意义。

以下为项目示范:

l  得到一个BDE alias中所有表的列表;

l  使用TFieldDefs检索表中各字段的定义(名称、数据类型、大小等);

l  创建CREATE TABLE语句;

l  从BDE/ Paradox表将数据复制到ADO/ Access表。

基本上,我们要做的就是从DBDEMOS中复制几个表到我们的Access数据库—aboutdelphi.mdb。

让我们一步一步来:

启动Delphi——这会创建一个带有空白窗体的新项目;然后添加两个Button、一个ComboBox和Memo组件;接着增加一个TTable、TADOTable、TADOConnection和TADOCommand组件;之后在Object Inspector中按照下述示例设置属性(其他属性保持默认——例如Memo组件保持默认名:Memo1):

Button1.Caption := 'ConstructCreate command'
Button2.Caption := 'CreateTable and copy data'
ComboBox.Name :=cboBDETblNames;
//如同第二章中所描述的
ADOConnection1.ConnectionString:= ...
TADOTable.Name := ADOTable
ADOTable.Connection :=ADOConnection1
TADOCommand.Name := ADOCommand
ADOCommand.Connection :=ADOConnection1
TTable.Name := BDETable
BDETable.DatabaseName :='DBDEMOS'

Code

为了检索一个给定数据库(DBDEMOS)相关表的列表,我们使用下面的代码(窗体OnCreate事件中):

procedure TForm1.FormCreate(Sender: TObject);
begin
Session.GetTableNames('DBDEMOS', '*.db', False,False, cboBDETblNames.Items);
end;

当你启动工程,ComboBox将获得DBDEMOS别名目录中所有的(Paradox)表名。下面的代码,我们将挑选country表。

接下来的任务是创建一个CREATETABLE DDL语句,放在  'Construct Create command'按钮的OnClick事件中:

procedure TForm1.Button1Click(Sender: TObject);
//'Construct Create command'button
var i:integer;
s:string;
begin
BDETable.TableName:=cboBDETblNames.Text;
BDETable.FieldDefs.Update;

s:='CREATE TABLE ' + BDETable.TableName + '(';
with BDETable.FieldDefs do begin
for i:=0 to Count-1 do begin
s:=s + ' ' + Items[i].Name;
s:=s + ' ' + AccessType(Items[i]);
s:=s + ',';
end; //for
s[Length(s)]:=')';
end;//with

Memo1.Clear;
Memo1.lines.Add (s);
end;

上述代码简单解析了选定表(cboBDETblNames)中字段的定义,而后生成一个字符串供TADOCommand组件的CommandText属性使用。

例如,当选择country表时Memo组件显示如下内容:

CREATE TABLE country (
Name TEXT(24),
Capital TEXT(24),
Continent TEXT(24),
Area FLOAT,
Population FLOAT)
最后,是“CreateTable and copy data”按钮的相关代码。删除表(DROP..EXECUTE)、创建表(CREATE..EXECUTE),然后将数据复制到新表(INSERT...POST),以及一些错误处理代码。但代码仍可能失败——例如(新)表已经存在(在删除表之后)。

procedure TForm1.Button2Click(Sender: TObject);
//'Create Table and copy data'button
var i:integer;
tblName:string;
begin
tblName:=cboBDETblNames.Text;

//refresh
Button1Click(Sender);

//drop & create table
ADOCommand.CommandText:='DROP TABLE ' +tblName;
ADOCommand.Execute;

ADOCommand.CommandText:=Memo1.Text;
ADOCommand.Execute;

ADOTable.TableName:=tblName;

//copy data
BDETable.Open;
ADOTable.Open;
try
while not BDETable.Eof do begin
ADOTable.Insert;
for i:=0 to BDETable.Fields.Count-1 do begin
ADOTable.FieldByName
(BDETable.FieldDefs[i].Name).Value :=
BDETable.Fields[i].Value;
end;//for
ADOTable.Post;
BDETable.Next
end;//while
finally
BDETable.Close;
ADOTable.Close;
end;//try
end;
这样,你的Access数据库中也有了一个Country表,并且所有的数据都来源于DBDEMOS。

现在,你可以将整个Paradox表都导入Access中(下载代码)。但是,仍然有几个问题没有解决。首先:如何在表中添加索引(CREATEINDEX ON ...);其次:如何创建一个空的Access数据库。这些问题(以及其他你能想到的),将留在论坛或新章节中解决。


推荐阅读
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了win7系统休眠功能无法启动和关闭的解决方法,包括在控制面板中启用休眠功能、设置系统休眠的时间、通过命令行定时休眠、手动进入休眠状态等方法。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了在Windows系统下安装Python、setuptools、pip和virtualenv的步骤,以及安装过程中需要注意的事项。详细介绍了Python2.7.4和Python3.3.2的安装路径,以及如何使用easy_install安装setuptools。同时提醒用户在安装完setuptools后,需要继续安装pip,并注意不要将Python的目录添加到系统的环境变量中。最后,还介绍了通过下载ez_setup.py来安装setuptools的方法。 ... [详细]
author-avatar
默一
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有