求助(VFP里面用到的行缓冲或表缓冲方式)
1.销货表单里,有添加,删除,修改,取消,存储,我想要的功能是:点击"添加"后输入记录,就点击"存储",但是我每次点"存储",它都会出现错误:函数要求使用行缓或表缓冲方式.
2.点"修改"后,我想取消,但是每次点"取消"按钮都会出现错误:函数要求使用行缓冲或表缓冲方式.
3."取消"的click的代码:
if messagebox("是否放弃当前操作?",48+4,"信息提示")=6 &&回答是“是”
tablerevert(.f.) &&将数据恢复
this.enabled=.f.
thisform.commandgroup1.command9.enabled=.f.
if thisform.opmode=1 &&添加操作
4."存储"的click的代码:
if tableupdate(.f.)=.f.
=messagebox("数据保存不成功",48,"信息提示")
else
this.enable=.f.
thisform.commandgroup1.command8.enabled=.f.
endif
问题就是:总会弹出:函数要求用行缓冲或表缓冲方式.
联系方法:zwylinda@21cn.com
QQ:123727076
谢谢大家的支持!!!!!!!!!!!!!!!!!!!!
问题点数:0、回复次数:6Top
1 楼taoyb(tyb)回复于 2003-12-03 08:58:45 得分 0
在表的数据环境中,改变表的缓冲方式Top
2 楼sunsunup(細水長流)回复于 2003-12-03 09:38:56 得分 0
tableupdate(), tablerevert()需要先設buffering = 5.用完之後恢復burrering = 1
請參考:
CURSORSETPROP(cProperty [, eExpression] [, cTableAlias | nWorkArea])
Top
3 楼magnetmoon(天涯明月刀)回复于 2003-12-03 11:28:16 得分 0
对于没有启用行缓冲的表或没有启用表缓冲的临时表,TABLEUPDATE()函数不能实施对它们的更改。如果在没有启用行或表缓冲的情况下,调用 TABLEUPDATE()函数,Visual FoxPro 将产生错误信息。然而,TABLEUPDATE()函数仍然可以对具有有效性规则的表或临时表实施更改。使用函数 CURSORSETPROP()可以启用或废止行或表缓冲。
cursorsetprop( ) 函数
示例 请参阅
指定 Visual FoxPro 表或临时表的属性设置。
语法
CURSORSETPROP(cProperty [, eExpression] [, cTableAlias | nWorkArea])
返回值类型
逻辑型
参数
cProperty
指定要设置的表或临时表属性。请注意,对 Visual FoxPro 表只能指定 Buffering 属性。
eExpression
为 cProperty 属性指定值。如省略 eExpression,属性设为默认值。
下表列出可为 cProperty 指定的属性以及能指定的 eExpression 值。
属性 eExpression 值
BatchUpdateCount* 发送到缓冲表后端的更新语句的数目。1 是默认值,调整该值可以大大提高更新性能。
Buffering 1-设置行缓冲和表缓冲关闭。在 FoxPro 早期版本中,锁定记录和写数据操作是等价的(默认值)。2-打开保守式行缓冲。3-打开开放式行缓冲。4-打开保守式表缓冲。5-打开开放式表缓冲。除了方式 1 之外,SET MULTILOCKS 都必须是 ON。
CompareMemo .T-检测更新冲突的 WHERE 子句中包含备注字段或通用字段.F-检测更新冲突的 WHERE 子句中不包含备注字段或通用字段
FetchAsNeeded .T. 柊凑找笱∪〖锹肌?F.-对于远程视图,选取记录的数目决定于MaxRecord 的属性;对于当地视图,选取所有记录。
FetchMemo* . .T.-视图结果中包含备注字段。.F.-视图结果中不包含备注字段。
FetchSize* 从远程结果集合中逐步提取的行数,默认值是 100 行。FetchSize 设为 -1 将检索全部结果集(但受 MaxRecords 设置限制)。
KeyFieldList 逗号分隔的临时表主字段的列表。无默认值。必须包含字段名的列表。
MaxRecords* 当结果集返回时所提取的最大行数。默认值是-1(返回所有行)。0 值指定执行视图,但不提取结果。
Prepared .T.-准备 SQL 语句,以执行 REQUERY()。REQUERY()用于从一个 SQL 视图中重新检索数据。有关 SQL 语句的准备,请参阅 SQLPREPARE( )SQLPREPARE()。本属性只用于视图。默认为 .F.
SendUpdates T.-执行 SQL 更新查询来更新远程表。.F.-不执行 SQL 更新查询。
Tables 逗号分隔的远程表名称的列表。无默认值。必须包含表名称的列表。
UpdatableFieldList 逗号分隔的指定给临时表的远程字段名和本地字段名的列表。可用该选项来为包含无效 Visual FoxPro 字段名的临时表指定有效的 VisualFoxPro 字段名。
UpdateNameList 逗号分隔视图中字段的列表。此列表可以包含来自本地和远程表的字段。您必须包含将要进行更新的字段的列表。
UpdateType 1- 用新数据更新旧数据(默认值)。2- 通过删除旧数据,插入新数据来进行更新。
UseMemoSize* 使得结果返回到备注字段的列的最小宽度(按字节计)。例如,如果列结果的宽度比 UseMemoSize 值大,列结果存储在备注字段中。UseMemoSize 可从 1 到 255,默认值是 255。
WhereType 更新远程表的 WHERE 子句。WhereType 可以设为下列值:1 或 DB_KDY(源于 FOXPRO.H)。对远程表进行更新的WHERE 子句仅包含由 keyFieldList 属性指定的主关键字段。2 或 DB_KEYANDUPDATABLE(源于 FOXPRO.H)。对远程表进行更新的 WHERE 子句包含由 KeyFieldList 属性指定的主关键字段及任何可更新字段。3 或 DB_KEYANDMODIFIED(源于 FOXPRO.H)(默认值)。对远程表进行更新的 WHERE 子句包含由 KeyFieldList 属性指定的主关键字段及其他已修改的字段。4 或 DB_KEYANDTIMESTAMP(源于 FOXPRO.H)。对远程表进行更新的 WHERE 子句包含由 KeyFieldList 属性指定的主关键字段和时间戳。
* 这些属性主要用于远程视图,设置它对本地视图没有影响。但是,您可以为将要升迁的本地视图预先设置此属性。
cTableAlias
指定要设置属性的表或临时表的别名。
nWorkArea
指定要设置属性的表或临时表的工作区。如指定 nWorkArea 为 0,CURSORSETPROP()为后面所有的表或临时表设定环境设置。
说明
如果 Visual FoxPro 成功地设置指定的属性,则 CURSORSETPROP()返回“真”(.T.);如果不能设置指定的属性,Visual FoxPro 将产生错误。
CURSORSETPROP()缓冲属性的设置决定 Visual FoxPro 如何执行记录锁定和更新缓冲。有关记录锁定和更新缓冲的详细内容,请参阅“帮助”中的共享数据访问编程主题。CURSORSETPROP()的 WhereType 属性设置决定了在远程表上如何执行更新。
可用 CURSORSETPROP()改写临时表的 FetchSize SQLSETPROP()属性,默认情况下该属性从临时表的连接句柄继承而来。
对于 Visual FoxPro 表和为表创建的临时表,可用 CURSORGETPROP()返回其当前属性设置。
如执行不带可选 cTableAlias 或 nWorkArea 参数的 CURSORSETPROP()命令,可以为当前选定工作区中打开的表或临时表指定属性设置。
dbsetprop( ) 函数
示例 请参阅
给当前数据库或当前数据库中的字段、命名连接、表或视图设置一个属性。
语法
DBSETPROP(cName, cType, cProperty, ePropertyValue)
返回值类型
逻辑值
参数
cName
指定要设置属性的数据库、字段、命名连接、表或视图的名称。
若要给表或视图中的字段设置一个属性,应将包含该字段的表或视图的名称加在字段名前面。例如,要为 customer 表中的 custid 字段设置属性,应该将 cName 指定为:
customer.custid
cType
指定 cName 是当前数据库还是当前数据库中的一个字段、命名连接、表或视图。下表列出了可以为 cType 指定的值:
cType 说明
CONNECTION cName 是当前数据库中的命名连接。
DATABASE cName 是当前数据库。
FIELD cName 是当前数据库中的字段。
TABLE cName 是当前数据库的一个表。
VIEW cName 是当前数据库中的一个视图。
cProperty
指定要设置的属性名。如果某个属性是只读,它的值就不能用 DBSETPROP()函数修改。如果要设置只读属性,Visual FoxPro 会产生错误信息。
有关使用 cProperty 可以指定的属性及其数据类型的详细内容,请参阅稍前部分的语言参考“DBGETPROP( )函数”。
ePropertyValue
指定 cProperty 的设定值,ePropertyValue 的数据类型必须和属性的数据类型相同。
警告 可用 DBSETPROP()函数为某一属性设置无效值,Visual FoxPro 并不验证为属性指定的值是否有效。例如,可以用 DBSETPROP()函数为一个字段的规则表达式设置一个无效表达式,而 Visual FoxPro 并不产生错误。
说明
使用 DBSETPROP()函数可为当前数据库或当前数据库中的字段、命名连接、表或视图设置属性,使用 DBGETPROP()函数则可确定当前属性值。
DBSETPROP()函数要求以独占方式使用当前数据库。要以独占方式打开一个数据库,可在 OPEN DATABASE 中包含 EXCLUSIVE 子句。
欲了解详情,请参阅下表。
有关细节 参考区域 《Microsoft VisualFoxPro 6.0 中文版程序员指南》章名
数据库属性 “显示和设置数据库属性” 第六章, 创建数据库
连接 “访问远程数据” 第八章, 创建视图
视图 第八章, 创建视图
触发器 “使用触发器” 第七章, 处理表
标题 “创建字段标题” 第七章, 处理表
默认值 “创建字段默认值” 第七章, 处理表
“创建视图字段默认值” 第八章, 创建视图
注释 “添加字段注释” 第七章, 处理表
“显示和设置数据库属性” 第六章, 创建数据库
主关键字 “控制重复值” 第七章, 处理表
规则 “强制商业规则” 第七章, 处理表
“设置或更改字段级或表规则” 第七章, 处理表
“在视图字段和记录中创建规则” 第八章, 创建视图
Top
4 楼zenglinda(曾敏儿)回复于 2003-12-08 09:15:06 得分 0
谢谢大家
但是我还是不太明白啊.
(tableupdate(), tablerevert()需要先設buffering = 5.用完之後恢復burrering = 1
請參考:
CURSORSETPROP(cProperty [, eExpression] [, cTableAlias | nWorkArea]))
上面那句是加到那里去的?还是自定义的?还是方法程序中?????????????
Top
5 楼magnetmoon(天涯明月刀)回复于 2003-12-09 15:34:11 得分 0
以上是編程方式指定,
也可以手工指定
數據環境、選擇你的Cursor、在屬性窗口中設置bufferModeOverrid屬性為2/3/4/5Top
6 楼smalltiger09(小狐狸)回复于 2003-12-10 10:21:04 得分 0
cursorsetprop("Buffering", 5, 远程视图或光标名)------表缓冲
cursorsetprop("Buffering", 3, 远程视图或光标名)------行缓冲Top




