Menu

QDAC / Blog: Recent posts

2012-7-24 日构建版本说明

  • 新增 霁月当楼 改写的Delphi演示程序,现在CB和Delphi的演示程序都已完成,更高级的功能演示将在以后提供。
  • 新增ThreadSort单元,使用IntroSort算法替换原来的QuickSort算法,并支持多线程并行排序,以加快排序速度
  • 新增mmdsworkers单元,为多线程排序提供线程调度支持,下一个版本将过滤部分的代码也移植使用该单元的函数
  • 恢复了了上个构建中注释掉的QXML.DLL加载代码,以恢复正常的XML支持。

如无新的重大Bug发现,28日的RC版将以现在的版本为基础发布。

最新源码请到项目地址下载。

Posted by swish 2012-07-24

RC版中XML解析过程已被替换为QXML

东边的,西边的,南边的,北边的,别唠了,现在讲课!
由于本人Delphi水平实在有限,写的XML解析单元效率无法满足自己的要求,所以呢花费了两天的时间,重新用C++ Builder编写了一个XML解析器,这个解析器被命名为QXML,解析速度在我个人的笔记本上,超过了14MB/S,可以说已经达到了自己的要求,所以呢,在新版里Delphi写的XML解析单元已经被替换掉了,改成用QXML.DLL提供接口函数,由Delphi进行调用。测试的结果,加载近4M的XML文件,用TADODataSet耗时约905秒,用新的解析单元配合TMemoryDataset,耗时577ms,快了很多有没有!
QXML的源码和QXML.DLL也已经上传到项目里了,有兴趣的朋友可以持续改进。

Posted by swish 2012-07-23

QDAC 1.0 Beta 3版发布说明

相比Beta2版,改进内容如下:

  • 优化了过滤操作,在多处理器的计算机上,使用多线程来完成过滤
  • 修正了设置排序规则后调用CreateDataSet时,会出现访问无效地址的问题
  • 修正了TRecordValue释放时,发生内存泄露的问题
  • 修正了过滤时存在内存泄露的问题
  • 修正了TMemoryDataSet和TMemoryDataProvider释放时存在的内存泄露,感谢 霁月当楼 报告此Bug
  • 修正了TMemoryBlobStream释放时可能出现的访问异常
  • 修改SStreamCanLoadData为SStreamCantLoadData
  • 增加以下元数据判断函数:TableExists,ViewExists,FunctionExists,ProcedureExists,TriggerExists,ColumnExists
  • 增加RecordExists函数,执行指定的脚本,如果返回结果集则返回true,否则返回False
  • 增加MarkStatus函数来批量修改记录的修改状态
  • 连接对象新增BeforeConnect/AfterConnected/BeforeDisconnect/AfterDisconnect事件... read more
Posted by swish 2012-07-20

QDAC 创建内存数据集

[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;

Posted by swish 2012-07-20

对内存数据集内容进行排序

TMemoryDataSet对数据内容进行排序的算法很简单,只需要设置其Sort属性即可,如按Name字段降序,然后按Age字段升序排序:

[Delphi]

DataSet.Sort:='Name desc,Age';

[C++]

DataSet->Sort="Name desc,Age";

就可以了。

[注意]

Sort属性在关闭数据集对象时并不象ADO一样自动清除,以方便下次打开数据集内容后直接使用已有排序规则。如果后打开的数据集字段不存在,可能会抛出错误,此时应先手动设置排序规则为空字符串。
Posted by swish 2012-07-20

在不同的数据库之间提交数据

[注]此功能要求为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

Posted by swish 2012-07-20

插入20万条记录时,与TADODataSet速度对比

简单做了一个测试,20万条记录速度快了约7.3倍以上,后单独测试了下,快的程序不一,一般是6.4~8.5倍之间吧。

Posted by swish 2012-07-19

今日上传源码修正一个网友报告的问题和自己测试发现的问题

  • 修正了TMemoryDataSet和TMemoryDataProvider释放时存在的内存泄露
  • 修正了TMemoryBlobStream释放时可能出现的访问异常
Posted by swish 2012-07-19

源码终于回来了

今天再次提交源码,终于恢复正常了!

Posted by swish 2012-07-19

Sourceforge出问题了?

我提交的源码看不到了呢?明明客户端显示提交成功了!

Posted by swish 2012-07-18

QDAC Beta 3将在21号左右发布

QDAC的目标是为大家提供一个优秀的数据库访问组件,作为一个开源的数据库访问组件,目前1.0的版本主要支持开源的sqlite和Postgre SQL。
目前,QDAC的开发正在继续中,欢迎大家反馈问题,我会及时跟进,修正发现的问题。如无意外,Beta3将于2012年7月21日左右发布,欢迎大家支持测试。

Posted by swish 2012-07-18

QDAC 1.0 Beta 2

  • 修正了PostgreSQL开启事务时,如果设置事务隔离级别,存在的问题
  • 修正了PostgreSQL回滚事务时,Rollback错误拼写成Bollback的问题
  • 修正了设置组件Connected为true时加载可能出错的问题
  • 修正了PostgreSQL提交二进制大对象数据出错的问题
  • 修正了TMemoryDataSet对于插入记录提交时未正确触发提交到数据库操作的问题
  • 修正了SQLite提交事务和应用变更时发现的Bug
  • SQLite 3 加入数据库加密支持,TSQLiteProvider提供了Password属性(要求使用支持加密的sqlite3.dll)
  • 加入计算指定字段列表当前记录值的MD5或SHA1摘要的函数
  • 加入EnumValues方法来枚举字段的所有取值
  • 加入AcquireDataSet和ReleaseDataSet方法,以减少重复创建与释放对象的开销
Posted by swish 2012-07-16
MongoDB Logo MongoDB