使用内存数据库/数据集以提高执行速度
2016-07-27 08:40
811 查看
http://wiki.lazarus.freepascal.org/How_to_write_in-memory_database_applications_in_Lazarus/FPC#TBufDataSet
如果你需要一个快速、单用户,无需事务管理,那就用MemDataset。
一些好处:
快速。因为都是在内存中干活,除非明确要求,数据不会与保存到硬盘。
无需外部dll文件,不需要服务器安装。
代码适合多平台。
容易维护。
加载csv文件:
procedure LoadFromCsv(DataSet:TDataSet);
var
vFieldCount:Integer;
I:Integer;
begin
try
//Assign SdfDataSetTemporary
with SdfDataSetTemporary do begin
Active:=False;
ClearFields;
FileName:=DataSet.Name+'.txt';
FirstLineAsSchema:=True;
Active:=True;
//Determine number of fields
vFieldCount:=FieldDefs.Count;
end;
//Iterate through SdfDataSetTemporary and insert records into MemDataSet
SdfDataSetTemporary.First;
while not SdfDataSetTemporary.EOF do begin
DataSet.Append;
//Iterate through FieldDefs
for I:=0 to vFieldCount-1 do begin
try
DataSet.Fields[I].Value:=SdfDataSetTemporary.Fields[I].Value;
except
on E:Exception do begin
MemoMessages.Append(TimeToStr(Now())+' Error while setting value for field: '
+DataSet.Name+'.'+DataSet.Fields[I].Name +'. '+E.Message);
end;
end;
end;
try
DataSet.Post;
except
on E:Exception do begin
MemoMessages.Append(TimeToStr(Now())+' Error while posting record to table: '
+DataSet.Name+'.'+E.Message);
end;
end;
SdfDataSetTemporary.Next;
end;
finally
SdfDataSetTemporary.Active:=False;
SdfDataSetTemporary.ClearFields;
end;
end;
如果你需要一个快速、单用户,无需事务管理,那就用MemDataset。
一些好处:
快速。因为都是在内存中干活,除非明确要求,数据不会与保存到硬盘。
无需外部dll文件,不需要服务器安装。
代码适合多平台。
容易维护。
加载csv文件:
procedure LoadFromCsv(DataSet:TDataSet);
var
vFieldCount:Integer;
I:Integer;
begin
try
//Assign SdfDataSetTemporary
with SdfDataSetTemporary do begin
Active:=False;
ClearFields;
FileName:=DataSet.Name+'.txt';
FirstLineAsSchema:=True;
Active:=True;
//Determine number of fields
vFieldCount:=FieldDefs.Count;
end;
//Iterate through SdfDataSetTemporary and insert records into MemDataSet
SdfDataSetTemporary.First;
while not SdfDataSetTemporary.EOF do begin
DataSet.Append;
//Iterate through FieldDefs
for I:=0 to vFieldCount-1 do begin
try
DataSet.Fields[I].Value:=SdfDataSetTemporary.Fields[I].Value;
except
on E:Exception do begin
MemoMessages.Append(TimeToStr(Now())+' Error while setting value for field: '
+DataSet.Name+'.'+DataSet.Fields[I].Name +'. '+E.Message);
end;
end;
end;
try
DataSet.Post;
except
on E:Exception do begin
MemoMessages.Append(TimeToStr(Now())+' Error while posting record to table: '
+DataSet.Name+'.'+E.Message);
end;
end;
SdfDataSetTemporary.Next;
end;
finally
SdfDataSetTemporary.Active:=False;
SdfDataSetTemporary.ClearFields;
end;
end;
相关文章推荐
- 用lazarus开发Linux daemon程序及编写启动脚步
- Lazarus 1.6win64 + 3.0 FPC 编码问题
- lazarus:一个字体引擎例子
- lazarus实现dbgrid中的lookup字段好简单,随便点几下就实现了
- typhon例子:cs,bufDataset(类似delphi的clientDataset),josn解析器
- VC/C#调用lazarus写的dll
- 在Mac OS X上安装使用lazarus 1.6.4
- 小的以及大的Typhon IDE
- lazarus+firebird,用ZSQLProcessor1控件创建触发器(TRIGGER)
- lazarus:用分隔符分割字符串
- BGRABitmap图像操作12:另一种酷炫阴影
- BGRABitmap图像操作12:四行不同效果文本输出
- BGRABitmap图像操作12:渐变文本颜色
- BGRABitmap图像操作12:文本输出带阴影
- BGRABitmap图像操作12:文本自动换行
- BGRABitmap图像操作12:文本输出角度
- BGRABitmap图像操作12:文本操作功能
- 制作基于数据库的图表
- 小猫统计:完善了查询字段
- 解决Lazarus中窗体不能正确最大化显示的问题