导航:
论坛 -> 发布控件
斑竹:liumazi,ruralboy
作者:
★☆☆☆☆
-
普通会员
2012/7/6 9:52:59
标题:
QDAC A3完整源码和示例
浏览:13255
楼主:
QDAC(Qucik Data Access Component) Alpha 3
这个是QDAC的完整源码包,包括组件的源码和C++ Builder的示例代码,以及编译后可以直接执行的二进制程序,但由于是内测版本,暂时还不包括注册到面板上的支持,只能动态创建对象。
系统特性:
1、TMemoryDataSet提供内存数据集对象,支持以下特性:
√ 基于TDataSet继承下来的各种方法和属性;
√ 数据集之间相互克隆(只读或读写);
√ 数据集内容复制(原始内容,当前内容,变更内容,排序结果,过滤结果);
√ 数据集之间进行集合运算(交、并、差)
√ 数据集任意非计算字段的排序、过滤(可扩展支持正则表达式)
√ 保存数据到CSV、XML和原生的MDS,压缩的MDZ格式,并支持反向加载;
√ 支持应用变更结果到不同的连接数据库;
√ 已变更内容可以撤消到上次应用变更后(或原始数据)状态;
√ 通过TMemoryDataProvider的各个子类实现对PostgreSQL数据库的访问,根据需要,可以加入更多数据库支持;
√ 更快的速度,打开数据速度比一般的数据库接口更快(Unidac/ado等)
2、TMemoryDataConverter提供数据的格式转换支持,包括以下子类:
√ TTextDataConverter 提供CSV格式的文本文件的保存和加载(只支持当前有效内容)
√ TMDSDataConverter 提供原生的MDS格式的保存及加载(包含变更信息)
√ TMDZDataConverter 提供压缩的原生格式的保存及加载(TMDSDataConverter的压缩版本)
√ TXMLDataConverter 提供ADO兼容的XML格式的保存及加载(包含变更信息)
√ 其它类型的格式,可以继承TMemoryDataConverter实现
3、TMemoryDataProvider提供与数据库的统一访问接口支持,目前仅包含TPgSQLDataProvider
√ 支持打开数据集、执行SQL脚本及事务控制等常规操作;
√ 支持将SQL脚本返回的结果集直接保存到流中,格式支持:CSV、XML和原生的MDS,压缩的MDZ格式,其它格式
支持需通过对应的TMemoryDataConverter的子类实现;
√ 支持类型和架构缓存,更快的获取数据库相关架
√ 支持通过连接字符串、连接参数打开连接;
主要改进:
2012.7.6 α 3 内测版
* 修正了发现的Invalid field size问题
+ 加入了数据集之间的集合运算,交、并、差都支持!
2012.7.5 α 2 内测版
* 修正了复制原始数据时,复制了修改后的数据的问题
* 修正了连接字符串解析错误
* 修正了应用更新或取消更新后的由于引用计数错误,造成记录缓冲区释放所引发的AV错误
* 修正了克隆时,克隆后的数据集变更时,没有及时更新源的缓冲区的问题
+ 过滤条件表达式新增不等于(<>或者!=)和不包含(nlike)的支持
下载地址:
http://vdisk.weibo.com/s/8aA8j
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 9:55:20
1楼:
1.Formats.exe
这个例子演示了如何导入或导出数据到多种格式:
a.MDS:内部数据格式,原生的,速度的!
b.MDZ:MDS格式的压缩版本,适合在多层程序通过互联网传送.
c.XML:ADO兼容的XML格式,不像UniDAC,你不仅能导出XML,还能导入并更新到数据库。
d.TXT/CSV:标准的TXT和CSV格式支持,受限于格式,不能保存变更信息.
如果你希望支持新的格式,可以联系我.
当然,导出到文件的时候,你可以只导出发生变动的数据。是不是感觉特别有用?
贴图:
此帖子包含附件:
大小:30.3K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 9:56:36
2楼:
导出的一个ADO兼容的XML文件,注意它还支持导入!
此帖子包含附件:
大小:69.7K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 9:57:52
3楼:
这个例子演示了如何克隆数据,非只读的克隆在一个修改后,另一个会同步发生变更。
如果你用过ADO组件,应该已经知道克隆是怎么回事了:
此帖子包含附件:
大小:30.8K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 9:59:04
4楼:
这个例子演示了QDAC组件特有的一个功能!你可以很简单的复制源数据集的内容到新的数据集!在许多应用程序中,这意味着你不需要传输没必要的额外数据到另一个程序,如只交换发生变更的数据。
此帖子包含附件:
大小:44.3K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 10:00:28
5楼:
当前你所看到的数据集控件中英气是最强大的过滤了,在表达式中你可以使用:
= 等于
<> 不等于
!= 不等于
> 大于
>= 大于等于
<= 小于等于
* 包含
like 包含
nlike 不包含(特有)
~ 正则匹配(特有)
表达式可以用'('和')'分组,表达式间可以用'and'和'or'关联。
此帖子包含附件:
大小:35.2K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 10:01:32
6楼:
集合运行,并、交、差!
此帖子包含附件:
大小:23.0K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 10:04:00
7楼:
客户端排序
此帖子包含附件:
大小:33.5K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 10:08:00
8楼:
连接到PostgresSQL数据库,目前最快的PostgresSQL数据库访问速度。
此帖子包含附件:
大小:32.7K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
hbug (hbug)
★☆☆☆☆
-
普通会员
2012/7/6 12:05:28
9楼:
说的这么好,想下一个,还得注册新浪微薄,谁能转到FTP上呢?
----------------------------------------------
专业提供人力资源软件、指纹考勤软件、POS进销存软件、酒店餐饮软件
http://www.winsoftcn.com
作者:
▲▲▲▲▲
-
注册会员
2012/7/6 12:54:42
10楼:
无法下载,好心的朋友,请伸出援手!
----------------------------------------------
人间冷暖情为贵,世事沧桑欲坚强。
作者:
★☆☆☆☆
-
普通会员
2012/7/6 13:42:30
11楼:
微盘可以下载呀~~~
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
doremi (天籁之音)
▲▲▲▲△
-
注册会员
2012/7/6 15:22:25
12楼:
楼主是分享软件还是替新浪拉微波注册用户呢?
----------------------------------------------
-
作者:
★☆☆☆☆
-
普通会员
2012/7/6 16:09:16
13楼:
呵呵,这个是我自己写的,分享给各位的。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/6 17:08:53
14楼:
能不能,支持SQLite或MSSQL2000.。。这样便于测试
已经上传Ftp
----------------------------------------------
-
作者:
▲▲▲▲▲
-
注册会员
2012/7/6 17:11:55
15楼:
To 楼主,不是不能下载,是要注册时,提示系统忙碌…试了n遍,依然如此(可能是所在地的关系),。恳请楼主,方便的话可否将它放上盒子或传入我的邮箱,辛苦您了!
e-mail:g6101@ms19.hinet.net
----------------------------------------------
人间冷暖情为贵,世事沧桑欲坚强。
作者:
▲▲▲▲▲
-
注册会员
2012/7/6 18:31:43
16楼:
已下載,感謝樓主及14樓的朋友。
----------------------------------------------
人间冷暖情为贵,世事沧桑欲坚强。
作者:
xinjian214 (xinjian214)
★☆☆☆☆
-
普通会员
2012/7/6 19:11:04
17楼:
lz你是个好人
----------------------------------------------
-
作者:
★☆☆☆☆
-
普通会员
2012/7/6 19:40:44
18楼:
已加入sqlite3支持,明天发布beta 1版
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
zhlmxh (梦想成真)
★☆☆☆☆
-
盒子活跃会员
2012/7/6 22:35:15
19楼:
不错啊,支持国产数据库访问组件,如果功能强大,可以赞助,以资支持
----------------------------------------------
-
作者:
zhlmxh (梦想成真)
★☆☆☆☆
-
盒子活跃会员
2012/7/6 22:37:33
20楼:
希望作者能够坚持做下去,而不是昙花一现
----------------------------------------------
-
作者:
james_ (james_)
★☆☆☆☆
-
盒子活跃会员
2012/7/6 23:41:14
21楼:
tks
----------------------------------------------
-
作者:
★☆☆☆☆
-
普通会员
2012/7/7 7:30:32
22楼:
最新版本:
2012.7.7 β 1 公测版
* 修正了使用连接参数时,用户口令不正确的问题
+ 新增SQLite3的数据库程序支持
+ 新增BatchMode属性(默认为true),以便切换批量更新模式和简单模式
+ 新增CommandText属性,以简化数据库脚本的设置
+ 增加了C++ Builder 2007和Delphi 2007的组件安装包,可以正常安装到组件面板(我目前只使用RAD Studio 2007,所以其它的组件包目前是没有的)
下载链接:
http://vdisk.weibo.com/s/8e17a
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/7 8:40:54
23楼:
搬运工。。最新版,已经上传FTP
----------------------------------------------
-
作者:
★☆☆☆☆
-
普通会员
2012/7/7 9:27:49
24楼:
zhlmxh (梦想成真):不错啊,支持国产数据库访问组件,如果功能强大,可以赞助,以资支持
如果有赞助当然更好了~~~,我最喜欢小钱钱~~~
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/7 9:29:06
25楼:
另外自己新建了个C++ Builder的微群,有兴趣的朋友加吧(这个是推广了):
http://q.weibo.com/1085250
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/7 10:03:58
26楼:
QDAC Beta1发现了一个SQLite驱动在应用变更和提交事务时的Bug,已经修复,将随下一个版本一起发布。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/7 11:01:57
27楼:
QDAC PostgreSQL与UniDAC速度对比,快了约48%!
测试代码:
procedure TForm4.Button16Click(Sender: TObject);
var
ACmdText:AnsiString;
T,T1,T2:DWORD;
I:Integer;
begin
if FProvider.Connected then
begin
T:=GetTickCount;
if not FProvider.OpenDataSet(FDataSet,Memo1.Lines.Text) then
ShowMessage(FProvider.LastErrorMsg);
T1:=GetTickCount-T;
T:=GetTickCount;
UniQuery1.SQL.Assign(Memo1.Lines);
UniQuery1.Active:=True;
T2:=GetTickCount-T;
ShowMessage(Format('Total records: %d '#13#10'TPgSQLProvider used time:%dms'#13#10'UniDAc used time:%dms',
[FDataSet.RecordCount,T1,T2]));
Caption:=Caption+',My:'+IntToStr(T2);
end;
ResizeGrids;
end;
此帖子包含附件:
大小:85.4K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
ww1000 (Delphis)
▲▲▲▲△
-
注册会员
2012/7/7 14:11:29
28楼:
支持啊...
不过如果测试pg..不要用unidac.相当于ado+odbc.
用 pgdac 试试
----------------------------------------------
阳光总在
作者:
iny (盒子)
★☆☆☆☆
-
盒子活跃会员
2012/7/7 14:26:24
29楼:
希望多一些主流数据库的测试,比如mssql、oracle
----------------------------------------------
-
作者:
★☆☆☆☆
-
盒子活跃会员
2012/7/7 15:20:54
30楼:
目前的SQLITE和PG不太够,希望楼主加一些主流的数据库:MSSQL/ORACLE/Firebird
/DB2等一些数据库支持!
----------------------------------------------
不喧哗 自有声 心静 思远 志行千里
作者:
★☆☆☆☆
-
普通会员
2012/7/7 15:53:41
31楼:
回复28楼ww1000:
Unidac访问PG是直接在协议层实现的,而不是通过AOD+ODBC。所以速度实际上很快的了。
回复 iny (盒子)和30楼tintin1943:
实际上可以直接从TMemoryDataProvider上继承实现下来对任意数据库的支持,我的源码里提供了SQLite和PostgresSQL的支持,砖已经抛下去了,希望能引上玉来!毕竟个人精力有限,得养家,所以更多数据库的支持,只能一步步来,只不过我首先做的是支持SQLite和PostgreSQL.
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/7 16:16:14
32楼:
QDAC如何支持新的数据库?
QDAC要支持新的数据库,需要从TMemoryDataProvider继承一个子类实现,以系统实现的TSQLiteProvider为例子我们做个全面的说明。首先看声明:
TSQLiteProvider=class(TMemoryDataProvider)
protected
FPassword: AnsiString;
FDatabase: WideString;
FDLLPath:WideString;
FDLLHandle:THandle;
procedure DestroyHandle(AHandle:THandle);override;
function GetRecordCount(AHandle:THandle):Integer;override;
function GetFieldCount(AHandle:THandle):Integer;override;
function GetFieldDef(AHandle:THandle;AIndex:Integer;var ADef:TMDSField):Boolean;override;
function GetAffectedCount(AHandle:THandle):Integer;override;
function GetFieldData(AHandle:THandle;ARowIndex:Integer;AField:TMDSField;AVal:TRecordValue):Boolean;override;
function InternalExecute(ACmdText:WideString;ACmdTimeout:DWORD;ADataSetNeeded:Boolean):THandle;override;
procedure InternalApplyUpdates(ARootField:TMDSField;ARecords:TList);override;
procedure SetDLLPath(const Value: WideString);
procedure SetPassword(const Value: AnsiString);
procedure InternalClose;override;
procedure InternalOpen;override;
procedure ValidDLL;
procedure ValidConnection;
procedure SetLastError;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
function BeginTrans(ALevel:TDatabaseIsolationLevel=dilUnspecified;ASavePointName:WideString=''):Boolean;override;
procedure CommitTrans;override;
procedure RollbackTrans(ASavePointName:WideString='');override;
published
property Database:WideString read FDatabase write FDatabase;
property DLLPath:WideString read FDLLPath write SetDLLPath;
property Password:AnsiString read FPassword write SetPassword;
end;
首先,由于系统需要加载外部的sqlite3.dll以便实现对sqlite3数据库的操作,因此,我们在这里实现了一个ValidDLL函数,来动态加载并导入sqlite3.dll中我们用到的函数。大家可以参考prov_sqlite.pas中ValidDLL的实现,如果加载动态链接库失败,我们要抛出一个异常提醒用户,缺少文件和具体的错误信息。
其次,实现一个ValidConnection函数来保证连接有效,如果连接未建立,则尝试建立连接,如果建立连接失败,抛出异常。
最后,重载实现父类要求实现的接口函数,包括:
InternalOpen - 使用当前参数尝试打开连接,如果失败,则调用SetError来设置错误信息并返回false。
InternalClose - 关闭一个已经打开的连接。
InternalExecute - 在一个已打开的连接上执行指定的脚本,如果成功,返回一个结果句柄,如果失败,调用SetError来设置错误信息并返回空句柄。
GetAffectRows - 返回脚本影响的数据行数。
GetRecordCount - 返回结果集数据的行数。
GetFieldCount - 返回结果集的字段数。
GetFieldDef - 返回结果集的某个字段的具体定义。
GetFieldData - 返回结果集的某行数据某个字段的具体取值。
DestroyHandle - 释放由InternalExecute返回的结果句柄。
如果不想支持事务,实现上面的接口就可以了,如果要支持事务和保存点,则还需要重载BeginTrans/RollbackTrans/CommitTrans,以实现相关支持。
如果想支持自动更新,还要实现InternalApplyUpdates接口,来执行实际的更新操作。
至此,一个支持TMemoryDataSet的提供者程序也就创建完成了,可以完整的支持TMemoryDataProvider要求的各项功能。
QDAC的Provider不需要支持服务器端游标,如果要实现服务器端游标的效果,可以通过后台分块取数据,然后使用TMemoryDataSet.Union函数的方式来完成。
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/7 16:25:31
33楼:
想测试一下UniDAC的SQLite数据库速度对比,不知道为什么总提示文件加密。先贴出自己的速度来吧,检索10000条记录,两个整数字段,用时156ms.
此帖子包含附件:
大小:32.8K
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/7 18:48:08
34楼:
Beta 1 补丁:
* 修正了SQLite提交事务和应用变更时发现的Bug
+ SQLite 3 加入数据库加密支持,TSQLiteProvider提供了Password属性(要求使用支持加密的sqlite3.dll)
下载地址:
http://vdisk.weibo.com/s/8f8X5/1341643691
----------------------------------------------
QDAC 开源数据库访问组件欢迎大家关注讨论和使用 官网(博客):
http://www.qdac.cc 讨论QQ群:250530692 QLang 多语言组件快速让你的程序走向海外
作者:
★☆☆☆☆
-
普通会员
2012/7/8 9:35:49
35楼:
加入Patch后的版本,应该可以应付日常使用的需要,因此,将留出一段时间供大家测试提供反馈,以便改进。
后续的发布计划大概如下:
2012.7.14 Beta 2 发布
2012.7.21 Beta 3 发布
2012.7.28 RC版发布
2012.8.1 1.0正式版发布
1.0版之后,会进入下一个版本的规划设计阶段,目前考虑2.0版提供以下的功能改进:
+ 过滤表达式支持IN和NOT IN操作,实际上这个支持只需要在表达式分析阶段就可以完成,而且有替代的手段(IN可以用 a=v1 or a=v2 or a=v3这样,NOT IN 可以用a<>v1 and a<>