| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 647 人关注过本帖
标题:求助各位大佬一个prg
只看楼主 加入收藏
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:13 
求助各位大佬一个prg
首先我知道这个prg挺简单的,奈何我不会写啊
现有一个文件夹,里面有20个dbf表,每个表的字段一样,如下:

xuhao(数值型,3位,小数位0) tihao(数值型,6位,小数位0) ans(字符型,40位) fs(数值型,6位,小数位2)
1                         1                        A                 1.00
2                         2                        B                 1.00
3                         3                        B                 2.00
.......................................................................

现在要做的就是写一个循环,把文件件的里dbf处理一下,处理效果如下:
1.删除xuhao列
2.将fs列名改成mf,并将小数位由2增加到3位,原来的内容也跟着增加,比如1.00,变成1.000
3.添加bit字段(数值型,1,0),并将内容全部替换成1
4.添加xxdf字段(数值型,8,3),并将内容全部替换成0.000
5.添加bfdf字段(数值型,8,3),并将内容全部替换成0.000
6.添加sxkf字段(数值型,8,3),并将内容全部替换成0.000
7.添加dkf字段(数值型,8,3),并将内容全部替换成0.000
8.添加emu字段(数值型,1,0),并将内容全部替换成0
9.添加zdf字段(字符型,100)

至此结束,循环处理文件夹中所有dbf文件,文件名保持不变。

搜索更多相关主题的帖子: 添加 字段 全部 数值 内容 
2023-09-12 09:21
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9824
专家分:27129
注 册:2012-2-5
收藏
得分:0 
看不出这样做有什么意义

坚守VFP最后的阵地
2023-09-12 10:34
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
收藏
得分:0 
回复 2楼 sdta
肯定有意义啊,只有处理后的表才能用,我这个程序必须要有这些字段才能运行。
2023-09-12 10:49
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1072
专家分:2618
注 册:2015-12-30
收藏
得分:0 
循环是对多个dbf的
既然结果表的结构是一样的,那就单独按要求建立一个空表
循环内只需把需要的数据通过append from 传进来,然后删除旧表,建立新的dbf表
2023-09-12 11:49
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
收藏
得分:0 
回复 4楼 laowan001
道理我都懂啊,关键就是我的水平只会写单句vfp语句,不会写prg
2023-09-12 12:14
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1072
专家分:2618
注 册:2015-12-30
收藏
得分:5 
以下是引用dbf永动机在2023-9-12 12:14:00的发言:

道理我都懂啊,关键就是我的水平只会写单句vfp语句,不会写prg


程序代码:
LOCAL xfiles[1],xfile,xii,xfilename
* 建立结果表结构
xfile = SYS(2015)
CREATE CURSOR &xfile (;
tihao numeric(6,0),;
ans varchar(40),;
mf numeric(6,3),;
bit numeric(1,0),;
xxdf numeric(8,3),;
bfdf numeric(8,3),;
sxkf numeric(8,3),;
dkf numeric(8,3),;
emu numeric(1,0),;
zdf varchar(100);
)

adir(xfiles,SYS(5)+SYS(2003)+'\*.dbf')        && 获取当前目录下所有dbf文件

FOR xii=1 TO alen(xfiles,1)
    SELECT * FROM &xfile WHERE 1=2 INTO CURSOR &xfile READWRITE     && 清除结果表记录
    
    xfilename = xfiles[xii,1]        && 取一个DBF文件名
    INSERT INTO &xfile (tihao,ans,mf) SELECT tihao,ans,fs FROM &xfilename        && 把dbf表中的记录传入结果表
    SELECT &xfile
    REPLACE ALL bit WITH 1        && 其他新加的字段,数值型缺省就是0,字符型缺省就是空,不需要单独替换
    
    USE IN &xfilename        && 关闭旧表
    
    DELETE FILE &xfilename    && 删除旧表
    
    COPY TO &xfilename        && 拷贝新表(同名DBF)
    
    * 不建议在程序中使用上面的方法(或者是改名的方法),因为如果执行过程中遇到问题,则有可能破坏原来的文件!!!    
ENDFOR

* 结束

试试看
2023-09-12 13:52
easyppt
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:502
注 册:2021-11-24
收藏
得分:15 
程序代码:
Close Dbf
Adir(myarray,'*.dbf')
For lnX = 1 To Alen(myarray,1)
    lcFileName = Juststem(myarray(lnX,1))
    If !Used(lcFileName)
        Use (lcFileName) In 0 Excl
    Endif
    If !Empty(Field('xuhao',lcFileName))
        Alter Table (lcFileName) Drop Column xuhao
    Endif
    If !Empty(Field('fs',lcFileName))
        Alter Table (lcFileName) Rename Column fs To mf
        Alter Table (lcFileName) Alter mf N(3,0)
    Endif
    If Empty(Field('bt',lcFileName))
        Alter Table (lcFileName) Add Column bt N(1)  && Default 1
        Repl All bt With 1
    Endif
*   添加其他字段的方法一样,自己加吧...
Endfor

2023-09-12 13:55
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1072
专家分:2618
注 册:2015-12-30
收藏
得分:0 
7楼的方法更安全
2023-09-12 14:04
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
收藏
得分:0 

这是我问人工智能的给出的代码,不会没什么反应,请各位指出一下这代码是否正确

LOCAL lcPath, lnHandle, lnCount, lnI

lcPath = "C:\YourFolderPath\"  && 文件夹路径

SET EXCLUSIVE OFF
SET SAFETY OFF
SET DELETED OFF

lnHandle = ADIR(laTables, lcPath + "*.dbf")  && 获取文件夹中的所有表

lnCount = lnHandle[1]

FOR lnI = 1 TO lnCount  && 循环处理每个表
    USE (lcPath + laTables[lnI, 1])  && 打开表

    * 删除 xuhao 列
    DELETE FIELD xuhao

    * 修改 fs 列名为 mf,并增加小数位
    ALTER TABLE ADD COLUMN mf (6, 3)
    UPDATE ALL SET mf = TRANSFORM(fs, "@ ,.000")

    * 添加 bit 字段,并设置为 1
    ALTER TABLE ADD COLUMN bit (1, 0)
    UPDATE ALL SET bit = 1

    * 添加 xxdf,bfdf,sxkf,dkf 字段,并设置为 0.000
    ALTER TABLE ADD COLUMN xxdf (8, 3)
    UPDATE ALL SET xxdf = 0.000
    ALTER TABLE ADD COLUMN bfdf (8, 3)
    UPDATE ALL SET bfdf = 0.000
    ALTER TABLE ADD COLUMN sxkf (8, 3)
    UPDATE ALL SET sxkf = 0.000
    ALTER TABLE ADD COLUMN dkf (8, 3)
    UPDATE ALL SET dkf = 0.000

    * 添加 emu 字段,并设置为 0
    ALTER TABLE ADD COLUMN emu (1, 0)
    UPDATE ALL SET emu = 0

    * 添加 zdf 字段
    IF !USED("zdf")
        CREATE CURSOR zdf (zdf C(100))
        APPEND BLANK
        REPLACE zdf WITH ""
    ENDIF

    USE IN SELECT("all")  && 关闭当前表
ENDFOR

SET EXCLUSIVE ON
SET SAFETY ON
SET DELETED ON

WAIT WINDOW "处理完成!"  && 显示处理完成消息
2023-09-12 14:12
dbf永动机
Rank: 2
等 级:论坛游民
威 望:1
帖 子:77
专家分:21
注 册:2022-8-30
收藏
得分:0 
回复 7楼 easyppt
这是添加好的完整代码,但是没什么反应,请帮我看看哪里有问题


Close Dbf
Adir(myarray,'*.dbf')
For lnX = 1 To Alen(myarray,1)
    lcFileName = Juststem(myarray(lnX,1))
    If !Used(lcFileName)
        Use (lcFileName) In 0 Excl
    Endif
    If !Empty(Field('xuhao',lcFileName))
        Alter Table (lcFileName) Drop Column xuhao
    Endif
    If !Empty(Field('fs',lcFileName))
        Alter Table (lcFileName) Rename Column fs To mf
        Alter Table (lcFileName) Alter mf N(3,0)
    Endif
    If Empty(Field('bit',lcFileName))
        Alter Table (lcFileName) Add Column bit N(1)  && Default 1
        Repl All bit With 1
    Endif
    If Empty(Field('xxdf',lcFileName))
        Alter Table (lcFileName) Add Column xxdf N(8,3)  && Default 1
        Repl All xxdf With 0.000
    Endif
     If Empty(Field('bfdf',lcFileName))
        Alter Table (lcFileName) Add Column bfdf N(8,3)  && Default 1
        Repl All bfdf With 0.000
    Endif
    If Empty(Field('sxkf',lcFileName))
        Alter Table (lcFileName) Add Column sxkf N(8,3)  && Default 1
        Repl All sxkf With 0.000
    Endif
    If Empty(Field('dkf',lcFileName))
        Alter Table (lcFileName) Add Column dkf N(8,3)  && Default 1
        Repl All dkf With 0.000
    Endif
    If Empty(Field('emu',lcFileName))
        Alter Table (lcFileName) Add Column emu N(1,0)  && Default 1
        Repl All emu With 0
    Endif
    If Empty(Field('zdf',lcFileName))
        Alter Table (lcFileName) Add Column zdf C(100)  && Default 1
    Endif
*   添加其他字段的方法一样,自己加吧...
Endfor
2023-09-12 14:26
快速回复:求助各位大佬一个prg
数据加载中...
 
   



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

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