| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1194 人关注过本帖
标题:各位大佬,什么方法最好,用时最少,盼赐教,谢谢。
只看楼主 加入收藏
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:317
专家分:448
注 册:2019-10-11
收藏
得分:0 
从左到右的是最简单,从上到下的稍显复杂

2023-12-15 16:58
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:317
专家分:448
注 册:2019-10-11
收藏
得分:0 
我发的代码就是从上到下的,不过好像没人关心这段代码
2023-12-15 16:59
凝聚双眼
Rank: 2
等 级:论坛游民
帖 子:36
专家分:32
注 册:2023-12-1
收藏
得分:0 
回复 31楼 sych
谢谢您的代码。
您可以看到图片吗?1楼与 22楼,我发的举例图片吗?
好象论坛图片显示有问题。
2023-12-15 19:54
凝聚双眼
Rank: 2
等 级:论坛游民
帖 子:36
专家分:32
注 册:2023-12-1
收藏
得分:0 
回复 30楼 laowan001
可惜论坛图片不能显示。我1楼与 22楼,上传的图片很清晰的表达了。

2023-12-15 19:57
凝聚双眼
Rank: 2
等 级:论坛游民
帖 子:36
专家分:32
注 册:2023-12-1
收藏
得分:0 
以下是引用laowan001在2023-12-15 16:09:50的发言:

返回表中的页数如何体现 ?
分栏时,记录按第一栏从上到下,然后第二栏从上到下,。。。,还是每一行从左到右


分栏时,依次上到下,先左后右。
就是您说的前半部分。

第一栏从上到下,第二栏从上到下,第三栏从上到下……


有点类似报表与标签的分列。

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册




[此贴子已经被作者于2023-12-17 14:41编辑过]

2023-12-15 20:01
凝聚双眼
Rank: 2
等 级:论坛游民
帖 子:36
专家分:32
注 册:2023-12-1
收藏
得分:0 
那我再上传个22楼图片外链,不知道可以不可以打开看到。


https://99img.cc/images/2023/12/15/20231215_0c9a35d92a34bc7086f2jmAJawhhUaOB9c8cfc76a6bfa955.jpg

[此贴子已经被作者于2023-12-15 21:10编辑过]

2023-12-15 20:07
凝聚双眼
Rank: 2
等 级:论坛游民
帖 子:36
专家分:32
注 册:2023-12-1
收藏
得分:0 
回复 30楼 laowan001
图片附件: 游客没有浏览图片的权限,请 登录注册
您看看,可以看到吗?

那我再上传个22楼图片外链,不知道可以不可以打开看到。


https://99img.cc/images/2023/12/15/20231215_0c9a35d92a34bc7086f2jmAJawhhUaOB9c8cfc76a6bfa955.jpg

[此贴子已经被作者于2023-12-17 14:31编辑过]

2023-12-15 20:08
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1089
专家分:2682
注 册:2015-12-30
收藏
得分:0 
程序代码:
*===================================================================================
*作 用:对指定数据表分栏分组分页
*语 法:ColGroup_Convert(cTableMc,nNumber,cOutTableMc,nMaxColGroupRec)
*参数说明:cInTableMc 要转换的数据表,nNumber 分栏分组数,
*参数说明:cOutTableMc 分栏分组后的数据表,nMaxColGroupRec 每页每栏的最大记录数(默认为50)
*返 回 值:返回生成后的新表(返回表的字段数=分栏数*原字段)
*===================================================================================

LPARAMETERS cTableMc,nNumber,cOutTableMc,nMaxColGroupRec
LOCAL xfile,xmaxrec,ii,jj,xfieldupd[nNumber],xfields,xrec,xrow,xjs,xcount

LOCAL xtime
xtime = DATETIME()

xfile = SYS(2015)

xrec = ''    && 结果表结构字段
SELECT &cTableMc
FOR jj=1 TO nNumber
    xfields = ''
    FOR ii=1 TO FCOUNT()
        xfields = xfields + ',' + FIELD(ii) + ' F' + TRANSFORM(ii+(jj-1)*FCOUNT())
    ENDFOR
    xrec = xrec + xfields

    * 生成各栏替换语句xfieldupd[nNumber]
    xfields = ''
    FOR ii=1 TO FCOUNT()
        TEXT TO xfields ADDITIVE PRETEXT 7 NOSHOW TEXTMERGE
            ,F<<TRANSFORM(ii+(jj-1)*FCOUNT())>> WITH <<cTableMc>>.<<FIELD(ii)>>
        ENDTEXT
    ENDFOR 
    xfieldupd[jj] = SUBSTR(xfields,2)
ENDFOR 
xrec = SUBSTR(xrec,2)

* 生成结果表
SELECT &xrec FROM &cTableMc WHERE 1=2 INTO CURSOR &cOutTableMc READWRITE 

SELECT * FROM &cOutTableMc WHERE 1=2 INTO CURSOR &xfile READWRITE     && 每页的表,处理结束插入到结果表

xmaxrec = nNumber*nMaxColGroupRec

xjs = 1
xrec = 1
xcount = 0
SELECT &cTableMc
SCAN 
    IF xjs=1 AND xcount=0    && 计算下一页最大行数
        xmaxrec = MIN(xmaxrec,RECCOUNT()-RECNO()+1)
        xrow = INT(xmaxrec/nNumber) + IIF(MOD(xmaxrec,nNumber)=0,0,1)    && 每页行数
    ENDIF
    xcount = xcount + 1 
    
    SELECT &xfile
    IF xjs=1    && 首栏插入
        APPEND BLANK
    ENDIF
    xfields = xfieldupd[xjs]
    REPLACE &xfields 
    SKIP 
    
    IF xcount=xrow        && 完成一栏
        xcount = 0
        xjs = xjs + 1
        GO TOP 
    ENDIF 
    
    IF xjs>nNumber OR RECNO(cTableMc)=RECCOUNT(cTableMc)        && 完成一页或者结束了
        SELECT &cOutTableMc 
        APPEND FROM DBF(xfile)
        
        SELECT * FROM &xfile WHERE 1=2 INTO CURSOR &xfile READWRITE 
        xjs = 1
    ENDIF 
    SELECT &cTableMc
ENDSCAN
USE IN &xfile

messagebox( DATETIME()-xtime)

RETURN
2023-12-18 09:32
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1730
专家分:3324
注 册:2012-2-29
收藏
得分:0 
回复 38楼 laowan001
高!
2023-12-19 07:25
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:317
专家分:448
注 册:2019-10-11
收藏
得分:0 
把我原来的代码稍加修改
CLOSE all
Create Cursor temp (序号 c(10),品名 c(10), 数量 N(6, 1))
For jj=1 To 133
    Append Blank
ENDFOR
Replace ALL 序号 With '序'+PADL(Alltrim(Str(RECNo())), 5, [00000])
Replace All 品名 With [A]+Padl(Alltrim (Str (RECNo())), 5, [00000])
Replace all 数量 With RECNO()
=ColGroup_Convert("temp","tempbl",3,50)  &&第一个参数可以是工作区编号或表别名
SELECT * FROM tempbl
retu

PROCEDURE ColGroup_Convert(cTableMc,cOutTableMc,nNumber,nMaxColGroupRec)
LOCAL i,j,st,fz
=AFIELDS(fn,cTableMc)
COPY STRUCTURE extended TO ltemp
SELECT 0
USE ltemp
LOCAL aa(nNumber)
FOR i=2 TO nNumber
    APPEND FROM array fn
    FOR j=1 TO FCOUNT(cTableMc)
        aa(i)=IIF(j=1,"F"+TRANSFORM(i*FCOUNT(cTableMc)-2),aa(i)+","+"F"+TRANSFORM(i*FCOUNT(cTableMc)-3+j))
    next
NEXT
REPLACE ALL field_name WITH "F"+TRANSFORM(RECNO())
CREATE (cOutTableMc) from ltemp
SELECT (cTableMc)
SCAN
    st=IIF(MOD(RECNO(),nNumber*nMaxColGroupRec)=1,RECNO(),st)
    fz=IIF(MOD(RECNO(),nNumber*nMaxColGroupRec)=1,CEILING(MIN(RECCOUNT()-RECNO()+1,nNumber*nMaxColGroupRec)/nNumber),fz)
    SCATTER TO tempa
    if MOD(recn()-st,nNumber*fz)<fz
        INSERT INTO (cOutTableMc) FROM ARRAY tempa
    ELSE
        SELECT (cOutTableMc)
        go st/nNumber+mod(RECNO(cTableMc)-st,fz)+1
        GATHER FROM tempa FIELDS &aa(INT((RECNO(cTableMc)-st)/fz)+1)
        SELECT (cTableMc)
    ENDIF
ENDSCAN
retu
2023-12-19 21:14
快速回复:各位大佬,什么方法最好,用时最少,盼赐教,谢谢。
数据加载中...
 
   



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

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