| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 325 人关注过本帖
标题:麻烦请问代码问题出在哪?
只看楼主 加入收藏
dragonman19
Rank: 1
等 级:新手上路
帖 子:74
专家分:5
注 册:2014-2-20
结帖率:45.45%
收藏
已结贴  问题点数:20 回复次数:7 
麻烦请问代码问题出在哪?
我做了一个LIST见下图


图片附件: 游客没有浏览图片的权限,请 登录注册
  
 图片看不到的话,其实就是数据表里有几十种资产名称,用户就通过LIST选择需要筛选的资产名称,获得所需要的数据表

筛选命令框代码:
   PUBLIC cwh
thisform.grid1.RecordSource=""

LOCAL  cmb(999)
cwh=" "



tjshu=thisform.list6.ListCount
cwh ="zcname like('%'+ALLTRIM(thisform.list6.list(1))+'%')"
IF  tjshu >1
   
     FOR i= 2 TO tjshu


   cmb(i)=ALLTRIM(thisform.list6.list(i))

  cwh="  "+cwh+"  "+"  or  "+" zcname like('%'+ cmb(i)+'%')"


next

ELSE





endif

 SELECT * FROM ch WHERE  cwh   into dbf temptemp    &&&&&执行到这行报错,---"SQL:WHERE字句无效"
 
  请问哪里有问题呢?
搜索更多相关主题的帖子: list like WHERE thisform 代码 
2024-05-31 15:15
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:707
专家分:2833
注 册:2018-3-13
收藏
得分:0 
先 messagebox(cwh) 看看过滤条件有没有语法错误
cwh 没问题的话: SELECT * FROM ch WHERE  &cwh   into dbf temptemp

这家伙很懒,啥也没留下
2024-05-31 16:10
dragonman19
Rank: 1
等 级:新手上路
帖 子:74
专家分:5
注 册:2014-2-20
收藏
得分:0 
如果这样的话--- SELECT * FROM ch WHERE  &cwh   into dbf temptemp
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


cwh 的值
图片附件: 游客没有浏览图片的权限,请 登录注册
2024-05-31 16:26
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:707
专家分:2833
注 册:2018-3-13
收藏
得分:0 
zcname like('%'+ALLTRIM(thisform.list6.list (1)+'%') or zoname like('%'+ cmb(i)+ '%') or zcname like('%'+ cmb(i) + '%')
这是最后的 cwh ? 这作为筛选条件也太离谱了吧

你要组合出来的 cwh 应该是这样
(zcname like '%更衣柜%') or (zcname like '%双节柜抽屉%') or (zcname like '%台式机%') or ...
最后再
SELECT * FROM ch WHERE  (&cwh) into dbf temptemp

[此贴子已经被作者于2024-5-31 17:01编辑过]


这家伙很懒,啥也没留下
2024-05-31 16:58
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:707
专家分:2833
注 册:2018-3-13
收藏
得分:0 
按照你前面组合出 cwh 的方案,怎么着也该大概是这样

cwh = "(zcname like '%" + ALLTRIM(thisform.list6.list(1)) + "%')"
IF  tjshu >1
     FOR i= 2 TO tjshu
        cmb(i) = ALLTRIM(thisform.list6.list(i))
        cwh = cwh + " or (zcname like '%" + cmb(i) + "%')"
     next

随便瞅瞅就知道这种方案还有其他漏洞,例如,一个都没选的情况

[此贴子已经被作者于2024-5-31 17:12编辑过]


这家伙很懒,啥也没留下
2024-05-31 17:07
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:707
专家分:2833
注 册:2018-3-13
收藏
得分:20 
最好习惯使用 textmerge 文本合并语句或函数,查错就容易多了

tjshu = thisform.list6.ListCount
If tjshu < 1
    MessageBox('没有选择要查询什么', 16)
Else
    cwh = ''
    For i = 1 to thisform.list6.ListCount
        cmb(i) = ALLTRIM(thisform.list6.list(i))
        cwh = cwh + Textmerge(" or (zcname like '%<<cmb(i)>>%')")
    Next
    cwh = Substr(cwh, 5)
    SELECT * FROM ch WHERE (&cwh) into dbf temptemp
    。。。
EndIf

单个条件复杂时用 textmerge 语句方式更容易看出毛病在哪(特别是条件中可能同时存在 ' " [] 这些符号时),例如:
    cwh = ''
    For i = 1 to thisform.list6.ListCount
        cmb(i) = ALLTRIM(thisform.list6.list(i))
        Text to cc Noshow textmerge pretext 1+2+4+8
            or (zcname like '%<<cmb(i)>>%')
            or (1 == 0)
            。。。以及其他可能的条件,每行写一个条件都行
        EndText
        cwh = cwh + ' ' + cc
    Next
    cwh = Substr(cwh, 5)
    。。。



[此贴子已经被作者于2024-5-31 17:54编辑过]


这家伙很懒,啥也没留下
2024-05-31 17:35
dragonman19
Rank: 1
等 级:新手上路
帖 子:74
专家分:5
注 册:2014-2-20
收藏
得分:0 
感谢楼上,代码通过了。
  汗颜自己用了这么多年,还是三脚猫
2024-06-03 11:21
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:66
帖 子:1089
专家分:2682
注 册:2015-12-30
收藏
得分:0 
VFP的&是其他语言所不具备的,具有超级的灵活性和适应性,但是如果用不好,也会让人抓狂的。
建议组合SQL时可以一部分一部分加到变量里,尽量提高程序的可读性,查错也会比较方便,否则以后看程序都可以看不懂了
慢慢练吧,会好的
2024-06-03 15:50
快速回复:麻烦请问代码问题出在哪?
数据加载中...
 
   



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

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