ms=ALLTRIM(pro.mc)+'数量'
mj=ALLTRIM(pro.mc)+'金额'
dm_s='x.sum_'+ALLTRIM(pro.dyzd)
dm_p='x.price_'+ALLTRIM(pro.dyzd)
最先用:
SELECT x.rqi as 日期,x.bh as 合同编号,x.sheng as 省,x.shi as 市,x.xxmc as 学校名称,x.dls as 代理商,x.bsc as 办事处,&dm_s as &ms, &dm_p as &mj,x.bzhu as 备注 FROM gmxx x WHERE &dm_s<>0 ORDER BY 1 ASC INTO CURSOR tmp
报:不能识别的短语或关键字
后来将ms和mj前的&去掉,即:
SELECT x.rqi as 日期,x.bh as 合同编号,x.sheng as 省,x.shi as 市,x.xxmc as 学校名称,x.dls as 代理商,x.bsc as 办事处,&dm_s as ms, &dm_p as mj,x.bzhu as 备注 FROM gmxx x WHERE &dm_s<>0 ORDER BY 1 ASC INTO CURSOR tmp
程序没有报错,但运行出来的字段名不是我想要的,成了ms 和 mj
后经人指点,改成:
cSq="SELECT x.rqi as 日期,x.bh as 合同编号,x.sheng as 省,x.shi as 市,x.xxmc as 学校名称,x.dls as 代理商,x.bsc as 办事处,"+dm_s+" as "+ms+","+dm_p+" as "+mj+",x.bzhu as 备注 FROM gmxx x WHERE &dm_s<>0 ORDER BY 1 ASC INTO CURSOR tmp"
&cSq
运行到&cSq,报‘不能识别的短语或关键字’
将&cSq改成 eval(cSq) 及 Execscript(cSq),均报‘语法错误’
请问:select 语句中的字段名的别名不能是变量吗?
15 个解决方案
#1
Create Cursor T1 (A1 I)
For m.lnI=1 To 2
Insert Into T1 Values (1*m.lnI)
Endfor
ms="A"+'2'
mj="A"+'1'
dm_s='x.A'+"1"
Select &mj. As &ms. From T1 x Where &dm_s.<>0
For m.lnI=1 To 2
Insert Into T1 Values (1*m.lnI)
Endfor
ms="A"+'2'
mj="A"+'1'
dm_s='x.A'+"1"
Select &mj. As &ms. From T1 x Where &dm_s.<>0
#2
所以写法1应该没错,应该是全角 ,的原因吧。
#3
cSq="Select "+mj+" As "+ms+" From T1 x Where "+dm_s+"<>0"
&cSq
这样也可以,所以问题都是出在其他地方,如全角逗号等。
&cSq
这样也可以,所以问题都是出在其他地方,如全角逗号等。
#4
不是,我一般根本不用全角,况且我什么都没动,只是将&去掉,就对了,加&就不对,好奇怪啊
#5
你看看我的例子与的区别。
#6
另外检查一下变量名与字段名有没有重复的。
#7
不过,我在单步调试时,发现cSq中的内容不全
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?
#8
_CLIPTEXT=cSq
然后打开VFP中文本粘帖,看看内容是否有问题?
#9
VFP语句的长度的确是有限制的,似乎应该是限制在255字符内。
#10
没有具体的根据,似乎是记忆有误。
#11
text to m.cSQL noshow textmerge
SELECT x.rqi as 日期, x.bh as 合同编号, x.sheng as 省, x.shi as 市, x.xxmc as 学校名称, ;
x.dls as 代理商, x.bsc as 办事处, <<dm_s>> as <<ms>>, <<dm_p>> as <<mj>>, x.bzhu as 备注 ;
FROM gmxx x WHERE <<dm_s>> <>0 ORDER BY 1 ASC INTO CURSOR tmp
endtext
* MessageBox( m.cSQL )
ExecScript( m.cSQL )
#12
VFP 一行文字(字符)的最大长度 255
如:
csql="这个字符最大为255"
如果超过255,分开两个字符串即可,如:字符串长度为275,就分成2个相等或一个255,另一个20都可以:
csql="这个字符最大为255"+"这个字符最大为20"
或
csql="这个字符最大为100"+"这个字符最大为155"
...
如:
csql="这个字符最大为255"
如果超过255,分开两个字符串即可,如:字符串长度为275,就分成2个相等或一个255,另一个20都可以:
csql="这个字符最大为255"+"这个字符最大为20"
或
csql="这个字符最大为100"+"这个字符最大为155"
...
#13
我已照11楼的试过,依然报‘语法错误’
另外1楼的程序我已在我机器上运行,没有问题,但我那个select语句照1楼的方式试时,就报‘不能识别的短语或关键字’,
用_CLIPTEXT=cSq 查看csq中的内容,发现内容是完整的(可能语句太长,在监视窗口中没有显示全),另外也检查了全角半角,发现也不是全角半角的问题,真是奇怪,到底是哪里的问题,难道是安装的8.0版本有问题?那为何1楼代码在我机器上运行又是对的?
另外1楼的程序我已在我机器上运行,没有问题,但我那个select语句照1楼的方式试时,就报‘不能识别的短语或关键字’,
用_CLIPTEXT=cSq 查看csq中的内容,发现内容是完整的(可能语句太长,在监视窗口中没有显示全),另外也检查了全角半角,发现也不是全角半角的问题,真是奇怪,到底是哪里的问题,难道是安装的8.0版本有问题?那为何1楼代码在我机器上运行又是对的?
#14
把你得到的 cSql 内容贴上来看看
#15
我的问题已经解决,不是语句的问题,是字段本身的问题。谢谢各位老师热心解答。
#1
Create Cursor T1 (A1 I)
For m.lnI=1 To 2
Insert Into T1 Values (1*m.lnI)
Endfor
ms="A"+'2'
mj="A"+'1'
dm_s='x.A'+"1"
Select &mj. As &ms. From T1 x Where &dm_s.<>0
For m.lnI=1 To 2
Insert Into T1 Values (1*m.lnI)
Endfor
ms="A"+'2'
mj="A"+'1'
dm_s='x.A'+"1"
Select &mj. As &ms. From T1 x Where &dm_s.<>0
#2
所以写法1应该没错,应该是全角 ,的原因吧。
#3
cSq="Select "+mj+" As "+ms+" From T1 x Where "+dm_s+"<>0"
&cSq
这样也可以,所以问题都是出在其他地方,如全角逗号等。
&cSq
这样也可以,所以问题都是出在其他地方,如全角逗号等。
#4
不是,我一般根本不用全角,况且我什么都没动,只是将&去掉,就对了,加&就不对,好奇怪啊
#5
你看看我的例子与的区别。
#6
另外检查一下变量名与字段名有没有重复的。
#7
不过,我在单步调试时,发现cSq中的内容不全
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?
就到‘into cur’,后面用...表示,cursor都没有显示全,只显示到cur,难道是太长所致?
#8
_CLIPTEXT=cSq
然后打开VFP中文本粘帖,看看内容是否有问题?
#9
VFP语句的长度的确是有限制的,似乎应该是限制在255字符内。
#10
没有具体的根据,似乎是记忆有误。
#11
text to m.cSQL noshow textmerge
SELECT x.rqi as 日期, x.bh as 合同编号, x.sheng as 省, x.shi as 市, x.xxmc as 学校名称, ;
x.dls as 代理商, x.bsc as 办事处, <<dm_s>> as <<ms>>, <<dm_p>> as <<mj>>, x.bzhu as 备注 ;
FROM gmxx x WHERE <<dm_s>> <>0 ORDER BY 1 ASC INTO CURSOR tmp
endtext
* MessageBox( m.cSQL )
ExecScript( m.cSQL )
#12
VFP 一行文字(字符)的最大长度 255
如:
csql="这个字符最大为255"
如果超过255,分开两个字符串即可,如:字符串长度为275,就分成2个相等或一个255,另一个20都可以:
csql="这个字符最大为255"+"这个字符最大为20"
或
csql="这个字符最大为100"+"这个字符最大为155"
...
如:
csql="这个字符最大为255"
如果超过255,分开两个字符串即可,如:字符串长度为275,就分成2个相等或一个255,另一个20都可以:
csql="这个字符最大为255"+"这个字符最大为20"
或
csql="这个字符最大为100"+"这个字符最大为155"
...
#13
我已照11楼的试过,依然报‘语法错误’
另外1楼的程序我已在我机器上运行,没有问题,但我那个select语句照1楼的方式试时,就报‘不能识别的短语或关键字’,
用_CLIPTEXT=cSq 查看csq中的内容,发现内容是完整的(可能语句太长,在监视窗口中没有显示全),另外也检查了全角半角,发现也不是全角半角的问题,真是奇怪,到底是哪里的问题,难道是安装的8.0版本有问题?那为何1楼代码在我机器上运行又是对的?
另外1楼的程序我已在我机器上运行,没有问题,但我那个select语句照1楼的方式试时,就报‘不能识别的短语或关键字’,
用_CLIPTEXT=cSq 查看csq中的内容,发现内容是完整的(可能语句太长,在监视窗口中没有显示全),另外也检查了全角半角,发现也不是全角半角的问题,真是奇怪,到底是哪里的问题,难道是安装的8.0版本有问题?那为何1楼代码在我机器上运行又是对的?
#14
把你得到的 cSql 内容贴上来看看
#15
我的问题已经解决,不是语句的问题,是字段本身的问题。谢谢各位老师热心解答。