老车再谈 CURSOR 表
___2021年10月18日 记得2009年左右在广州时,看到梅子论坛的多位大师谈论CURSOR表是VFP升9.0的最大亮点,CURSOR表如何如何伟大。当时老车还没搞远程,只是用CURSOR表做个信息记录什么的,如果象现在认识到CURSOR表也如同基本DBF表在磁盘,甚至会认为它可有可无。记得当时也纳闷CURSOR表有不能保存、不能插行、不能PACK等那么多缺点,那些大师咋就认为它那么伟大呢?
2017年老车开始学用SQL,接触到了真正意义上的CURSOR表。群中的一位 梁老师 发来了下面代码,运行后老车觉得可能是生成了远程视图。后来群中“思明”大师又讲到远程视图是一种特殊的CURSOR表。由此老车开始对CURSOR表提高了认识。看来老车认识CURSOR表晚于前面提到的大师十年左右。
2018年左右老车开始学用CA,看到用CA从远程检索到VFP中的默认表名就是CURSOR,之后老车做过测试,应用CA从远程SQL检索来的CURSOR表、用BROW编辑时远程源表同步得到编辑,应用SPT语句检索来的CURSOR表则不能。由此我们有理由认为:应用SPT检索的CURSOR表并没有与远程源表保持链接,所以编辑它时要再用SPT语句向远程回写;应用CA检索的CURSOR仍然与远程源表保持着链接,所以编辑时不再需用代码回写。这样说来应用CA从远程SQL等数据库检索来的CURSOR表更伟大。
老车没学用远程视图,其CURSOR如何不宜乱说。
--------------------------------------------------------------------------
附:梁总发来的代码
LOCAL LCSQL
TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 2
SELECT ID,序号,项目,行次,本月数,1000000000.0-1000000000.0 本期比重,本年累计数,1000000000.0-1000000000.0 累计比重,本月数公式,累计数公式,结转数,上年同期数,1000000000.00-1000000000.00 上年累计,1000000000.0-1000000000.0 上年比重,1000000000.0-1000000000.0 增减率 FROM 利润表 ORDER BY 序号
ENDTEXT
IF SQLEXEC(CONHDL, LCSQL, "TMP_LR") <> 1 && 利润
MESSAGEBOX(MESSAGE(), 48, '提示')
RETURN .F.
ENDIF
SELECT TMP_LR
CURSORSETPROP("Buffering",3,"TMP_LR")
CURSORSETPROP("Tables","利润表","TMP_LR")
CURSORSETPROP("KeyFieldList","ID","TMP_LR")
STORE '' TO FIELDS1,FIELDS2
FOR I = 1 TO FCOUNT()
IF NOT INLIST(FIELD(I), '本期比重', '累计比重', '上年比重', '上年累计数', '增减率')
FIELDS1 = FIELDS1 + FIELD(I) + IIF(I=FCOUNT(),'',',')
FIELDS2 = FIELDS2 + FIELD(I) + ' 利润表.' + FIELD(I) + IIF(I=FCOUNT(),'',',')
ENDIF
ENDFOR
CURSORSETPROP("UpdatableFieldList",FIELDS1,"TMP_LR")
CURSORSETPROP("UpdateNameList",FIELDS2,"TMP_LR")
CURSORSETPROP("SendUpdates",.T.,"TMP_LR")