⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 005.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-数据库应用-->用Delphi实现不同数据库系统之间的数据转移</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-数据库应用 用Delphi实现不同数据库系统之间的数据转移">
<META NAME="description" CONTENT=" - DELPHI专题文档-数据库应用 - 用Delphi实现不同数据库系统之间的数据转移">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index8.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">用Delphi实现不同数据库系统之间的数据转移</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p><font color="#ffffff">-<span style="font-size: 9pt">---</font> 在 计 算 机 应 用 
系 统 的 软 件 升 级 改 造 过 程 中, 我 们 经 常 遇 到 这 样 一 个 
问 题: 老 系 统 的 数 据 库 平 台 与 新 系 统 不 同。 例 如, 老 
系 统 的 数 据 库 平 台 是Foxpro, 而 新 系 统 的 平 台 是SQL Server。 
而 且, 我 们 需 要 把 旧 的 数 据 库 应 用 系 统 中 的 一 些 数 据 
转 移 到 新 系 统 来。 但 是 因 为 新 老 系 统 在 定 义 数 据 类 
型、 数 据 格 式 等 方 面 的 差 异, 就 很 难 用 人 工 录 入 的 方 
法 来 实 现。 因 此, 需 要 有 一 个 能 实 现 这 种 功 能 的 程 
序。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 本 文 利 用Borland 
Delphi 实 现 了 这 个 转 移 过 程。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 基 本 思 想 是: 
在 一 个Form 中, 分 别 用 两 个TDatabase 控 件 连 接 新 老 数 据 库。 
并 采 用 TTable、TDbGrid 作 为 数 据 转 移 的 中 心, 根 据DbGrid 中 的 
数 据 生 成 标 准 的SQL 插 入 语 句。 这 样, 就 实 现 了 从 一 个 
数 据 库 系 统 到 另 一 个 数 据 库 系 统 的 数 据 转 移。 在 这 
里, 采 用TTable、TDbGrid 作 为 数 据 转 移 的 中 心 是 一 个 技 巧, 
因 为:TTable 的Fields 属 性 能 指 示 出 某 字 段 的 字 段 名 称、 数 
据 类 型 等, 这 为 数 据 转 移 过 程 中 的Insert 语 句 的 生 成 及 
数 据 类 型 转 换 提 供 了 依 据。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 下 面 的 例 子 展 
示 了 从Foxpro 到SQL Server 的 数 据 转 移 方 法。 至 于 其 他 系 统 间 
的 数 据 转 移, 只 要 根 据 目 标 系 统 的 数 据 定 义 要 求, 修 
改 相 应 的Insert 语 句。 </span></p> 
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 程 序 代 码 如 
下: </span></p> 
<BR> 
<pre><span style="font-size: 9pt">unit ConvertDBF;


interface


uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, DBTables, Db, Grids, DBGrids;


type
TfrmConvertDB = class(TForm)
btnOK: TButton;
Label1: TLabel;
db1: TDatabase;  {用于连接老数据库系统}
db2: TDatabase;  {用于连接新数据库系统}
dbg: TDBGrid;
tblSource: TTable; {dbg的Datasource}
qryInsert: TQuery;
{用于存放生成的SQL Insert语句}
srcSource: TDataSource;
tblDest: TTable; {DBGrid1的Datasource}
DBGrid1: TDBGrid;
srcDest: TDataSource;
edFromtbl: TEdit;
Label2: TLabel;
Label3: TLabel;
edToTbl: TEdit;
procedure btnOKClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
frmConvertDB: TfrmConvertDB;


implementation


{$R *.DFM}
procedure TfrmConvertDB.btnOKClick
(Sender: TObject);
var iField :integer;
begin
if ((edTotbl.text&lt;&gt;'') and
(edFromtbl.text&lt;&gt;''))then begin
tblSource.TableName:=edFromtbl.text;
{指定TableName}
tblDest.TableName:=edTotbl.text;
with tblSource do begin
Open; {打开老系统的表}
while EOF=FALSE do begin
{逐条记录处理}
qryInsert.SQL.Clear;
qryInsert.sql.Add
('Insert into '+edTotbl.text + '(');
for iField:=0 to dbg.FieldCount-1 do begin
qryInsert.sql.add
(dbg.Fields[iField].DisplayLabel);
if iField&lt;&gt;dbg.FieldCount-1 then
qryInsert.sql.add(',');
end;
qryInsert.sql.add(') values(');
for iField:=0 to dbg.FieldCount-1 do begin
{进行数据类型转换}
if dbg.fields[iField].DataType=ftInteger then
qryInsert.sql.add(inttostr
(dbg.fields[iField].asInteger));
if dbg.fields[iField].DataType=ftFloat then
qryInsert.sql.add(floattostr
(dbg.fields[iField].asFloat));
if dbg.fields[iField].DataType=ftDate then
qryInsert.sql.add(''''+datetostr
(dbg.fields[iField].asDateTime)+'''');
if dbg.fields[iField].DataType=ftString then begin
if dbg.fields[iField].asString&lt;&gt;'' then
qryInsert.sql.add(''''+dbg.fields
[iField].asString+'''')
else
qryInsert.sql.add('NULL');
end;
if iField&lt;&gt;dbg.FieldCount-1
then qryInsert.sql.add(',');
end;
qryInsert.sql.add(')');
qryInsert.ExecSQL;
{把数据插入到新系统的表中}
next;
end;
end;
tblDest.Close;
tblDest.Open;;
ShowMessage('  转换完毕!   ');
end
else
ShowMessage
('请输入要插入数据的表的名称   ');
end;
end.</span></pre> 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -