注册 登录
编程论坛 VFP论坛

想做一个SPT属性设置的通用程序,请教怎么做?

fanjinyu9108 发布于 2022-01-06 08:00, 1877 次点击
如题,想做一个SPT属性设置的通用程序,比如先输入如下代码:
bd_t='c_t' &&本地表
yc_t='fy'  &&远程表
zd='id,area,hw,pz,qm,zm,kp_l,kp_kg,zz_l,cy1' &&本地表的字段内容,并且与远程表的字段名完全一致
然后执行一个通用程序,执行后,得到下面的结果:
SELECT c_t
CURSORSETPROP("tables","fy","c_t")
CURSORSETPROP("keyfieldlist","id","c_t")
CURSORSETPROP("updatablefieldlist","id,area,hw,pz,qm,zm,kp_l,kp_kg,zz_l,cy1","c_t")
yy='id fy.id,area fy.area,hw fy.hw,pz fy.pz,qm fy.qm,zm fy.zm,kp_l fy.kp_l,kp_kg fy.kp_kg,zz_l fy.zz_l,cy1 fy.cy1'
CURSORSETPROP("updatenamelist",yy,"c_t")
CURSORSETPROP("sendupdate",.t.,"c_t")
CURSORSETPROP("wheretype",2)
cursorsetprop("buffering",5)  &&设置表缓冲
其中bd_t,yc_t,zd相当于三个变量,通过执行程序,得到下面的结果,请教如何实现?

11 回复
#2
厨师王德榜2022-01-06 10:04
这种要求,还是做成类比较好,因为类的属性可以保存一些关键信息.大致步骤有:
定义类的一些属性:
连接字串, 远程表名称.本地表名称,
定义类的方法:
连接()
断开()
获取远程表结构()
获取远程表数据()
......
错误处理()
定义好后,直接创建类的实体,再调用类方法就好了,这个比你做通用程序要好用得多.
#3
fanjinyu91082022-01-08 11:00
非常感谢厨师王德榜的解答,但是不管是用类,还是用程序,都要处理以下问题,比如:
bd_t='c_t' &&本地表
yc_t='fy'  &&远程表
zd='id,area,hw,pz,qm,zm,kp_l,kp_kg,zz_l,cy1'

变成如下:
'id fy.id,area fy.area,hw fy.hw,pz fy.pz,qm fy.qm,zm fy.zm,kp_l fy.kp_l,kp_kg fy.kp_kg,zz_l fy.zz_l,cy1 fy.cy1'
请问这个怎么弄

   
#4
laowan0012022-01-08 11:09
这是要把本地表的数据插入到远程表里吗?
#5
fanjinyu91082022-01-08 20:47
谁能通过小程序帮我解决3楼的问题,我的思路是先要把ZD这个变量的内容一个一个抽取出来,但是怎么抽取我还不会
#6
fanjinyu91082022-01-08 20:59
变量 zd='id,area,hw,pz',如何通过转换,变成临时表的四条记录?记录内容分别是。第一条记录:id   第二条记录:area 第三条记录:hw 第四条记录:pz。变量zd的内容可能多,也可能少
#7
laowan0012022-01-08 21:49
程序代码:

LOCAL i,xfields[1],newzd
bd_t='c_t' &&本地表
yc_t='fy'  &&远程表
zd='id,area,hw,pz,qm,zm,kp_l,kp_kg,zz_l,cy1'

alines(xfields,zd,2,',')
newzd = ''
FOR i=1 TO alen(xfields)
    newzd = newzd + ',' + xfields[i] + ' ' + yc_t + '.' + xfields[i]
ENDFOR

newzd = SUBSTR(newzd,2)
MESSAGEBOX( newzd)
* 上面是3楼要的吧

*下面是6楼要的吧
LOCAL xfile
xfile = SYS(2015)
CREATE CURSOR &xfile (zdname varchar(10))

FOR i=1 TO alen(xfields)
    INSERT INTO &xfile (zdname) VALUES (xfields[i])
ENDFOR

SELECT * FROM &xfile


[此贴子已经被作者于2022-1-8 21:53编辑过]

#8
fanjinyu91082022-01-09 07:36
非常感谢laowan001师傅的解答,这个正是我想要的,问题还没有完全解决,遇到不会的,还会继续提问,再次感谢
#9
fanjinyu91082022-01-10 09:10
再次感谢2位版主的解答,厨师王德榜师傅的解答有些高级,我还要慢慢揣摩,laowan001师傅的解答可以解决目前的问题,经过测试,完全通过。
#10
fanjinyu91082022-01-10 09:16
对了,忘了请教厨师王德榜师傅,如果做成类的话,用什么类型的类?
#11
厨师王德榜2022-01-10 09:35
做成vcx后缀的类.
只有本站会员才能查看附件,请 登录
#12
fanjinyu91082022-01-10 11:31
请教下面的语句有问题吗:
程序代码:

SQLSetprop(nhandle,'Transactions',2)        && 开启远程手工事务
BEGIN TRANSACTION
a1=TABLEUPDATE(.t.)
IF a1=.t.

 END TRANSACTION  
ELSE
    rollback  
ENDIF
SQLSetprop(nhandle,'Transactions',1)        && 开启远程自动事务
= SQLDISCONNECT(nhandle) &&关闭

加入a1=.f.,rollback 是否就已经结束事件了,它的后面还需要加上一句  END TRANSACTION  吗

1