注册 登录
编程论坛 VFP论坛

如何解决宽度不够显示*号

chychychy 发布于 4 天前 09:29, 127 次点击
只有本站会员才能查看附件,请 登录

*直接用SELECT...INTO CURSOR 自动创建临时表时,根据第一条记录的数值长度分配字段宽度。如果后续记录的数值位数超过该宽度,就会显示 *。
一、改为先建立空表,后插入数据,为何还是*号
二、如何用简洁方式在查询表尾部加一统计行,只合计数值列的值
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

程序代码:

* 先创建空表结构
CREATE CURSOR 考生选考情况统计 ;
    (外语语种 C(20),    代码 C(10),    选考科目组 C(20),    考生数 N(10),;
    物理 N(8),; && 直接定义15位宽度
    化学 N(8),;
    生物 N(8),;
    政治 N(8),;
    历史 N(8),;
    地理 N(8))
BROWSE
* 插入数据
INSERT INTO 考生选考情况统计 ;
    SELECT 外语语种, 代码, 选考科目组, 考生数,;
    IIF('04' $ 代码, 考生数, 0),;
    IIF('05' $ 代码, 考生数, 0),;
    IIF('06' $ 代码, 考生数, 0),;
    IIF('07' $ 代码, 考生数, 0),;
    IIF('08' $ 代码, 考生数, 0),;
    IIF('09' $ 代码, 考生数, 0);
    FROM 考生选考情况
* 在数据表最后插入一条记录

BROWSE



[此贴子已经被作者于2025-4-22 09:31编辑过]

6 回复
#2
fyyylyl4 天前 16:08
INSERT INTO 考生选考情况统计 ;
    SELECT 外语语种, 代码, 选考科目组, 考生数,;
    IIF('04' $ 代码, 考生数, 0000000000),;
    IIF('05' $ 代码, 考生数, 0000000000),;
    IIF('06' $ 代码, 考生数, 0000000000),;
    IIF('07' $ 代码, 考生数, 0000000000),;
    IIF('08' $ 代码, 考生数, 0000000000),;
    IIF('09' $ 代码, 考生数, 0000000000);
    FROM 考生选考情况
#3
chychychy4 天前 17:39
回复 2楼 fyyylyl
感谢,这样可以。
但是继续求教,我用10个0,结果如图1,前面10后面的8;我用5个0,如图2,前面5后面8,为什么会这样?什么原因啊
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

程序代码:

SELECT 外语语种, 代码, 选考科目组, 考生数,;
    IIF('04' $ 代码, 考生数, 00000) AS 物理,;
    IIF('05' $ 代码, 考生数, 00000) AS 化学,;
    IIF('06' $ 代码, 考生数, 00000) AS 生物,;
    IIF('07' $ 代码, 考生数, 00000) AS 政治,;
    IIF('08' $ 代码, 考生数, 00000) AS 历史,;
    IIF('09' $ 代码, 考生数, 00000) AS 地理;
    FROM 考生选考情况



[此贴子已经被作者于2025-4-23 16:02编辑过]

#4
schtg3 天前 07:47
可以试一试(VFP9):
只有本站会员才能查看附件,请 登录

程序代码:
select 外语语种,代码,选考科目组,考生数,;
    cast(iif('04' $ 代码, 考生数, 0) as n(10,0)) as 物理,;
    cast(iif('05' $ 代码, 考生数, 0) as n(10,0)) as 化学,;
    cast(iif('06' $ 代码, 考生数, 0) as n(10,0)) as 生物,;
    cast(iif('07' $ 代码, 考生数, 0) as n(10,0)) as 政治,;
    cast(iif('08' $ 代码, 考生数, 0) as n(10,0)) as 历史,;
    cast(iif('09' $ 代码, 考生数, 0) as n(10,0)) as 地理 ;
    from 考生选考情况
#5
chychychy3 天前 15:31
回复 4楼 schtg
谢谢,运行可以,又学用一个函数。
我用deepseek,在查询文件后增加一汇总行,请教有没有更简洁的方式
程序代码:

SELECT 外语语种,代码,选考科目组,考生数,;
    CAST(IIF('04' $ 代码, 考生数, 0) AS N(10,0)) AS 物理,;
    CAST(IIF('05' $ 代码, 考生数, 0) AS N(10,0)) AS 化学,;
    CAST(IIF('06' $ 代码, 考生数, 0) AS N(10,0)) AS 生物,;
    CAST(IIF('07' $ 代码, 考生数, 0) AS N(10,0)) AS 政治,;
    CAST(IIF('08' $ 代码, 考生数, 0) AS N(10,0)) AS 历史,;
    CAST(IIF('09' $ 代码, 考生数, 0) AS N(10,0)) AS 地理 ;
    INTO CURSOR 考生选考情况统计 READWRITE;
    FROM 考生选考情况
BROWSE

* 计算各科总和
SUM 物理, 化学, 生物, 政治, 历史, 地理 ;
    TO ARRAY aTotals

* 插入汇总行
INSERT INTO 考生选考情况统计 ;
    (外语语种, 代码, 选考科目组, 考生数, 物理, 化学, 生物, 政治, 历史, 地理) ;
    VALUES ;
    ('汇总行', ' ', '总计各科目人数',0,;
    aTotals[1], aTotals[2], aTotals[3], aTotals[4], aTotals[5], aTotals[6])
BROWSE



[此贴子已经被作者于2025-4-23 16:01编辑过]

#6
schtg3 天前 16:52
回复 5楼 chychychy
将 插入汇总行 改为下句(不要计算各科总和),试一试哈
INSERT INTO 考生选考情况统计(外语语种,选考科目组,物理, 化学, 生物, 政治, 历史, 地理) ;
       SELECT '汇总行','总计各科目人数',SUM(物理),SUM(化学),SUM(生物),SUM(政治),SUM(历史),SUM(地理) FROM 考生选考情况统计



[此贴子已经被作者于2025-4-23 16:55编辑过]

#7
chychychy前天 08:36
回复 6楼 schtg
谢谢,完全符合我需要。简洁,学习了,原来还可以这样写入。
1