| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 551 人关注过本帖
标题:如何将表单下段代码的功能通过程序来实现?
只看楼主 加入收藏
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
回复 10楼 csyx
在 m.tcFolder=ADDBS(m.tcFolder)打住,【程序错误】,【函数参数值、类型或书目无效。】
2024-05-29 08:51
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:702
专家分:2760
注 册:2018-3-13
收藏
得分:0 
先把明显的错误改了

1. prg 里面不可能允许使用 thisform 这样的关键字 - ThisForm.Refresh、ThisForm.subpath ([&Apath])
2. Apath=SYS(5)+[\]+Apath 这句几个意思? 其后加一句 messagebox(Apath) 看看是什么


这家伙很懒,啥也没留下
2024-05-29 09:06
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:702
专家分:2760
注 册:2018-3-13
收藏
得分:0 
3. DO wjtran 这句不对。没给 wjtran传参数,这样一来 tcFolder 就变成 .F.,显然类型不对


这家伙很懒,啥也没留下
2024-05-29 09:11
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:702
专家分:2760
注 册:2018-3-13
收藏
得分:0 
4. 随意使用宏替换符号,不良习惯,一旦文件夹名称中带有空格或小数点就会导致错误的结果


这家伙很懒,啥也没留下
2024-05-29 09:16
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
回复 14楼 csyx
1.thisform都去除;
2.Apath=SYS(5)+[\]+Apath

这一句还真错了,Apath直接表达为【E:\WORDS】
改正之后下面代码能产生files1表,却没有录入数据[INSERT INTO files1 VALUES (……]

CREATE TABLE files1 (文件名 C(160), 路径 C(28), 修改时间 T)        && 创建表模板; 2024.5.11修改
FUNCTION wjtran(tcFolder)
    LOCAL ARRAY laFiles[1]         && 创建的数组laFiles,[1]表示一组。
    LOCAL lcFileName,ii         && 缺少这一步,会漏掉许多内容。
    m.tcFolder=ADDBS(m.tcFolder)         && 向路径表达式添加一个反斜杠;没有这条,子目录出不来。
    IF ADIR(m.laFiles, m.tcFolder + '*.*', 'ARD', 1) < 3            && 若是文件长度小于3个字节,则不计算;少了D,不能进入子目录。
        RETURN .F.
    ENDIF
    ASORT(m.laFiles, 3, -1, 1)                                && 按第3列排序数组,最后一位数大于0为降序排序。
    FOR m.ii=1 TO ALEN(m.laFiles,1)         && LAN(数组名,数组属性),0[返回数组元素数目],1[返回数组的行数],2[返回数组的列数]。
        m.lcFileName=m.laFiles[m.ii,1]         && m.laFiles是 . ;缺少这一步,后面进行不下去
        DO CASE
        CASE '.'==m.lcFileName Or '..'==m.lcFileName         && 设此可避免直接进入OTHERWISE,出现死循环
        CASE AT('D',m.laFiles[m.ii,5]) > 0         && 该位置若是D,则表明这是一个目录,执行下一行命令。
        wjtran(m.tcFolder + m.lcFileName)        && listfiles与m.tcFolder都是目录的路径,m.lcFileName则是子目录名称
        OTHERWISE
        lafilesdt1=DTOC(m.lafiles[m.ii, 3])                    && 字符型日期
        lafilesdt2=m.lafiles[m.ii, 4]                            && m.lafiles[m.ii, 4]是文件的时间值
        m.lafiles[m.ii, 2]=CTOT([&lafilesdt1 &lafilesdt2])        && 字符日期时间
        Npath=SUBSTR(m.tcFolder,pathlong+1)            && Npath是子目录+孙目录
        Npath=SUBSTR(Npath,1,LEN(Npath)-1)
        Npath=Npath+'\'
        INSERT INTO files1 VALUES (m.lafiles[m.ii, 1], m.tcFolder, m.lafiles[m.ii, 2])    && 将数据录入到表中;此处不能用listfiles代替m.tcFolder
        ENDCASE
    ENDFOR
ENDFUNC
3.删除DO wjtran语句,直接跟上FUNCTION wjtran(tcFolder),结果产生了files1.dbf文件,但是没有数据被录入,而在表单过程程序之后,数据被录进表中;
4.宏替换表达的结果是正确的,不能不用。

[此贴子已经被作者于2024-5-29 12:07编辑过]

2024-05-29 12:05
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:702
专家分:2760
注 册:2018-3-13
收藏
得分:20 
1. 也不用删掉 DO wjtran,改成 DO wjtran with Apath 即可
2. DO wjtran with Apath 与 wjtran(Apath) 只需保留一条
3. procedure wjtran
   lparameters tcFolder
   。。。
   endproc

   function wjtran(tcFolder)
   。。。
   endfunc
是完全等效的两种写法,vfp 不区分用 procedure 还是 function

坚持使用宏替换的陋习是你的自由,不多说了



[此贴子已经被作者于2024-5-29 14:23编辑过]


这家伙很懒,啥也没留下
2024-05-29 14:19
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
回复 16楼 csyx
改用
2. DO wjtran with Apath 与 wjtran(Apath) 只需保留一条
3. procedure wjtran
   lparameters tcFolder
   。。。
   endproc
获得成功。谢谢!
效果:用.prg非常费时,远不及由表单执行该功能好用。

[此贴子已经被作者于2024-5-29 18:55编辑过]

2024-05-29 17:26
快速回复:如何将表单下段代码的功能通过程序来实现?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071889 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved