回 帖 发 新 帖 刷新版面

主题:[讨论]请大师帮忙

CLOSE ALL
WAIT "数据正在导入" window nowait
RUN /n7 WinRAR.exe x -ibck -r -o+ -y sbsj\sbsj.rar jssj\
COPY FILE sbsj\xzsz.dbf TO jssj\xzsz.dbf
USE jssj\xzsz
dimen a1(1)
COPY TO ARRAY ai field mc
CLOSE ALL
USE xzsz EXCLUSIVE
DELETE from xzsz where mc=ALLTRIM("a1")
DELETE FROM xzsz WHERE EMPTY(mc)
PACK
APPEND FROM jssj\xzsz
WAIT "正在接收数据" window nowait
USE date\hz EXCLUSIVE
DELETE from hz where 乡镇信息=ALLTRIM("a1")
DELETE FROM hz WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\hz
CLOSE ALL
USE date\cy EXCLUSIVE
DELETE from cy where 乡镇信息=ALLTRIM("a1")
DELETE FROM cy WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\cy
CLOSE ALL
USE date\jhsy EXCLUSIVE
DELETE from jhsy where 乡镇信息=ALLTRIM("a1")
DELETE FROM jhsy WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\jhsy
CLOSE ALL
USE date\sq EXCLUSIVE
DELETE from sq where 乡镇信息=ALLTRIM("a1")
DELETE FROM sq WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\sq
CLOSE ALL
USE date\ykt EXCLUSIVE
DELETE from ykt where 乡镇信息=ALLTRIM("a1")
DELETE FROM ykt WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\ykt
CLOSE ALL
USE date\xx1 EXCLUSIVE
DELETE from xx1 where 乡镇信息=ALLTRIM("a1")
DELETE FROM xx1 WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\xx1
CLOSE ALL
USE date\xx2 EXCLUSIVE
DELETE from xx2 where 乡镇信息=ALLTRIM("a1")
DELETE FROM xx2 WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\xx2
CLOSE ALL
USE date\xx3 EXCLUSIVE
DELETE from xx3 where 乡镇信息=ALLTRIM("a1")
DELETE FROM xx3 WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\xx3
CLOSE ALL
USE date\gwkf1 EXCLUSIVE
DELETE from gwkf1 where 乡镇信息=ALLTRIM("a1")
DELETE FROM gwkf1 WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\gwkf1
SET TALK OFF
SET SAFETY OFF
CLOSE ALL
WAIT clear
SET TALK ON
SET SAFETY ON
WAIT window"接收成功"timeout 1
以上是一段接收数据的程序,请各位教师看看这什么,jkt等表不能联系数据库呀原因出在什么地方呀

回复列表 (共6个回复)

沙发

不是大师想帮忙
"以上是一段接收数据的程序,请各位教师看看这什么,jkt等表不能联系数据库呀原因出在什么地方呀"
问题是你的程序里根本没有'jkt'这个字出现第二次,如何查原因啊.原因只能出在就是没有'jkt'这个表了

板凳


打差了,是ykt,我数据库里有这个表,你说大师是什么原因呀

3 楼

我不是大师,但想帮忙
看了下面的命令
"
USE date\ykt EXCLUSIVE
DELETE from ykt where 乡镇信息=ALLTRIM("a1")
DELETE FROM ykt WHERE EMPTY(乡镇信息)
PACK
APPEND FROM jssj\date\ykt
CLOSE ALL
"
后,估计你那个'jssj\date\ykt'该目录下没有'ykt'文件,你用命令
use jssj\date\ykt
试试执行正常吗?

4 楼

"原因出在什么地方呀"???

先听俺来讲故事:

很多人有剪报的爱好,从报纸上剪下一块块感兴趣的新闻、诗歌、图片等等,然后用胶水粘贴到一个本子里收藏起来。假设你也有这个爱好,面对一叠报纸,你开始拿剪刀剪起来,这个任务你一个人做,完全没问题。不过可能你剪得不齐,边缘歪歪扭扭。这时假设细心的小妹妹来帮你剪,你告诉她要剪哪些内容,而你只管向本子里贴,两个人共同完成这个任务。问题来了,这需要两个人在时间上配合好,如果她心灵手巧,速度很快,当你贴第一片时,她已经剪下4、5片了,那没什么,顺利完成;如果她因为细心而慢慢地剪,你就必须等待,现在假设你只想不停的贴,不给等待的时间,显然任务无法完成。

那大段的程序就是你,WinRAR就是细心的小妹妹。

其实这就是个进程同步还是异步的问题,Fox用RUN执行外部程序是异步的,换句话说,当你用它启动WinRAR解压文件时,Fox并不等待WinRAR解压完毕,而是立刻继续执行后续语句,于是就会出现你要的文件还没来得及解压出来,而你的程序就要用它的情况。

可能你会说怎么xzsz、hz、cy这些都没问题,就是到了ykt就有问题?很简单,WinRAR解压速度也不弱,当你的代码用到xzsz、hz、cy这些文件时,它已经解压出来了,不过它还在继续解压后续文件时,你就要用ykt,于是问题就来了。

解决办法:(目标就是实现同步,换句话等WinRAR解压完毕再继续)

1.插入等待命令,比如
RUN /n7 WinRAR.exe ......这句后面
Wait "" timeout 2   &&等待2秒

缺点:等待时间不好确定,根据压缩文件的大小需要调整等待时间

2.使用Win32API函数CreateThread()、WaitForSingleObject()

3.利用WSHShell的run方法,该方法有同步等待参数

4.木瓜老师的MyFll.fll中的函数

呵呵,解决办法仅给出提示,请自行查找网上示例

5 楼


多谢大师指点了

6 楼

楼主你好:
    因为你这帖的标题起的不妥,看在你好学好问的份上,向你提三点意见。希望你能改正。
    1、看你提的问题应该是[请教],不应该是[讨论]。讨论应该是提出有争议、并值得大家探讨的问题。
    2、“请大师帮忙”没有直接点名什么问题,这种标题再烦人不过了。
    3、你帖出的代码太长,那么长的代码我肯定没时间去给你看,象4楼赵老师那么有耐心的为数不多,你要特别感谢哦。
    如果楼主觉得我说的不对也不必回击,就算我吃多了消化不好在放屁。哈哈!

我来回复

您尚未登录,请登录后再回复。点此登录或注册