如何多线程读取文件到Access? ( 积分: 200 )

  • 主题发起人 主题发起人 飞舞的尘埃
  • 开始时间 开始时间

飞舞的尘埃

Unregistered / Unconfirmed
GUEST, unregistred user!
一个题目想请教
有一个文本文件,100M左右,内容规则如:
aa bb cc dd
...
...
想用多线程技术,将其读到Access数据表中,希望大家能够帮忙,没有接触过多线程编程.
 
自己提一下,希望不要沉底!
 
直接导入数据库就行了,用不着多线程,这种情况即使用了多线程速度也不会提高。
 
但倒入的速度太慢了,能有快的方法么?
 
用FileStream从文件读入,用多线程从FileStream读数据。
 
腾云驾雾超级服务器正式免费推出!无须任何维护,可让您在1分钟之内建立属于自己的网站!
腾云驾雾超级服务器程序既是一个 webserver 又是一个网站。超级服务器的主要目的是让运行这个程序的人,立即拥有一个属于自己
的网站,理论上 腾云驾雾超级服务器 可以将世界上任何一个网站变成运行本服务器程序的那台电脑的网站!
同时您只要拥有一个全世界唯一的IP地址,那么你就可以让全世界的人来访问你的网站了!当然您要是有一个域名绑定您的IP,那就更
爽了!
腾云驾雾超级服务器程的最大优点是:
1、可以让你在一分钟之内完全拥有一个属于您自己的网站。(快速)
2、您拥有的这个网站将无需要任何维护!(省事)
3、您只要申请 google 的 在线广告 AdSense 就可以开始挣钱了。(挣钱)
4、只要在 参数配置文件 tengyunjiawuserver.ini 中填写 您 google AdSense 的代码编码就可以开始挣钱了。
5、腾云驾雾超级服务器属于纯绿色软件,无需安装注册!(绿色环保)
6、腾云驾雾超级服务器即是一个 webserver 又是一个网站,所以只占用大约 1.5MB大小的空间!(不占地)
理论上 腾云驾雾超级服务器 可以将世界上任何一个网站变成运行本服务器程序的那台电脑的网站!
超级服务器 奥运版
下载地址1:http://www.tengyunjaiwu.com/download/tyjw_aoyun.rar
下载地址2:http://www.600bbs.com/t.rar
超级服务器 baidu 版
下载地址1:http://www.tengyunjaiwu.com/download/tyjw_baidu.rar
下载地址2:http://www.600bbs.com/chao.rar
腾云驾雾超级服务器即是一个 webserver 又是一个网站,如果您的电脑正在运行 Apache 或 IIS 或 Tomcat 请先关掉!
有任何问题请联系我: http://www.tengyunjiawu.com
可以定制啊,你看上哪个网站了,告诉我,我帮你做那个网站的版本啊!
腾云驾雾超级服务器推出 google 版本,端口,广告可完全自定义
超级服务器 google 版
下载地址1:http://www.tengyunjiawu.com/download/tyjw_google.rar
你可以看看 google 版本的 DEMO (本人带宽只有 1MB,速度可能慢了点,大家多谅解啊!)
http://www.tengyunjiawu.com:8080
这个版本也叫气死 google 不偿命
做的还不是很完善,请大家多批评指教!
 
ander5115:
能给我给典型的例子么!谢谢!
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SyncObjs;
type
TForm1 = class(TForm)
Button1 : TButton;
Memo1 : TMemo;
Memo2 : TMemo;
procedure FormCreate(Sender : TObject);
procedure Button1Click(Sender : TObject);
procedure FormClose(Sender : TObject;
var Action : TCloseAction);
Private
{ Private declarations }
Public
{ Public declarations }
fsFileStream : TFileStream;
ReadStr : string;
FileLine : string;
iReadLen : integer;
FCS : TCriticalSection;
function GetDataLine : string;
end;

TMyThread = class(TThread)
FMemo : TMemo;
Public
constructor Create(AMemo : TMemo);
procedure Execute;
Override;
end;

var
Form1 : TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender : TObject);
begin
fsFileStream := TFileStream.Create('D:/1', fmOpenRead or
fmSharedenyNone);
FCS := TCriticalSection.Create;
end;

function TForm1.GetDataLine : string;
var
iPos : integer;
n : integer;
begin
FCS.Enter;
try
while (Pos(#13#10, FileLine) = 0) and (fsFileStream.Size - iReadLen > 0)
do
begin
SetLength(ReadStr, 30);
ZeroMemory(@ReadStr[1], 30);
if (fsFileStream.Size - iReadLen) >= 30 then
begin
fsFileStream.ReadBuffer(ReadStr[1], 30);
iReadLen := iReadLen + 30;
end
else
begin
n := fsFileStream.Size - iReadLen;
fsFileStream.ReadBuffer(ReadStr[1], n);
iReadLen := fsFileStream.Size;
end;
FileLine := FileLine + ReadStr;
end;
iPos := Pos(#13#10, FileLine);
Result := Copy(FileLine, 1, iPos - 1);
Delete(FileLine, 1, iPos + 1);
finally
FCS.Leave
end;
end;

procedure TForm1.Button1Click(Sender : TObject);
begin
TMyThread.Create(Memo1);
TMyThread.Create(Memo2);
end;

{ TMyThread }
constructor TMyThread.Create(AMemo : TMemo);
begin
inherited Create(False);
FMemo := AMemo;
end;
{ TMyThread.Create }
procedure TMyThread.Execute;
var
s : string;
begin
s := Form1.GetDataLine;
while s <> ''do
begin
FMemo.Lines.Add(s);
s := Form1.GetDataLine;
end;
end;

procedure TForm1.FormClose(Sender : TObject;
var Action : TCloseAction);
begin
FCS.Free;
fsFileStream.Free;
end;

end.
临时写的,不知道有没有什么问题。Form1.GetDataLine得出来的就是文本文件的每一行数据了。
 
试运行了。很好。学习!!!
 
后退
顶部