用Delphi进行数据库之间转换 
在实际应用中,可能会遇到将一种数据库转为另一种数据库的情况,而Delphi可以完成这种功能。尤其是需要将以前的dbase数据库结构及内容转换成其它数据库结构时,采用此方法简单、快速且安全。 
Delphi是一种Windows应用程序开发软件。它速度快,具有强大且容易使用的可视化开发环境,并采用了具有弹性和可重用的完整的面向对象程序语言。 
由于以上的这些特点,Delphi可以让我们快速地建立起主从结构的应用程序,可产生单一可执行文件与动态链接库以及从单机、网络到主从结构的应用程序。 
使用Delhpi可以方便而快速地建立强大的数据库应用程序,可以和Paradox、dbase、Lo cal InterBase Server、Foxpro及ODBC数据源等多种桌面型数据库直接配合使用。 
数据库转换方法 
1.所使用的控件 
2.TBatchMove控件的使用 
TBatchMove允许在一组记录或是整个数据表中执行特种作业,这个控件的主要用途在于把数据从服务器中卸到本地的数据源供分析或进行其他操作。TBatchMove可以在目的地建立对应于原数据表内容的数据表,自动将列名及数据类型进行适当的对应操作。 
TBatchMove两个特性指明批量移动(Batch Move)操作的源表及目的表。Source指定一个对应于已有的源数据表的数据集(一个Tquery或Ttable控件),Destination指明对应于一个数据库数据表的Ttable控件,目的数据表可以是已经存在的也可以是不存在的。 
Mode特性指明TBatchMove对象所要做的事情: 
我们可以根据batCopy模式,对数据库类型进行适当的转换,以下是从dBASE类型到其它类型之间的转换结果: 
数据库转换举例 
现有用Foxbase开发的财务程序中的会计科目数据库(kjkmk.dbf),系统将升级到Window s环境下开发,数据库将采用Paradox语言。为了沿用该库结构和数据,可采用如下方法进行转换。 
1.Datasource1控件: 
AutoEdit True 
DataSet Table1 
Enabled True 
Name DataSorce1 
2.Table1控件: 
DatabaseName cw 
Name Table1 
Readonly False 
TableName KJKMK 
TableType udBase 
Datasource1控件和Table1控件共同定义被转换的源文件,该文件是
在别名为cw里的kjk mk,文件类型为Dbase。 
3.BatchMove1控件: 
Destination Table2 
Mode balCopy 
Name BatchMove1 
Sorce Table1 
MatchMovel控件定义转换类型为Copy以及源文件、目标文件。 
4.Datasource2控件: 
AutoEdit True 
DataSet Table2 
Enabled True 
Name DataSorce2 
.Table2控件: 
DatabaseName cwdb 
Name Table2 
Readonly False 
TableName KJKMK 
TableType uParadox 
Datasource2控件和Table2控件共同定义转换后的目标文件,该文件是在别名为cwdb里的 kjkmk,文件类型为Paradox。 
6.DbGrid1控件: 
Datasorce Datasorce1 
Name DbGridl 
字符串函数库DbGridl网格控件先定义源文件,执行转换后再定义目标文件,主要用于方便查看。 
7.Button1控件: 
OnClck ButtonClck 
OndragDrop 
Ondragover 
OnEnddrag 
该控件有一个OnClick事件,表示执行文件类型转换。其代码如下: procedure TForm1.Button1Click(Sender:TObject); 
begin 
BatchMove1.execute; 
end; 
经上述方法定义,编译执行后,即可将kjkmk.dbf文件转换成kjkmk.db文件,然后就可以用 Database Desktop工具对其进行修改调整。 
用此方法还可进行其它任意文件的转换。 
ODBC中的同步与异步执行模式 
1.引言 
近年来,随着计算机局域网技术的不断发展,计算机体系结构已经发展到复杂而开放的客户机/服务器模式。对于客户机/服务器应用的开发,现在常用的前端开发工具有:VisualBasic、Delphi、PowerBuilder等。它们可通过ODBC接口访问服务器的SQLServer数据库服务器。 
VisualBasic、Delphi、PowerBuilder等开发工具在使用ODBC2.0来编写程序时,通常会提供三种方法来进行数据库应用程序的方案设计:・使用数据控制项・使用数据库对象变量进行编程・直接调用ODBC2.0API 
在客户机/服务器模式下进行数据库应用程序设计时,仅用前两种方法往往是不够的。因为采用前两种方法,其执行模式对于程序员是透明的,而ODBC2.0访问数据库时存在同步与异步执行模式之分,
故容易因设计不当,发生系统死锁。因此,在实际编程序时,我们需要采用第三种方法来解决由同步和异步执行模式所造成的问题。 
2.同步和异步执行模式ODBC2.0访问数据库时,有同步执行模式与异步执行模式之分。 
所谓同步执行模式,是指语句在同步执行模式下,将始终保持对程序流的控制,直至程序结束。例如查询操作,客户机上的应用程序在向服务器发出查询操作的指令后,将一直等待服务器将查询结果返回客户机端后,才继续进行下一步操作,如图1所示。 
图1同步执行模式 
所谓异步执行模式,是指语句在异步执行模式下,各语句执行结束的顺序与语句执行开始的顺序并不一定相同。例如查询操作,客户机上的应用程序在向服务器发出了查询操作的指令后,将立刻执行查询语句的下一条语句,而不需要等到服务器将查询结果返回客户机端后,才继续进行下一步操作。如图2所示。 
图2异步执行模式 
在一些应用程序开发工具中,在其提供使用数据控制项和数据库对象变量进行编程的同时,并没有很好地考虑到同步执行模式与异步执行模式的重要区别。为了使程序运行速度更快,其语句执行的缺省模式
为异步模式。对于一般程序员来说,如果他对同步执行模式与异步执行模式不了解的话,他往往会在对服务器发出一个操作语句(查询或读取一条记录等操作)后,立刻引用服务器返回的执行结果,或者对该结果进行下一步操作;在异步执行模式下,客户机上的后续语句是在该操作语句发出后接着执行的,但由于各种原因,服务器不一定能执行完该操作语句,并在后续语句执行前将结果返回客户机。因此,后续语句在引用前一操作语句的执行结果时,往往会因为该执行结果并不存在而引用了错误的值,造成系统错误或死锁。 
3.解决方案 
解决上面所提到的问题,可以采取以下两种方案:①利用ODBC2.0API,将语句执行状态设置为同步执行模式。ODBC2.0API中,函数SQLSetStmtOption()的功能是设置同步或异步执行模式。我们可
以采用以下语句,将语句执行状态设置为同步执行模式:iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-EN2ABLE,0)其中,hStmt是一有效的语句句柄,常数SQL-ASYNC-ENABLE是所要设置的选项,参数0表示该选项(即异步执行模式)关闭。如果iRetCode返回SQL-SUCCESS,则表示语句执行状态已被设置为同步执行模式。 
②利用ODBC2.0API,将语句执行状态设置为异步执行模式,然后在程序中不断查询一个操作语句是否已经执行完毕。 
ODBC2.0API中共有20多个函数支持异步执行,如上页表所示。 
这些函数第一次调用后,将返回值SQL-STILL-EXE2CUTING,这时应用程序将继续执行后续语句。过了一段时间后,应该再次调用原函数,而且要注意:实参数应传入与第一次调用时相同的语句句柄,其他参数也应一样(但会被忽略)。如果函数返回值为SQL-SUCCESS,则表明该语句已经执行完毕;如果函数返回SQL-STILL-EXECUTING,则表明该语句仍在执行中。 
我们可以用一个简单的例子说明如下:iRetCodeΚSQLSetStmtOption(hStmt,SQL-ASYNC-ENABLE,1)′置语句执行模式为异步执行模式iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)......′执行其他操作iRetCodeΚSQLExecDirect(hStmt,″SELECT*FROMemployees″,23)′判断SQLExecDirect()是否已执行完毕If(iRetCodeΚSQL-STILL-EXECUTING)Then......′该语句未执行完,继续执行其他操作ElseIf(iRetCodeΚSQL-SUCCESS)Th
en......′该语句已执行完,可对语句操作结果进行处理EndIfEndIf同步执行模式可以简化程序编制的复杂性,对ODBC2.0API不十分熟悉的程序员,可以不用过多地了解比较复杂的ODBC2.0API,而只需使用数据控制项和数据库对象变量来编写应用程序,使开发效率大大提高,但程序运行速度比不上异步执行模式的速度。 
异步执行模式虽然在编程序时十分复杂,但在这种模式下可以进行多任务并行执行,使执行效率大大提高。 
我们在编制应用程序时,应根据自身的情况,对这两种模式的使用进行划分,以便既提高程序运行的安全可靠性,又提高程序执行的效率。 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。