哦,马虎了,是 into dbf c:\temp\&crfm(n) select &crfm(n) brow
谢谢各位! 我的browse是临时加上的,只不过是为了体现问题。 忘了报告了,其实是后续代码中有用“select * from c:\temp\&crfm(n)”类似的代码出错,才发现此问题的。 出错提示都是:此对象的数据源必须是一个变量的引用。 但是用"brow fiel 职号,姓名"这样指定字段的语句是可以执行的。
**************** local crfm(3) crfm(1)="加班费" crfm(2)="罚款" crfm(3)="嘉奖" local tablename for n=1 to 3 crffld="gz."+crfm(n) tablename = "c:\temp\"+crfm(n) SELECT Gz.职号, Gz.姓名, Gz.职务,round(({^2002-05-01}-员工.入厂日期)/30,0) as 工龄,; SUM(IIF(月份=5 and 年份="2000",&crffld,0)) as _2000年5月,sum(IIF(月份=6 and 年份="2000",&crffld,0)) as _2000年6月,; SUM(IIF(月份=7 and 年份="2000",&crffld,0)) as _2000年7月,sum(IIF(月份=8 and 年份="2000",&crffld,0)) as _2000年8月,; SUM(IIF(月份=9 and 年份="2000",&crffld,0)) as _2000年9月,sum(IIF(月份=10 and 年份="2000",&crffld,0)) as _2000年10月,; SUM(IIF(月份=11 and 年份="2000",&crffld,0)) as _2000年11月,sum(IIF(月份=12 and 年份="2000",&crffld,0)) as _2000年12月,; SUM(IIF(月份=1 and 年份="2001",&crffld,0)) as _2001年1月,sum(IIF(月份=2 and 年份="2001",&crffld,0)) as _2001年2月,; SUM(IIF(月份=3 and 年份="2001",&crffld,0)) as _2001年3月,sum(IIF(月份=4 and 年份="2001",&crffld,0)) as _2001年4月,; SUM(IIF(月份=5 and 年份="2001",&crffld,0)) as _2001年5月,sum(IIF(月份=6 and 年份="2001",&crffld,0)) as _2001年6月,; SUM(IIF(月份=7 and 年份="2001",&crffld,0)) as _2001年7月,sum(IIF(月份=8 and 年份="2001",&crffld,0)) as _2001年8月,; SUM(IIF(月份=9 and 年份="2001",&crffld,0)) as _2001年9月,sum(IIF(月份=10 and 年份="2001",&crffld,0)) as _2001年10月,; SUM(IIF(月份=11 and 年份="2001",&crffld,0)) as _2001年11月,sum(IIF(月份=12 and 年份="2001",&crffld,0)) as _2001年12月,; SUM(IIF(月份=1 and 年份="2002",&crffld,0)) as _2002年1月,sum(IIF(月份=2 and 年份="2002",&crffld,0)) as _2002年2月,; SUM(IIF(月份=3 and 年份="2002",&crffld,0)) as _2002年3月,sum(IIF(月份=4 and 年份="2002",&crffld,0)) as _2002年4月; FROM c:\gz RIGHT OUTER JOIN e:\crf\data\员工 ; ON Gz.职号 = 员工.职号; WHERE 员工.离职日期 = ctod(" "); AND (.not.("开除"$Gz.职务)); AND (.not.("劝退"$Gz.职务)); AND (.not.("辞"$Gz.职务)); and gz.姓名=员工.姓名; GROUP BY Gz.职号, Gz.姓名; ORDER BY Gz.职号; into dbf &tablename. brow endfor ********************
to: nononono(null,null) 采用你的方式还是错误依旧,VFP提示“此对象的数据源必须是一个变量的引用”,我也不知问题出在哪里?但我把上述代码不用循环、不用变量,直接使用字段名替换select…………中的变量就一切正常。
如果SELECT中不能用变量,用这种方式试试: SELECT * INTO 文件 COPY FILE 文件 TO 变量 多试几个语句,肯定有语句能支持变量的。
into dbf c:\temp\&crfm(n)
select &crfm(n)
brow
我的browse是临时加上的,只不过是为了体现问题。
忘了报告了,其实是后续代码中有用“select * from c:\temp\&crfm(n)”类似的代码出错,才发现此问题的。
出错提示都是:此对象的数据源必须是一个变量的引用。
但是用"brow fiel 职号,姓名"这样指定字段的语句是可以执行的。
local crfm(3)
crfm(1)="加班费"
crfm(2)="罚款"
crfm(3)="嘉奖"
local tablename
for n=1 to 3
crffld="gz."+crfm(n)
tablename = "c:\temp\"+crfm(n)
SELECT Gz.职号, Gz.姓名, Gz.职务,round(({^2002-05-01}-员工.入厂日期)/30,0) as 工龄,;
SUM(IIF(月份=5 and 年份="2000",&crffld,0)) as _2000年5月,sum(IIF(月份=6 and 年份="2000",&crffld,0)) as _2000年6月,;
SUM(IIF(月份=7 and 年份="2000",&crffld,0)) as _2000年7月,sum(IIF(月份=8 and 年份="2000",&crffld,0)) as _2000年8月,;
SUM(IIF(月份=9 and 年份="2000",&crffld,0)) as _2000年9月,sum(IIF(月份=10 and 年份="2000",&crffld,0)) as _2000年10月,;
SUM(IIF(月份=11 and 年份="2000",&crffld,0)) as _2000年11月,sum(IIF(月份=12 and 年份="2000",&crffld,0)) as _2000年12月,;
SUM(IIF(月份=1 and 年份="2001",&crffld,0)) as _2001年1月,sum(IIF(月份=2 and 年份="2001",&crffld,0)) as _2001年2月,;
SUM(IIF(月份=3 and 年份="2001",&crffld,0)) as _2001年3月,sum(IIF(月份=4 and 年份="2001",&crffld,0)) as _2001年4月,;
SUM(IIF(月份=5 and 年份="2001",&crffld,0)) as _2001年5月,sum(IIF(月份=6 and 年份="2001",&crffld,0)) as _2001年6月,;
SUM(IIF(月份=7 and 年份="2001",&crffld,0)) as _2001年7月,sum(IIF(月份=8 and 年份="2001",&crffld,0)) as _2001年8月,;
SUM(IIF(月份=9 and 年份="2001",&crffld,0)) as _2001年9月,sum(IIF(月份=10 and 年份="2001",&crffld,0)) as _2001年10月,;
SUM(IIF(月份=11 and 年份="2001",&crffld,0)) as _2001年11月,sum(IIF(月份=12 and 年份="2001",&crffld,0)) as _2001年12月,;
SUM(IIF(月份=1 and 年份="2002",&crffld,0)) as _2002年1月,sum(IIF(月份=2 and 年份="2002",&crffld,0)) as _2002年2月,;
SUM(IIF(月份=3 and 年份="2002",&crffld,0)) as _2002年3月,sum(IIF(月份=4 and 年份="2002",&crffld,0)) as _2002年4月;
FROM c:\gz RIGHT OUTER JOIN e:\crf\data\员工 ;
ON Gz.职号 = 员工.职号;
WHERE 员工.离职日期 = ctod(" ");
AND (.not.("开除"$Gz.职务));
AND (.not.("劝退"$Gz.职务));
AND (.not.("辞"$Gz.职务));
and gz.姓名=员工.姓名;
GROUP BY Gz.职号, Gz.姓名;
ORDER BY Gz.职号;
into dbf &tablename.
brow
endfor
********************
采用你的方式还是错误依旧,VFP提示“此对象的数据源必须是一个变量的引用”,我也不知问题出在哪里?但我把上述代码不用循环、不用变量,直接使用字段名替换select…………中的变量就一切正常。
SELECT * INTO 文件
COPY FILE 文件 TO 变量
多试几个语句,肯定有语句能支持变量的。
是由于“_2000年10月”这样的字串超过了10个字节,而VFP不支持超过10字节的字段名。