在使用batchmove组件进行数据转移拷贝时产生一个超时问题,如果解决?
具体情况如下:
两个TABLE连两个ODBC,源表是DBF表,目标表是SQLSERVER。又分别有两个DATABASE。DBGRID等组件。
在数据两小的时候还可以进行拷贝,如果数据太大,就产生ODBC超时或溢出//
我第一次这么急,下午要就工,没想到出这么一个问题。
如果不用BATCHMOVE是否还有其他方法也可以告之,先谢了。
具体情况如下:
两个TABLE连两个ODBC,源表是DBF表,目标表是SQLSERVER。又分别有两个DATABASE。DBGRID等组件。
在数据两小的时候还可以进行拷贝,如果数据太大,就产生ODBC超时或溢出//
我第一次这么急,下午要就工,没想到出这么一个问题。
如果不用BATCHMOVE是否还有其他方法也可以告之,先谢了。
解决方案 »
- 关于delphi2007的一个简单问题!!
- 求助:关于spcomm 接收数据的问题..急...分不够可以再加.谢谢
- 一开始用Delphi做C/S架构的数据库程序就遇到问题了,请教
- 怎样把时间2003年12月12日12时30分存入数据库?
- delphi中的资源文件用什么工具编辑比较好?我的资源文件比较大
- 关于image的打印。
- clientdataset1.commandtext问题,急死我了
- 如何在数据库中随机取1000条记录!!60分相送
- 各位老大,介绍两本delphi网络编程的一级棒的好书啊,我有急用
- ★★★★★高分求〓毕业设计〓题目,具体见内★★★★★--语蓝(猪猪)
- 菜:delphi程序用什么来打包
- 100分,如何得到指定计算机名的IP?
中找到你的表名。而目标的就用BDE 这样如何。在线等待。
所以,呵呵
A BUG
还有我的ML:[email protected]
begin
DisableControls;
First;
SrcDataSet.SQL.Clear;
while not Eof do
begin
SrcDataSet.SQL.Add(Format('insert into table values(''%s'', ''%s''', [Fields[0].AsString, Fiedls[1].AsString]));
if SrcDataSet.SQL.Count > 100 then
begin
SrcDataSet.ExecSQL;
SrcDataSet.SQL.Clear;
end;
Next;
end;
end;类似这样吧。
---- 在 计 算 机 应 用 系 统 的 软 件 升 级 改 造 过 程 中, 我 们 经 常 遇 到 这 样 一 个 问 题: 老 系 统 的 数 据 库 平 台 与 新 系 统 不 同。 例 如, 老 系 统 的 数 据 库 平 台 是Foxpro, 而 新 系 统 的 平 台 是SQL Server。 而 且, 我 们 需 要 把 旧 的 数 据 库 应 用 系 统 中 的 一 些 数 据 转 移 到 新 系 统 来。 但 是 因 为 新 老 系 统 在 定 义 数 据 类 型、 数 据 格 式 等 方 面 的 差 异, 就 很 难 用 人 工 录 入 的 方 法 来 实 现。 因 此, 需 要 有 一 个 能 实 现 这 种 功 能 的 程 序。 ---- 本 文 利 用Borland Delphi 实 现 了 这 个 转 移 过 程。 ---- 基 本 思 想 是: 在 一 个Form 中, 分 别 用 两 个TDatabase 控 件 连 接 新 老 数 据 库。 并 采 用 TTable、TDbGrid 作 为 数 据 转 移 的 中 心, 根 据DbGrid 中 的 数 据 生 成 标 准 的SQL 插 入 语 句。 这 样, 就 实 现 了 从 一 个 数 据 库 系 统 到 另 一 个 数 据 库 系 统 的 数 据 转 移。 在 这 里, 采 用TTable、TDbGrid 作 为 数 据 转 移 的 中 心 是 一 个 技 巧, 因 为:TTable 的Fields 属 性 能 指 示 出 某 字 段 的 字 段 名 称、 数 据 类 型 等, 这 为 数 据 转 移 过 程 中 的Insert 语 句 的 生 成 及 数 据 类 型 转 换 提 供 了 依 据。 ---- 下 面 的 例 子 展 示 了 从Foxpro 到SQL Server 的 数 据 转 移 方 法。 至 于 其 他 系 统 间 的 数 据 转 移, 只 要 根 据 目 标 系 统 的 数 据 定 义 要 求, 修 改 相 应 的Insert 语 句。 ---- 程 序 代 码 如 下: 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<>'') and
(edFromtbl.text<>''))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<>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<>'' then
qryInsert.sql.add(''''+dbg.fields
[iField].asString+'''')
else
qryInsert.sql.add('NULL');
end;
if iField<>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.
SrcDataSet.Append;
SrcDataSet.Field[i].Value := DstDataSet.Fields[i].Value;
...改一下你的代码,速度应该很快的啊。
记住使用前将DataSet.DisableControls了,不然速度会很慢的。
不过,那们组件我也常用,却没有见过这样的问题呢!
我想你这样试行不行:
在企业管理器中直接导,如果成功可以肯定SQLServer是没问题的,导入这么数据也是没问题的!