#2
megnhai198132021-12-11 23:05
|
有表T1,用于记录每个项目的报价记录,基本字段A存放项目信息,字段B存放价格,另有字段C记录价格是否有效(是否型,默认值1/“有效”),设窗体、文本框,指定为[Forms].[数据计算].[Text1]。
C字段的计算规则:
每个项目按价格排序,最高价格的20%记录应被去除,方法将其对应的C字段置为为价格部分置为无效0/“否”,同时小数第1位四舍五入至整数位,即ROUND(该项目记录总数*0.2)。
重要事项:
这个TOP后面的N不是固定值,每个项目都不一样,即上面说的ROUND(该项目记录总数*0.2)
目的:根据排序,筛选出上限为ROUND()计算值的所有记录并作UPDATE。
方法1:在CLICK事件过程中
因为可以用DCount()函数取得项目记录数,并且可以设定变量赋值,偿试用select top n *,语法后DoCmd.Runsql ,发现这里不支持该语法。
方法2:使用更新查询(设窗体的文本框已输入指定数据)
单独语句:SELECT COUNT(*) FROM T1 WHERE A=Forms.数据计算.Text1; ‘可以执行,并得到记录总数
单独语句:SELECT TOP 2 * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC; ‘语法可以执行,此处的2只是为了试验语法是否可行
1、偿试用DCount函数替换这个N,不考虑ROUND运算:
SELECT TOP DCount("*","T1",'"&[Forms].[数据计算].[Text1]&"') * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC; ‘无法执行,提示:SELECT 子句中包含一个保留字、拼写错误或丢失的参数,或标点符不正确。
2、偿试SELECT 嵌套,不考虑ROUND运算
SELECT TOP (SELECT COUNT(*) FROM T1 WHERE A=Forms.数据计算.Text1) * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC; ‘同样无法执行,报同样的错
3、偿试在窗体用DCOUNT取得记录总数并存变量INT2,不考虑ROUND运算
一、CLICK代码有:
int2 = DCount("*", "REC", "PRONAM = '" & STR1 & "' ") '输入框已赋值给变量TTR1
MsgBox int2 '取得记录数并输出,已取到正确值。
DoCmd.OpenQuery "XXX" '存放SQL语句的查询名称为XXX
二、XXX查询代码
SELECT TOP [Forms].[数据计算].int2 * FROM T1 WHERE A=Forms].[数据计算].[Text1] ORDER BY B DESC; '无法执行/保存,报同样的错
跪求解法?