如无新的重大Bug发现,28日的RC版将以现在的版本为基础发布。
最新源码请到项目地址下载。
东边的,西边的,南边的,北边的,别唠了,现在讲课!
由于本人Delphi水平实在有限,写的XML解析单元效率无法满足自己的要求,所以呢花费了两天的时间,重新用C++ Builder编写了一个XML解析器,这个解析器被命名为QXML,解析速度在我个人的笔记本上,超过了14MB/S,可以说已经达到了自己的要求,所以呢,在新版里Delphi写的XML解析单元已经被替换掉了,改成用QXML.DLL提供接口函数,由Delphi进行调用。测试的结果,加载近4M的XML文件,用TADODataSet耗时约905秒,用新的解析单元配合TMemoryDataset,耗时577ms,快了很多有没有!
QXML的源码和QXML.DLL也已经上传到项目里了,有兴趣的朋友可以持续改进。
相比Beta2版,改进内容如下:
[Delphi]
var
FDataSet:TMemoryDataSet;
begin
FDataSet=new TMemoryDataSet(nil);
FDataSet.FieldDefs.BeginUpdate;
FDataSet.FieldDefs.Add('Id',ftInteger);
FDataSet.FieldDefs.Add('Name',ftString,128);
FDataSet.FieldDefs.Add('Sex',ftBoolean);
FDataSet.FieldDefs.Add('Age',ftSmallint);
FDataSet.FieldDefs.Add('Comment',ftMemo);
FDataSet.FieldDefs.EndUpdate;
FDataSet.CreateDataSet;
....
FDataSet.Free;
...
[C++]
TMemoryDataSet *FDataSet;
FDataSet=new TMemoryDataSet(NULL);
FDataSet->FieldDefs->BeginUpdate();
FDataSet->FieldDefs->Add("Id",ftInteger);
FDataSet->FieldDefs->Add("Name",ftString,128);
FDataSet->FieldDefs->Add("Sex",ftBoolean);
FDataSet->FieldDefs->Add("Age",ftSmallint);
FDataSet->FieldDefs->Add("Comment",ftMemo);
FDataSet->FieldDefs->EndUpdate();
FDataSet->CreateDataSet();
....
delete FDataSet;
TMemoryDataSet对数据内容进行排序的算法很简单,只需要设置其Sort属性即可,如按Name字段降序,然后按Age字段升序排序:
[Delphi]
DataSet.Sort:='Name desc,Age';
[C++]
DataSet->Sort="Name desc,Age";
就可以了。
[注意]
Sort属性在关闭数据集对象时并不象ADO一样自动清除,以方便下次打开数据集内容后直接使用已有排序规则。如果后打开的数据集字段不存在,可能会抛出错误,此时应先手动设置排序规则为空字符串。
[注]此功能要求为1.0 Beta 3以上版本支持。
DB1为数据库1的连接,DB2为数据库2的连接,DataSet为TMemoryDataSet对象,我们将DB1中abc表的数据要全部插入到DB2的abc表中。
[Delphi]
if DB1.OpenDataSet(DataSet,'select * from abc') then
begin
DataSet.MarkStatus(usInserted,true);
DataSet.ApplyChanges(DB2);
end;
[C++ Builder]
if(DB1->OpenDataSet(DataSet,"select * from abc"))
{
DataSet->MarkStatus(usInserted,true);
DataSet->ApplyChanges(DB2);
}
当然,也可以插入到不同的表中,但您需要手动更改FieldExts的每个字段对应的TableName属,如果要更改字段,那么修改Base属性。如插入到bcd表中,只需要在ApplyChanges之间加一个循环:... read more
简单做了一个测试,20万条记录速度快了约7.3倍以上,后单独测试了下,快的程序不一,一般是6.4~8.5倍之间吧。
QDAC的目标是为大家提供一个优秀的数据库访问组件,作为一个开源的数据库访问组件,目前1.0的版本主要支持开源的sqlite和Postgre SQL。
目前,QDAC的开发正在继续中,欢迎大家反馈问题,我会及时跟进,修正发现的问题。如无意外,Beta3将于2012年7月21日左右发布,欢迎大家支持测试。