| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖
标题:请教这段代码错在哪里?
取消只看楼主 加入收藏
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
请教这段代码错在哪里?
以下是组合条件查询表单中“查询”按纽的Click事件代码:
cxtj=ALLTRIM(thisform.edit1.value)
IF cxtj<>null.and.xszd<>null
  SELECT &xszd FROM qyjbxxb,qyzycpk WHERE &cxtj INTO  CURSOR cxjg
ELSE
  =messagebox("未设置查询条件或未选择输出字段!",48 ,"错误信息")
  RETURN
ENDIF
thisform.Visible= .F.
DO form forms\zhcxjg&&zhcxjg是查询结果显示表单

运行时总是出现"未设置查询条件或未选择输出字段!"的提示框,是什么原因?
注:xszd变量在“显示字段选择”列表框的InterativeChange事件中已经赋值:
xszd=''
   FOR xh=1 TO THISFORM.LIST2.LISTCOUNT
      IF thisform.list2.Selected(xh)
          xszd=xszd+","+alltrim(THISFORM.LIST2.list(xh))
      ENDIF
   ENDFOR
xszd=LEFT(xszd,LEN(xszd)-1)   
搜索更多相关主题的帖子: 查询 null 
2013-01-28 09:24
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
以下是引用tlliqi在2013-1-28 09:40:57的发言:

IF cxtj<>null.and.xszd<>null
改为
IF !empt(cxtj) and !empt(xszd)
看看
如此改后,运行时出现错误:
图片附件: 游客没有浏览图片的权限,请 登录注册


挂起后,显示错误行如下:
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-01-28 13:55
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
以下是引用sdta在2013-1-28 11:33:44的发言:

  FOR xh=1 TO THISFORM.LIST2.LISTCOUNT
      IF thisform.list2.Selected(xh)
          xszd=xszd+","+alltrim(THISFORM.LIST2.list(xh))
      ENDIF
   ENDFOR
   xszd=LEFT(xszd,LEN(xszd)-1) && 这样写也是错误的,第一个字符永远是[,]
改为
  FOR xh=1 TO THISFORM.LIST2.LISTCOUNT
      IF thisform.list2.Selected(xh)
          xszd=xszd+alltrim(THISFORM.LIST2.list(xh))+IIF(XH
改后,还是提示错误:
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
2013-01-28 14:05
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
同时已将IF cxtj<>null.and.xszd<>null
改为
IF !empty(cxtj) and !empty(xszd)
2013-01-28 14:06
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
以下是引用taohua300在2013-1-28 10:07:22的发言:

SELECT &xszd FROM qyjbxxb,qyzycpk WHERE &cxtj INTO  CURSOR cxjg
改成
SELECT &xszd. FROM qyjbxxb,qyzycpk WHERE &cxtj. INTO  CURSOR cxjg



IF cxtj<>null.and.xszd<>null
改为
IF !empty(cxtj) and !empty(xszd)
改后提示错误同8楼。
2013-01-28 14:14
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
回复 3楼 taohua300
没有错误提示啊,就是不执行赋值语句xazd=.........,始终只执行else后的语句。
2013-01-28 14:18
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
以下是引用TonyDeng在2013-1-28 14:36:06的发言:

要注意调试技巧:你已经跟踪出出错行,仔细观察那条语句,错误多数出在宏替换上,用MESSAGEBOX()检查xszd的内容,把文本展开到语句上看看。这是用宏常见的错误,写这种代码要非常小心,很多时候贪图简洁用宏语法,后患是无法预料的。
谢谢。想了很久,错误的根源应该在以下这段代码:
   FOR xh=1 TO THISFORM.LIST2.LISTCOUNT
      IF thisform.list2.Selected(xh)
          xszd=xszd+","+alltrim(THISFORM.LIST2.list(xh))
      ENDIF
   ENDFOR
即变量XSZD(显示字段)的赋值有误。
列表框(list2)的列表项是在表单的Init事件中定义的,它们来源于两个数据库表:qyjbxxb,qyzycpk。代码如下:

SELECT qyjbxxb
for i=1 to (FCOUNT()-1)
    thisform.list2.additem(FIELD(i,'qyjbxxb',1))
ENDFOR
SELECT qyzycpk
    for i=3 to (FCOUNT()-1)
thisform.list2.additem(FIELD(i,'qyzycpk',1))
endfor

列表项显示的是字段标题,变量xszd接收的应该是字段名,因此,那段给XSZD赋值的代码肯定是错误的,它不能从表中找到应该显示的字段。现在的问题是,根据这种情况,该语句应该怎样写呢?怎样将列表框中选定的项所对应的表字段名赋值给变量XSZD?
2013-01-28 14:56
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
以下是引用TonyDeng在2013-1-28 15:02:56的发言:

用二维数组记录列表框的内容,数组的一列是显示文字(列表框的记录源不需绑定到字段或什么,直接用数组循环赋值即可,用序号即数组下标来检索),一列是相应的字段名,按照选项的序号来检索字段名。用二维数组,可以储存任意你希望储存的东西,那其实就是一个临时内存数据表。
谢谢。TonyDeng版能以此实例给予指点吗?本人对于数组的理解,实在是太肤浅了,比如定义数组时,下标都不知道如何确定为好,引用也是。
2013-01-28 15:23
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
以下是引用TonyDeng在2013-1-28 15:30:02的发言:

DIMENSION arr[FCOUNT(cAlias),2]
FOR nIndex = 1 TO ALEN(arr, 1)
    arr[nIndex,1] = FIELD(nIndex, cAlias, 1)
    arr[nIndex,2] = FIELD(nIndex, cAlias)
    ThisForm.List1.AddItem(arr[nIndex,1])
NEXT
……
xh = arr[ThisForm.List1.ListIndex,2]
问题1:列表框项目来源于2个表,是不是要建立2个二维数组变量?并将以上代码重复2次?
问题2:这里的变量XH是用于存贮选定字段的字段名吗?

[ 本帖最后由 陶然愚者 于 2013-1-28 16:12 编辑 ]
2013-01-28 16:07
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
是的,我将该段代码修改为:
SELECT qyjbxxb
qyzds=FCOUNT()
SELECT qyzycpk
cpzds=FCOUNT()
DIMENSION arr[(qyzds+cpzds-4),2]
SELECT qyjbxxb
for nIndex=1 to ALEN(arr,1)
   arr[nIndex,1]=FIELD(nIndex,'qyjbxxb',1)
   arr[nIndex,2]='qyjbxxb.'+FIELD(nIndex,'qyjbxxb')
   thisform.list2.additem(arr(nIndex,1))
ENDFOR
SELECT qyzycpk
for nIndex=3 to (cpzds-1)
   arr[nIndex,1]=FIELD(nIndex,'qyzycpk',1)
   arr[nIndex,2]='qyzycpk.'+FIELD(nIndex,'qyzycpk')
   thisform.list2.additem(arr(nIndex,1))
endfor
    然后,将list2的InteractivChange事件代码修改为:
xszd=''
FOR xh=1 TO THISFORM.LIST2.LISTCOUNT
   IF thisform.list2.Selected(xh)
     xszd=arr[thisform.list2.ListIndex,2]+IIF(XH<THISFORM.LIST2.LISTCOUNT,[,],[])
   ENDIF
ENDFOR
运行过程中出现以下错误:
图片附件: 游客没有浏览图片的权限,请 登录注册

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

2013-01-28 17:35
快速回复:请教这段代码错在哪里?
数据加载中...
 
   



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

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