我想知道您对在项目中使用数据感知组件的看法.通过使用Delphi和数据感知组件(来自Delphi的标准套件或第三方),开发应用程序(win32和web)的"优势"和"弱点"是什么?
使用FireBird我已经使用了IBObjects,它是一个成熟的组件套件并且运行良好.
但是还有很多其他RDBMS(MySQL,MSSQL,DB2,Oracle,SQLite,Nexus,Paradox,Interbase,FireBird等).如果您已经开发了大型项目,您已经使用了大量数据感知组件,请回答数据库类型和数据感知组件套件名称.
我也对DB2(AS400)感兴趣.您成功使用了哪些组件,或哪些组件真的很难用?
近十年前我放弃了Delphi的DBGrid,因为它根本没有用.从那以后,我使用了Virtual TreeView,它提供了很多价值,但它有一些问题.像当前的开发状态(例如None)以及没有良好数据绑定版本的事实.DevExpress的QuantumGrid以丰富的功能集而闻名,但实在是相当昂贵.我认为,对于数据绑定网格控件的95%的一般用例,其巨大的功能集可能有点过分.
有没有人知道具有以下功能的数据绑定网格控件:
我很少在网格控件中使用编辑,因此编辑功能不一定非常棒.
有什么好建议吗?
使用事务和数据感知组件编写Delphi数据库应用程序的首选方法是什么?
我必须编写一个访问InnoDB表的客户端应用程序,并在事务中执行一些主要的详细信息.在对交易进行一些研究之后(从一般的观点来看),我谦虚地得出结论,非数据感知组件和手工编码的SQL将是交易的"完美匹配"; 但数据感知组件不会.它们似乎并不是为彼此而制造的.
我真的需要使用事务,但另一方面,我不能只是抛弃数据感知组件,因为它们大大简化了事情.
有人可以赐教我吗?我一直在谷歌搜索它,但我没有找到任何有用的答案.也许是因为我的英语不够好,我的关键词有限.
顺便说一下,我正在使用Delphi 7,目前正在评估UniDAC作为数据访问库.
谢谢.
编辑
用于描述我的问题的一个方面的示例:
想象一下有一个包含2个DBGrids的表单.第一个网格是MasterGrid,上面是这些按钮:添加,编辑和删除.第二个网格是DetailGrid.如果用户单击"添加",则它将如下所示:
我知道交易应该尽可能短,但你可以看到,交易只是填写表格的用户的速度.
如果我使用的是非数据感知组件,我会根据用户输入自定义插入SQL,然后在StartTransaction和Commit之间执行SQL.所以我可以实现非常短的交易.
编辑2
我感谢你们所有人的亲切参与.我从vcldeveloper中选择答案,因为它是我目前需要的最接近的解决方案.
有谁知道一个TDataSet的后裔,与泛型和RTTI的作品,让我可以写这样的代码,并利用数据感知组件的GUI的?:
...
ds:TDataset<TPerson>;
...
procedure DoStuff;
begin
ds:=TDataset<TPerson>.create;
ds.add(TPerson.Create('A.','Hitler',77));
ds.add(TPerson.Create('O.','Bin Laden',88));
end;
Run Code Online (Sandbox Code Playgroud)
这应该是可能的.fielddef可以通过RTTI创建,因为已知数据的确切类型.值也可以来回自动编组,因此您可以查看和编辑类或记录中的数据.
我讨厌必须编写大量无用的编组代码,而已经通过RTTI获得所需的信息.
或者有人曾经写过某种TEnumerable < - > TDataset适配器?
这样的事情是存在的,还是我应该开始写一个?
...
我能找到的最接近的东西是来自Mastering Delphi 7的Marco Cantu的一个(优秀的!)示例,但是代码本身并没有使用泛型,新RTTI系统或属性等新语言功能,而且它没有使用Unicode delphi.自D7以来,TDataset也发生了变化.
数据感知控件可以被链接到数据集来显示当前行中包含在字段中的数据,或在某些情况下,从沿着多行的一个或多个列中的数据.TTabControl允许您以易于理解的方式将同一组控件应用于不同的数据值集.
在我看来他们会很好地融合在一起.TTabControl将创建一个良好的数据感知控件(将其链接到数据集中的标识列,它可能是比TDBNavigator更直观的导航器),但VCL中没有一个.
有没有人创建了数据感知选项卡控件?我发现的唯一一个是DBTABCONTROL98Jean-Luc Mattei,可以追溯到1998年(Delphi 3时代),甚至在修改它以使其在XE下编译之后,实际上并没有起作用.有没有其他工作符合预期?(即,在数据集中添加/删除新记录时添加/删除选项卡,以及在用户更改选项卡时切换数据集的活动行,反之亦然.)
是的,我知道如果数据集中有很多行,那可能会有点笨拙.我正在寻找一些东西来构建一个用例,其中行数是单个或非常低的两位数.
我正在尝试定义重构我正在进行的项目的最佳方法.
由于缺乏良好的设计,几乎所有项目都由以下部分组成:
1)包含业务逻辑的表单
2)巨大的数据模块(每个表单1个+额外的一些)
3)包含公共代码(库)的一些单元
没有OOP(除了一些小区域),代码重用它是最低级别的.
一个问题是使用了数据感知控件,因此在数据模块上删除许多数据集+数据源并以高度耦合的方式直接链接到数据库非常简单.
理想情况下,我想提取类,如TCustomer,TEmployee,以获得os封装的优势,并且可以在将来创建新的UI而无需复制所有代码.
无论如何,我的问题是:如何继续处理数据控件?我应该实现一个返回数据集的函数,并将dataawarecomponent.datasource链接到函数结果吗?
function TCustomer.LoadByID(aCustomerID: integer): TDataset
Run Code Online (Sandbox Code Playgroud)
?
有没有人知道Delphi XE(我在这里说的是VCL)是否有任何使用数据感知控件的通用集合类?换句话说,是否有任何通用类,如TObjectList <>可以分配给TDataSource.DataSet,或类似的东西?
谢谢.
担
我正在尝试使用TDBLookupCombo,但是收到错误"EInvalidOperation with message'LookupSource必须连接到TTable组件'.
我将TDBLookupCombo.LookupSource连接到TDataSource.TDataSource.Dataset指向一个TClientDataSet,它包含查找表的记录(字段ID和描述).
LookupDisplay := 'Description';
LookupField := 'ID';
LookupSource := dsLookup;
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为TCilentDataSet不是TTable的后代?如果是这样,那么在不使用第三方组件的情况下,最佳选择是什么.
data-aware ×8
delphi ×8
generics ×2
binding ×1
database ×1
datamodule ×1
dbgrid ×1
delphi-7 ×1
delphi-xe2 ×1
firebird ×1
grid ×1
ibm-midrange ×1
oracle ×1
refactoring ×1
rtti ×1
tcombobox ×1
tdataset ×1
transactions ×1
vcl ×1