大家来讨论一下如何将数据导入到数据库表中去?(100分)

  • 主题发起人 主题发起人 笨猪
  • 开始时间 开始时间

笨猪

Unregistered / Unconfirmed
GUEST, unregistred user!
我用adoquery将数据库表xx中的所有数据导出到一个文件中,代码如下:
var
f:Textfile;
str:string;
i,k:integer;
database:string;
begin
with datamodule2.ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select * from xx');
open;
end;
if savedialog1.Execute then
begin
assignfile(f,savedialog1.FileName);
rewrite(f);
str:=inttostr(datamodule2.ADOQuery2.RecordCount);
writeln(f,str);//写入记录个数
str:='';
str:=inttostr(datamodule2.ADOQuery2.FieldCount);
writeln(f,str);//写入字段个数
str:='';
while not datamodule2.ADOQuery2.Eof do
begin
for i:=0 to datamodule2.ADOQuery2.FieldCount-1 do
begin
str:=datamodule2.ADOQuery2.Fields.AsString;
writeln(f,str);
end;
datamodule2.ADOQuery2.Next;
end;
closefile(f);
end

end;
现在问题是:如何将这个导出的文件数据导入到对应的数据库表中??????


 
因为你是用writeln 写的,可以用readln读取,然后按字段顺序读取,
insert table()
parambyname()
execsql;
把读取值赋进去就行了
 
你是一条记录一条记录自己写到文件中的,导入时也只有一条一条自己处理了!
写入时你可以等一些规则,如一行为一条记录,字段与字段之间用“,”格开,
这样写入时就容易处理了。
其实你可以直接用adodataset的loadfromfile,savetofile实现这个功能
但是要注意loadfromfile 的文件一定要是savetofile的文件才不会出错!
 
to ugvanxk
我也想过用insert语句,但这样有一个很大的问题:就是如何处理values(:a,:b,:c)这个
语句?因为每个表的字段值不一定相同,比如:这个表有5过字段,我就要从备份文件中
读取5次,然后values(:a,:b,:c,:d,:e),但如果下一个表却有8个字段,那就恢复不了,
因为这里的values(:a,:b,:c,:d,:e)语句只有5个参数,而不是8个参数!!!
简单的说是不能动态改变values语句的参数!!!,大家有什么好方法????
 
同意book523, 的说法,
如果你用DB2的话,
很简单,可以直接import 文本,不过格式跟你的不太一样,
 
to Fanny501 and book523:
请问兄弟
用adodataset的loadfromfile不能将数据还原到数据表啊,这样恢复数据有
什么用???????
 
后退
顶部