关于数据库的两个问题,请高手指点迷津。(100分)

  • 主题发起人 主题发起人 mythad
  • 开始时间 开始时间
M

mythad

Unregistered / Unconfirmed
GUEST, unregistred user!
1,从数据库得到的数据集能否排除几条信息?因为我的条件是未知的,所以我无法在sql语句中排除。用filter条件未知的多行比较麻烦。
2,TADODataSet能否建立一个虚拟列,数据库中没有但是我的数据集中有,当然该列不会影响到数据库,只是临时使用。我是想在我的grid(cxGrid或dxDBGrid)中使用,做个标记而已,大家有好的方法也可以说说。
 
补充,1.如果可以像delete一样直接删除比较好,但是delete连数据库中的都给删除了。
 
用clientdataset的啊,只要你不使用applyupdates更新到数据库中,就可以当成一个内存表使用。
 
no.2 ???有什么好的方法么?
 
用内存表也可以实现
 
No1. 支持TYZhang的做法。用TClientDataSet, TDataSetProvidero, TQuery来连接数据库。
设置方法
DataSetProvider1.DataSet := Query1;
ClientDataSet1.ProviderName := DataSetProvider1;
DataSetProvider1.Options := [poAllowCommandText];
对于不需要的数据, 可以直接在ClientDataSet中删除,只要不保存就可以了。

No2 如果改为TClientDataSet控件,应该比较容易处理。
需要在DataSetProvider的AfterUpdateRecord事件中处理好更新的代码就可以了,更新时只对物理表的字段执行更新。
 
加个计算字段不就行了吗?没有这么繁琐吧!
 
普通的ADOdataset同样可以的 locktype设成 ltBatchOptimistic,只要没执行UpdateBatch就行.
你的第一个问题我有点糊涂,你的意思是说只能手工排除,如果是这样,可以用过滤,过滤条件不用改变,比如 showed<>1,然后加一字段showed,通过改变showed的字段值来改变
 
to bmsr:
能说的详细一点么?到底怎样加一个虚拟的列呢?如果加了虚拟列,第一个问题确实好解决了。
 
select 1 as showed,utable.* from utable
 
什么跟什么啊
不知道条件还过滤什么
 
1、LockType 设成 ltBatchOptimistic,你就可以直接delete 和 post了,不会修改到数据库。记住不要调用UpdateBatch。

2、select *,Field1 as NewField from Table
其中Field1要表中已有的字段,这样AdoDataset中就多了个字段NewField,你可以修改这个字段了。记住:要表中已有的字段,不然不能修改。
 
嗯,感谢大家。来者有分。
 

Similar threads

后退
顶部