(10)还是继续数据库吧:edit,refresh,post,cancel,appendrecord(45分)

  • 主题发起人 主题发起人 千中元
  • 开始时间 开始时间

千中元

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库的基本问题,我还是常常糊涂。。。
1)关于修改数据:《核心编程》P146:“除了TDBGrid构件外,当用户修改
了一个字段的值,还需要把焦点移走,新的数据才会写到数据集
中”
-----“写到数据集中”,也就意味着再调用Post才能写入物理
的表么?
写到数据集合后, 而如果调用refresh,则显示出最新的数据,
可假如不post,则修改数据还是无效?
((以前自己是这么想的,可不知道对不对)
2)cancel 是cancel已经写入数据集,但没有调用post的修改
(或者增加,删除。。)么?
如果是的话,我在DBEdit中修改了数据,未把焦点移开,提交按钮的 onclick事件是不是要在post前面加上refresh才能真正的实现修改的提交?
3)如果增加用appendrecord,怎么才能cancel呢?

 
1、应该是post,才能把已修改的数据写入数据库。
2、如果要cancel数据,那得把ttable或tquery的cachedupdate=true才能实现。
3、把ttable或tquery的cachedupdate=true就行了。
 
》:LawrenceZhang
???
 
1)
对DBGrid
移走焦点,数据就写入表中
除非你用缓存更新
2)//cancel 是cancel已经写入数据集,但没有调用post的修改
// (或者增加,删除。。)么?
是的
3) 不用缓存更新的话
不能Cancel
 
to all,
现在还剩下DBGrid的问题。
根据《核心编程》上的讲述“除了除了TDBGrid构件外”,那么
1) DBGrid是直接的写入物理表?
2) BBGrid的移出焦点-----移动到另一个记录上不算是移动焦点吧?
----LawrencZhang,这些问题。。对我来说还是写明白以后才用的准确些,
放心些。

 
如果 cachedupdate=false
1) 是
2) 算移动焦点
 
DBGrid也可以用Cancel啊
 
zh_sh,
如果焦点没有移动,按Exc当然可以 cancel,如果焦点移开,则写入
物理表-----写入物理表怎么cancel呢?

to all,
现在其它的好说,只是对DbGrid,用缓存更新的话,DBGrid移开焦点以后,
原来是把修改写到物理表,现在在未提交的时候写到哪里去了?
 
  faint,移动焦点就是移动记录,移动了记录当然不能Cancel了
  "除了TDBGrid构件外,当用户修改了一个字段的值,还需要把焦点移走,新
   ~~~~~~~~~
    TDBGrid也不能除外,也须移动焦点或直接调用Post
的数据才会写到数据集中”
未提交的当然应该在缓存中,呵呵
 
泼冷水先,
zh_sh,
你关于DBGrid的看法和《核心编程》的不一样。试验我就不做了--怕产生
误差:}
to all,
继续呀,就DBGrid.15分。
 
写数据库的全程是

1. dataset.edit ; // dataset.append // dataset.insert;
2. dataset.afield.value = ? ;
3. dataset.otherfield.value = ? ;
4. ....
5. post ; // or cancel ;
--------------------
离开一个焦点执行一个 (2)
2-4执行完毕就相当于数据输入完毕.相当于缓存
确认输入为(5) post ,取消输入就(5)cancel
refresh 以缓存为准,因而可以显示新写入的 虽然还没有post 的数据
 
谢谢sanrex,我现在对数据的写入问题更清楚些了。
to all,
    zh_sh:"TDBGrid也不能除外,也须移动焦点或直接调用Post
的数据才会写到数据集中”
可是请看《核心编程》P146:“除了TDBGrid构件外,当用户修改
了一个字段的值,还需要把焦点移走,新的数据才会写到数据集
中”
????????????????



 
天气开始热了,泼泼冷水也好,尽信书不如无书(这话是不是老掉牙了),无论是TDBEdit或TDBGrid,在移动记录和调用Post之前,数据表绝对没有变,除非你直接用InsertRecord添加记录。
 
泼水节。
zh_sh,
我正是对那里表示怀疑才提出来的。
你看wrench的答案。。。。所以想多几个人,意见越多越好么。
 
呵呵,我知道我们的误解在哪儿了,关键是移动焦点的所指
如果移动焦点是指从记录的一个字段跳到另一个字段,数据表是不会变的,如果
移动记录是指从一条记录跳到另一条记录,则数据表就被改变了,哎,只能怪《核心
编程》,说话如此不严密,该死,该死。
 
我昨天问wrench了,DBGrid的焦点移动要理解为记录间的,很有道理---呵呵。。咱们讨论问题么,就不客套。
现在我想清楚的是:
1)DBGrid在使用缓存更新的情况下是不是和别的(如Dbeidt)一样进入缓存?而不是象在单层中“直接进入物理表”(算个异类)?
2)在两层,或者三层中呢?
现在我自己是这样理解的
使用缓存: (修改) 焦点移动后调用ApplyUpdate
DBGrid-----> 缓存---------------------------------->物理表
(修改) 焦点移动后调用ApplyUpdate post
DBGrid---->缓存------------------------>数据集----->物理表。
不知道对不对?
 
在两层和三层中的DBGrid呢?
 
》我在DBEdit中修改了数据,未把焦点移开,提交按钮的 onclick事件是不是要在post前面加上refresh才能真正的实现修改的提交?
----------去按‘提交按钮“,算不算焦点的移开?
 
跟数据库所支持的操作有关。
 
后退
顶部