标题:提示操作符/操作类型不匹配
只看楼主
花痴女王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-3-26
结帖率:60%
已结贴  问题点数:20 回复次数:8 
提示操作符/操作类型不匹配
select 5
dimension temp[3]
select gly_id,mm,gly_name from 管理员信息表;
where gly_id=allt(thisform.text1.value) and mm=allt(thisform.text2.value);
into array temp
if temp[1]=".f."
=messagebox("登录ID或密码错误!",0+16+0,"提示")
thisform.text1.setfocus
else
thisform.release                     
do form 主程序
endif  


提示操作符/操作类型不匹配
挂起的是if temp[1]=".f."
求大神指导!!
搜索更多相关主题的帖子: 主程序 where 
2013-03-30 20:34
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
if temp[1]=.f.
2013-03-30 20:40
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:0 
生成一张临时表来判断,好做一点。如果 id 或密码不存在时,查询的 temp 是空表,所以,也可以用 if eof(),或 if bof() 判断即可。

[ 本帖最后由 qingfameng 于 2013-3-30 21:07 编辑 ]
2013-03-30 20:57
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
select gly_id,mm,gly_name from 管理员信息表;
where gly_id=allt(thisform.text1.value) and mm=allt(thisform.text2.value);
into array temp
执行完上面的代码后,再执行下面的代码
LIST MEMORY LIKE TEMP
在VFP窗口中看下TEMP(1)的结果是什么,就知道是什么原因了
temp[1]=".f."
temp[1]=.f.
TEMP(1)的结果不一定是.F.,可能是别的结果,因此
IF ENDIF 判断结果不一定对



坚守VFP最后的阵地
2013-03-30 20:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
楼主的代码也有问题,如果按照楼主的代码
select gly_id,mm,gly_name from 管理员信息表;
where gly_id=allt(thisform.text1.value) and mm=allt(thisform.text2.value);
into array temp
看,应该是个二维数组,但在前面用dimension 命令创建的dimension TEMP(3)数组也可能会出现问题

坚守VFP最后的阵地
2013-03-30 21:03
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:20 
INTO Destination

指定在何处保存查询结果。如果在同一个查询中同时包括了 INTO 子句和 TO 子句,则 TO 子句不起作用。如果没有包括 INTO 子句,查询结果显示在“浏览”窗口中。也可以用 TO 将查询结果定向输出到打印机或文件。

Destination 可以是下列子句之一:

ARRAY ArrayName ,将查询结果保存到变量数组中。如果查询结果中不包含任何记录,则不创建这个数组。


CURSOR CursorName将查询结果保存到临时表中。如果指定了一个已打开表的名称,则 Visual FoxPro 产生错误信息。执行完 SELECT 语句后,临时表仍然保持打开、活动但只读。一旦关闭临时表,则自动删除它。临时表作为 SORTWORK 指定驱动器上的一个临时文件存在。
包含NOFILTER是为了创建一个能用在后来的询问中的指针。在Visual燜oxPro以前的版本需要一个额外的常量或表达式作为过滤器去创建一个能用在后来的询问中的指针。

SELECT *, .T. FROM customers INTO CURSOR myquery

包含NOFILTER能够减少询问的发生是因为临时表是建立在磁盘上的,当临时表被删除,指针就要被关闭。

DBF TableName | TABLE TableName ,将查询结果保存到一个表中。如果指定的表已经打开,并且 SET SAFETY 设置为 OFF,则 Visual FoxPro 在不给出警告的情况下改写该表。如果没有指定扩展名,Visual FoxPro 指定表的扩展名是 .DBF。SELECT 语句执行结束后,表仍然保持打开活动状态。
包含DATABASE DatabaseName 以指定添加了表的数据库。包含NAMELongTableName 可以为该表命一个最多可包括128个字符的并且可以在数据库中代替短名字的长名。
建议楼主看下VFP帮助中关于SQL-SELECT命令的使用方法

坚守VFP最后的阵地
2013-03-30 21:04
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
select gly_id,mm,gly_name from 管理员信息表;
where gly_id=allt(thisform.text1.value) and mm=allt(thisform.text2.value);
into array temp
if TYPE(TEMP)=[U] &&数组不存在
   =messagebox("登录ID或密码错误!",0+16+0,"提示")
   thisform.text1.setfocus
else
   thisform.release                    
   do form 主程序
endif  

运行这段代码看看

坚守VFP最后的阵地
2013-03-30 21:12
花痴女王
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2013-3-26
得分:0 
回复 7楼 sdta
貌似解决了!!

还有一个问题。。为什么我进入主界面以后登陆界面没有自动关闭
设置的是
else
 thisform.release
 do form 主程序
2013-03-30 21:45
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
传上表单

坚守VFP最后的阵地
2013-03-30 21:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402426-1-1.html




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

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