导出txt
有一张表的中数据,至少100000 条或是1000000或是更多,要导出到txt,
用什么方法能使导出时效率最高,原将数据写入Memo,然后Memo.lines.savetotxt这样速度很太慢,导出时程序就像死在那一样。
[解决办法]
方法1.ODBC数据源支持.txt格式的.
在控制面板DBE Admisitrate新建一个 "Microsoft Text Driver (*.txt; * "的数据源.
..............此处没用过,省略500字.^_^
方法2.用ClientDataSet.SaveToFile保存成XML文件.
另外,你用的方法只是多写了一步memo,这没必要,可以直接用File.writeLine方法逐行写.
写硬盘本来就是很慢的事情,建议你用进度调配合application.ProcessMessages,
我都是这么坐的.
[解决办法]
cmdtxt:= 'bcp "SELECT * FROM b " queryout c:\Authors.txt -c -S localhost -U sa -P ';
// SELECT * FROM b 可以是任何可以获得记录集的脚本
// c:\Authors.tx 输出文件
//数据库
//sa 用户
//-p后面是密码
with tstringlist.Create do
begin
add(cmdtxt);
savetofile( 'a.bat ');
free;
end;
winexec( 'a.bat ',0);
deletefile( 'a.bat ');
[解决办法]
/*--实现数据导入/导出的存储过程
可以实现导入/导出 指定表 到文本文件
支持自定义行/列分隔符
--邹建 2003.07(引用请保留此信息)--*/
/*--调用示例
导出调用示例
--导出指定表,这里指定导出表:地区资料
exec file2table 'zj ', ' ', ' ', 'c:\zj.txt ', 'xzkh_new..地区资料 ',@rowsplit= ', '
导入调用示例
--导入指定表,这里指定导入表:地区资料
exec file2table 'zj ', ' ', ' ', 'c:\zj.txt ', 'xzkh_sa..地区资料 ',0
--*/
if exists(select 1 from sysobjects where name= 'File2Table ' and objectproperty(id, 'IsProcedure ')=1)
drop procedure File2Table
go
create procedure File2Table
@servername varchar(200) --服务器名
,@username varchar(200) --用户名,如果用NT验证方式,则为空 ' '
,@password varchar(200) --密码
,@filename varchar(1000) --目录名+文件名
,@tbname varchar(500)= ' ' --数据库..表名
,@isout bit=1 --1为导出(默认),0为导入
,@fdsplit varchar(10)= '\t ' --字段分隔符,默认为制表符
,@rowsplit varchar(10)= '\n ' --记录分隔符,默认为回车符
as
declare @sql varchar(8000)
set @sql= 'bcp " '+@tbname
+case when @isout=1 then ' " out ' else ' " in ' end
+ ' " '+@filename+ ' " /c ' + ' /S " '+@servername
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')+ ' " '
+ ' /t " '+@fdsplit+ ' " '
+ ' /r " '+@rowsplit+ ' " '
exec master..xp_cmdshell @sql
go
[解决办法]
1.用bcp
2.用ADO直接连接txt,连接字符串中Extended propert=text即可~
[解决办法]
用三方控件dbgrideh应该快一点
[解决办法]
niechunlai021(): dbgrideh 导出 100000 条或是1000000或是更多 也是很慢的。
[解决办法]
用 47522341(睡到8:30) 给的方法
[解决办法]
我也遇到这样的问题 ,帮您顶
希望您能早日解决,也告诉我一下
[解决办法]
47522341(睡到8:30) 的代码如果能解析一下就好了 :)
[解决办法]
47522341(睡到8:30) 的代码用了一下,很快!
推荐!!
10W 条数据,用了4秒就ok了!