高分求oracle数据和文件之间的互转的详细源码!急!(200分)

  • 主题发起人 主题发起人 victornb
  • 开始时间 开始时间
V

victornb

Unregistered / Unconfirmed
GUEST, unregistred user!
我要将oracle数据库中的多个表的多条记录用二进制的形式写入一个.dat文件备份,
其中包括存在BLOB字段的图象,然后又要将此数据文件可以分表、分记录导入,请
给详细源码,谢谢!
 
用这种试试,写数据库代码如下:
with query1 do
begin
sSQL:=
'insert into Createdreport '+
'(setid,year,id,title,eid,enterprisename,month,contain,'+
' userid,username,inputdate) '+
' values(:SetID,:Year,:Id,:title,:eid,:enterprisename,'+
' :month,:contain,:userid,:username,:inputdate)';
SQL.Text :=sSQL;
ParamByName('SetID').AsString := IntToStr(mSetID);
ParamByName('Year').AsString := IntToStr(mYear);
ParamByName('ID').AsString:='1000';
ParamByName('Title').AsString:='';
ParamByName('EID').AsString:=mEID;
ParamByName('EnterpriseName').AsString:=mEName;
ParamByName('Month').AsString:='1';//m_Month;
ParamByName('UserID').AsString:=mUserID;
ParamByName('UserName').AsString:=mUserName;
ParamByName('InputDate').AsDateTime:=Now();
ParamByName('Contain').LoadFromFile('数据库文件.CLL',ftBlob);
ExecSQL;
 
读数据库中的Blob,保存成文件。
sSql:= 'select * from CreatedReport where SetID=' + inttostr(mSetID)
+ ' and Year=' + inttostr(mYear) + ' and EID=''' + mEID + ''''
+ ' and ID=''1000'' and month='+#39+'1'+#39;
with Dm_MainForm.Query_A do
begin
Close;
Sql.Text := sSql;
Open;
end;

if Not Dm_MainForm.Query_A.Eof then
begin
TBlobField(Dm_MainForm.Query_A.FieldByName('Contain')).SaveToFile('数据库临时存储文件.CLL');
end;
 
注意:多列绑定可能会有问题(通过ODBC驱动程序可以解决)
 
还是用现成的吧
Imp
EXP
ShellExecute一下即可搞定
自己做的话也不是不行,PL/SQL Developer就自己做了一套
但好象必要性不大,没有IMP、EXP搞不定的。
 
你是导记录吗???你可以自己定一个数据文件格式,再select出来,写成你的文件。
就像Golden一样。也可以通过Oracle导入、导出命令(imp、exp)来完成备份的工作。
 
字段之间可以用符号分隔呀,其实大概也就是象oracle的imp、exp,不过好像它们不好
控制某个表的某几条记录[:(]
 
是的,只能导出一个表,或者整个用户。
 
所以只好自己写imp或emp了!必须是所有的字段和数据导入和导出都来自一个
二进制的文件,各位给点意见吧!
 
就是要定义你的数据文件格式了。
 
定义数据文件格式没问题,主要是如何存?如何取?包括的字段类型又多,Varchar2、
Date、blob、Number、..转换成二进制和转回来的时候有什么问题?该如何处理?
 
你看看AdoDataSet的savetofile方法看,有没有用???
 
或者是你先建立一个中间的本地表,如:paradox格式 的,或者 Access格式的。
先select出来,再Insert到本地表中。
 
不行!我要将多个表的多条数据存入文件!savetofile不能反复操作这个文件的,会覆盖
原来的数据,我估计可能只有用数据流的形式自己将记录一条一条写入,不知具体该如何
操作
 
EXP是可以控制导出的记录的,用QUERY选项即可。
当然,如果你不同的表要用不同的QUERY子句的话,你就只能每一个表导出成一个文件了

如果非要自己写的话,首先要定义自己的文件格式,即你怎么保存多条记录中的数据,这些
数据有字符串,数字,LOB文件。 比较麻烦就是了。
 
没有办法了吗?[:(][:(][:(]
 
办法有得是:
1、最简单的,集成Oracle自带的Exp, Imp实用工具
2、自己定义文件格式,用SQL从ORACLE取得数据并写入
3、用本地文件数据库(ACCESS或PARADOX等)
 
是亚,我就是问第2种方法的实现过程呀
 
那你可以通过本地数据库做。
 
不行,一定是Oracle8i!
 
后退
顶部