用ADODataSet.LoadFromFile加载了数据,要将这些数据写入数据库,有什么方法。
我要实现的是一个类似远程查询的功能,但因为不能开发数据库端口,所以想通过自己开的端口来传输查询结果。
先是用ADOQuery执行一条SQL查询,然后用ADOQuery.SaveToFile,将查询结果保存到文件。将该文件传送给远程,远程收到后,用ADODataSet.LoadFromFile加载数据(ADOQuery也可以的),然后将这些数据写入数据表。
插入到数据表中的代码是这样的
ADOQuery.SQL.Add( 'select * from TempTable '); // 打开这张表
ADOQuery.Open;
ADODataSet.LoadFromFile( 'C:\数据文件.tmp ');
ADODataSet.First;
while not ADODataSet.Eof do begin
ADOQuery.Append;
ADOQuery.FieldByName( ' ').AsString:= ADODataSet.FieldByName( ' ').AsString;
//.....其他字段
ADOQuery.Post;
ADODataSet.Next;
end;
但这样做效率很低,而且CPU占用很大,记录条数一多,就往往会有好长时间都是100的CPU。
请问有没有更加简便高效的方法?
[解决办法]
不要每一条都存呀~
可以批量存入
[解决办法]
全部数据加入QUERY,放到最后再POST,这样应该会效率一点
while not ADODataSet.Eof do begin
ADOQuery.Append;
ADOQuery.FieldByName( ' ').AsString:= ADODataSet.FieldByName( ' ').AsString;
//.....其他字段
ADODataSet.Next;
end;
ADOQuery.Post;
[解决办法]
里面的方法试过很多,我也做过,我是用线程完成的,成批的执行SQL语句。
效率会快点
有人说可以用CLIENTDATASET,但我没有成功。
[解决办法]
txt导入SQLServer
select * from OpenRowset( 'MSDASQL ', 'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=c:\temp; ', 'select * from aaaa.txt ')
原文
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966