说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

私有数据工作期中的表文件(不是临时表)为什么不能二次更新 (内详)

编辑:说三道四文库 发布时间:2018-06-24 07:23
HTML文档下载 WORD文档下载 PDF文档下载
看我的表单吧:

 上边是两个日期输入框更新的开始和结束日期  
 接着是一个更新按钮, 然后除了退出就没什么了..
 
 下边接着是一个表格..用来保存更新的新数据用的...
  
 表单的数据环境一个表设为"私有数据工作期" 因为还有其它表单的运行

更新按钮的单击事件的代码
大体:
SELE CUT (更新结果保存在这里)
ZAP

SELECT 查询语句........             INTO CURSOR TMEP

接下来.....

sele cut
append blank

repl   cut.字段 with  temp.字段

..................

类似的操作都是同样模式........




最后.......

THISFORM.GRID1.RECORDSOURCE="cut.dbf"
THISFORM.REFRESH

问题是..第一次按更新按钮时...能正确得到想要的数据...而第二次再按时...在ZAP处出错 
大意"表文件已经在其它工作中打开..."

请问如何解决啊?????????????????



















zap命令要独占数据,你打开CUT时,是不是共享的?因为你说过,“因为还有其它表单的运行”可能也打开了CUT。
我错了。没看清题目。
在你的程序中,可不可以直接用 SELECT 查询语句..INTO CURSOR cut,再与表格绑定?
  在一个网络或多用户应用中,最好少用pack,zap,ALTER TABLE,INDEX,INSERT [BLANK],MODIFY STRUCTURE,REINDEX等,这些命令要求独占数据表,还要写一大堆的on error程序,测试加锁与解锁,控制比较烦,所以我习惯于用其他方法来解决表中数据的删除。
不行啊。。。CUT表是由多SELECTD语句的查询结果替换而成的呀?

难道真的不能解决了吗?>


其它表单绝对没有用到CUT表。。。只有这个表单使用已而啊。。。 晕
快来帮忙啊。。 老大们。。。。。。。。
那分成几步走:
   第一步:用查询生成一个空表 _temp ,dbf或curs均可;
   第二步:SELECT 查询语句........             INTO CURSOR TMEP
   第三步:生成一个新的表 cur
           if used("cur")
              use in cur
           endif
           select * from cut where .f. into dbf cur
   第四步:向cur中追加数据
           sele cur
           append blank
           repl   cut.字段 with  temp.字段
   第五步:再将cur与表格绑定。


首先感谢 胖胖哥 的热心帮助 

还有如下问题啊

第一步:用查询生成一个空表 _temp ,dbf或curs均可;
这步


第三步:生成一个新的表 cur
           if used("cur")
              use in cur
           endif
           select * from cut where .f. into dbf cur
   
是同一个表吗?  



最好能给我说说它们之间的联系啊。。我有点看不懂。。。。。晕了。。。
SELE CUT (更新结果保存在这里)
ZAP
其实问题就出在这两句,你想想ZAP是独占打开的,你第一次打开时自然不会出错,但再打开一次就会提示“己被打开”,所以要么在用完之后关掉,要么在使用之前判断是否打开,一般来说用后一种,因为关掉的话,可能会影响到表格GRID的显示,用后一种的话,就是加上一句if used("表的相对路径及表名")
       sele 表名 in 0
    else 
       use 表名
endif
还有些东西自己要试试才知道的,我这样说未尽能吻合你的所问……:)
问题已解决。。。。。。。。。。 

输入错误:

第一步:用查询生成一个空表 _temp ,dbf或curs均可;
这步与
第三步:生成一个新的表 cur
           if used("cur")
              use in cur
           endif
           select * from cut where .f. into dbf cur

最后一句改为:
           select * from _temp where .f. into dbf cur
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘