我是一个delphi初学者,我现在要做两个数据库之间的数据交换,要将ACCESS数据库一张表里面的记录导入到oracle数据库的一张相同的表里面,有什么比较好的方法吗?请各位指教
解决方案 »
- 如何控制网页Flash?
- 取cpu号注册软件
- 数据库的设计问题?请求高手帮忙~~
- 某游戏的delphi源码
- http://expert.csdn.net/Expert/topic/3036/3036638.xml?temp=.8686792
- (2003-1-1 12:00:00)-(2002-8-11 12:00:00)=多少天?如何计算...
- 广度优先搜索是怎么搞的?
- 求XP墙纸更换的一个API
- 如何显示ProgressBar的进度条,给分100
- 装好Kylix后,运行出错,“Runtime error 230 at 413A9497”
- trunc(Frac(Now)*24*60)报错!! left side cannot be assigned to
- 菜鸟问问题:delphi默认初始化问题
应该用那个组件呢,我看DELPHI才几天,不太了解,能解释一下吗?
从当前Access表导出至XML
var
ARecordset: _Recordset;
begin
ARecordset := ExecuteSQL(Format('select * from %s', [
SQLInfo.ObjectStr(ATableName)]));
ARecordset.Save(AFileName, adPersistXML);
end;从XML文件导入至Oracle
var
ARSFile, ARSTable: _Recordset;
AFieldName, ASQLText: string;
I, J, ACount: Integer;
AFieldFile, AFieldTable: Field;
AValue: OleVariant;
begin
ARSFile := OpenRecordset(AFileName,
ConnectionObject, adLockBatchOptimistic, adCmdFile);
ACount := ARSFile.RecordCount;
if ACount = 0 then
Exit; ASQLText := Format('SELECT * FROM %s', [SQLInfo.ObjectStr(ATableName)]);
ARSTable := OpenRecordset(ASQLText,
ConnectionObject, adLockBatchOptimistic, adCmdText);
ConnectionObject.BeginTrans;
try
ARSFile.MoveFirst;
for I := 0 to ACount - 1 do
begin
ARSTable.AddNew(EmptyParam, EmptyParam);
try
for J := 0 to ARSFile.Fields.Count-1 do
begin
AFieldFile := ARSFile.Fields[J];
AFieldName := AFieldFile.Name;
AFieldTable := FindField(ARSTable, AFieldName);
if AFieldTable = nil then
Continue;
AValue := AFieldFile.Value;
if not VarIsClear(AValue) then
AFieldTable.Value := AValue;
end;
if (ARSTable.EditMode * (adEditInProgress + adEditAdd)) <> 0 then
ARSTable.Update(EmptyParam, EmptyParam);
except on E: exception do
begin
ARSTable.CancelUpdate;
HandleLog(E.Message);
raise;
end;
end;
ARSFile.MoveNext;
end;
ARSTable.UpdateBatch(adAffectAll);
ConnectionObject.CommitTrans;
Result := True;
except on E: exception do
begin
ConnectionObject.RollbackTrans;
HandleLog(E.Message);
raise;
end;
end;
end;
从当前Access表导出至XML
var
ARecordset: _Recordset;
begin
ARecordset := ExecuteSQL(Format('select * from %s', [
SQLInfo.ObjectStr(ATableName)]));
ARecordset.Save(AFileName, adPersistXML);
end;从XML文件导入至Oracle
var
ARSFile, ARSTable: _Recordset;
AFieldName, ASQLText: string;
I, J, ACount: Integer;
AFieldFile, AFieldTable: Field;
AValue: OleVariant;
begin
ARSFile := OpenRecordset(AFileName,
ConnectionObject, adLockBatchOptimistic, adCmdFile);
ACount := ARSFile.RecordCount;
if ACount = 0 then
Exit; ASQLText := Format('SELECT * FROM %s', [SQLInfo.ObjectStr(ATableName)]);
ARSTable := OpenRecordset(ASQLText,
ConnectionObject, adLockBatchOptimistic, adCmdText);
ConnectionObject.BeginTrans;
try
ARSFile.MoveFirst;
for I := 0 to ACount - 1 do
begin
ARSTable.AddNew(EmptyParam, EmptyParam);
try
for J := 0 to ARSFile.Fields.Count-1 do
begin
AFieldFile := ARSFile.Fields[J];
AFieldName := AFieldFile.Name;
AFieldTable := FindField(ARSTable, AFieldName);
if AFieldTable = nil then
Continue;
AValue := AFieldFile.Value;
if not VarIsClear(AValue) then
AFieldTable.Value := AValue;
end;
if (ARSTable.EditMode * (adEditInProgress + adEditAdd)) <> 0 then
ARSTable.Update(EmptyParam, EmptyParam);
except on E: exception do
begin
ARSTable.CancelUpdate;
HandleLog(E.Message);
raise;
end;
end;
ARSFile.MoveNext;
end;
ARSTable.UpdateBatch(adAffectAll);
ConnectionObject.CommitTrans;
Result := True;
except on E: exception do
begin
ConnectionObject.RollbackTrans;
HandleLog(E.Message);
raise;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
n1,n2,n3,n4: String;
begin
///adoqueyr1连接Access,adoquery2连接oracle
///数据库名都为test,字段名都为n1,n2,n3,n4
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select n1,n2,n3,n4 from test');
open;
end;
while not adoquery1.Eof do
begin
n1 :=adoquery1.Fields[0].AsString;
n2 :=adoquery1.Fields[1].AsString;
n3 :=adoquery1.Fields[2].AsString;
n4 :=adoquery1.Fields[3].AsString; adoquery2.Close;
adoquery2.SQL.Clear;
adoquery2.SQL.Add('insert into test values(:s0,:s1,:s2,:s3)');
adoquery2.Parameters.ParamByName('s0').Value :=n1;
adoquery2.Parameters.ParamByName('s1').Value :=n2;
adoquery2.Parameters.ParamByName('s2').Value :=n3;
adoquery2.Parameters.ParamByName('s3').Value :=n4;
adoquery2.Prepared;
adoquery2.ExecSQL;
adoquery1.Next;
end;
end;