我使用TSmartQuery不能成功获取可编辑的查询结果,但当使用TOraQuery时却可以。请问为什么会这样?
你必须明白,为了使任何数据集组件可以被编辑,就必须保证数据表中的记录允许被更新,并且能被独立识别。对TSmartQuery来说,它必须要在属性KeyFields中指出字段名,以标识记录(例如,字段,主键或唯一索引).
有一种可供选择的办法是 - 如果查询字段之一是更新表的RowId, TSmartQuery 就会找到它并在属性KeyFields为空时使用RowId来标识它。
属性 UpdatingTable 服务显示表将被更新(如果在查询中有许多表)。如果它的值为空,正在使用的表就会显示SQL操作的结果。 为了更好地对查询结果进行操作,建议应总是设置属性UpdatingTable。
在不连接数据库时,我使用TDBGrid该怎样显示数据,程序窗体?
你可以使用 TVirtualTable 组件. 如果数据结构是已知的,就可在设计时使用字段编辑器来创建字段。 如果数据结构由应用程序执行时决定 ,则必须使用 AddField 方法. 应用程序能像对普通表那样使用数据填充 TVirtualTable .
你可以看这个位置的例子:
从 1.80 版开始,当执行SQL操作时,如果没有改变数据库记录或改变了多个记录, ODAC-TOraQuery 开始显示错误 ("更新失败"), 在ODAC以前的版本中却从来都没有这样的错误提示。我自动去除这个错误?
在ODAC的1.80版本以后添加了这种特性是为了简化项目中从BDE升级到ODAC的事务处理。 BDE 的 TUpdateSQL 支持这种方法。为了不出现这个错误提示,必须将属性StrictUpdate的值设置为False. 非常抱歉,这是一个 public 属性,也就是说它的值可在运行时被修改。
使用ODAC创建了应用程序,用户可在DBGrid中直接编辑记录。我怎样才能禁止用户的删除记录操作?
如果像TDataSet 那样使用 TOraQuery ,就可以非常简单地禁止记录的删除、插入以及更新操作。简单地清除相关属性(SQLDelete, SQLInsert,SQLUpdate). 这种方法并不适用于SQL操作或PL-SQL块。如果删除操作被禁止,原因可能是在DBGrid中执行了dgConfirmDelete选项,因为这个组件不能被 "guess", 所以导致删除操作被禁止。
用户必须要在DBGrid中可删除、插入以及编辑记录,但删除操作并不在DB中被实现。如果在TOraQuery中不填充 SQLDelete , 在 DBGrid 中就不允许删除操作。是否有方法可以越过这种限制?
方法非常简单,在 SQLDelete 中输入以下内容: