数据窗口控件使用retrieve()函数从数据库中提取到的数据将被存入到数据窗口的缓冲区中(缓冲区实际上是客户机中的一块内存区域),应用程序对数据的操作均是在缓冲区中完成的。当用户在数据窗口的编辑框中输入或编辑数据时,系统并不会立即将数据的变动反映到数据窗口的缓冲区中,此时编辑框中的数据呈悬浮状态,知道用户移动了输入焦点或者代码中执行了AcceptText()函数之后,系统将验证输入数据的有效性,通过有效性验证的数据才会被放置到数据窗口的缓冲区中。
数据窗口的缓冲区包括:主缓冲区、删除缓冲区、过滤缓冲区和原始缓冲区。这4个缓冲区中的数据都能够被应用程序访问,有关他们的说明如下:
1.主缓冲区(Primary Buffer)
主缓冲区用于保存能够显示在数据窗口空间中的所有数据行,以及这些行和各个列的状态。当数据窗口控件使用函数Retrieve()检索数据时,检索到的数据如果满足数据窗口对象的过滤条件就被放置到过滤缓冲区,否则被放置到主缓冲区中(即满足retrieve()的记录被放在主缓冲区中,不满足的被放在过滤缓冲区中)。另外,在数据窗口中新插入的数据也被存放在主缓冲区中。更新数据库时,行和列的状态用于辅助数据窗口生成合适的SQL语句。
数据窗口控件只显示主缓冲区中的数据,用户所有的操作(查看数据、修改数据等)也都是针对主缓冲区进行的。
2.删除缓冲区(Delete Buffer)
当数据窗口删除数据行时,不论是使用DeleteRow()函数直接删除一行,还是使用RowsMove()函数在缓冲区之间移动数据行,被删除的数据行将从主缓冲区移动到删除缓冲区。当使用Update()函数将数据窗口的修改发送到数据管理系统后,被成功删除的记录将从删除缓冲区中清除。在更新数据库时,删除缓冲区主要用于生成DELETE语句。
3.过滤缓冲区(Filter Buffer)
过滤缓冲区用于保存数据窗口中满足过滤条件的数据行。过滤缓冲区与主缓冲区一起在更新数据库时生成所需要的INSERT或UPDATE语句。
4.原始缓冲区(Original Buffer)
原始缓冲区用于保存数据窗口从数据库中检索到的原始数据。该缓冲区中的数据不会因为用户的编辑操作而发生改变。在更新数据库时,这些数据用于构造修改数据库数据的SQL语句的WHERE子句。