Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> VBA  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702112
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

新手来看:学会组织调试程序

作者:cg1  摘自:access911.net  :cg1  更新日期:2005-4-27  浏览人次:

 

例子一:

城市.Value = DLookup("城市", "城市表", "省份='" & 省份.Value & "'")

上述语句出错,到底为什么呀?
其实只要学会调试程序就可以了,上述代码中能出错的只有3个地方
1、城市.Value
可能的错误是:不存在这个控件,不能定义这个控件。。。。
2、省份.Value 
可能的错误是:不存在这个控件,不能读取这个控件,这个控件的值为 NULL 值
3、DLOOKUP 函数出错
可能的错误是:城市表不存在,省份.Value的值是 NULL 导致错误,城市字段不存在,省份字段不存在或者不是文本,按条件未查到数据

可以尝试用 Debug.Print 来调试
Debug.Print 城市.Value
Debug.Print 省份.Value
Debug.Print DLookup("城市", "城市表", "省份='" & 省份.Value & "'")
城市.Value = DLookup("城市", "城市表", "省份='" & 省份.Value & "'")

调试结果,最后发现是“省份”这个字段根本不存在

 


例子二:

看一下一个提问者和我的对答:

○℃のWater(22174312):
        Jls = DCount("id", "Tb_客户单价", "客户名称 ='" & Kfmc1 & "' and 面纸 ='" & Mz1 & "' and 里纸 ='" & Lz1 & "' and 瓦纸 ='" & Wz1 & "' and 夹心 ='" & Jx1 & "' and 瓦楞层数 ='" & Wllx & "' and 长加 =" & C1 & " and 宽加 =" & K1 & " and 单价 =" & DJ)
为什么Jls=0时会出错啊。
说是你取消了上次操作

为____痴狂(34257038):
代码错误。
里面这么长,随便哪个出错都会出错的。代码不应该这么写,不方便调试
strConditions =  "客户名称 ='" & Kfmc1 & "' and 面纸 ='" & Mz1 & "' and 里纸 ='" & Lz1 & "' and 瓦纸 ='" & Wz1 & "' and 夹心 ='" & Jx1 & "' and 瓦楞层数 ='" & Wllx & "' and 长加 =" & C1 & " and 宽加 =" & K1 & " and 单价 =" & DJ
Debug.Print strConditions 
Jls = DCount("id", "Tb_客户单价", strConditions)
然后用select查一下,是否出错
然后再看你把代码放 哪里了

○℃のWater(22174312):
select查一下没有出错。我的意思是得到表里是否存在这样的记录。。他得到的是0是对的。为什么会说你取消了上次的操作。

该网友将数据库打包后发给我了。

为____痴狂(34257038):
select查一下没有出错-----结果都出来了?
strConditions =  "客户名称 ='" & Kfmc1 & "' and 面纸 ='" & Mz1 & "' and 里纸 ='" & Lz1 & "' and 瓦纸 ='" & Wz1 & "' and 夹心 ='" & Jx1 & "' and 瓦楞层数 ='" & Wllx & "' and 长加 =" & C1 & " and 宽加 =" & K1 & " and 单价 =" & DJ
Debug.Print strConditions 
Jls = DCount("id", "Tb_客户单价", strConditions)
叫你查,你仔细查了么?
结果一次一次证明我的调试方法完全正确,只是提问者不肯仔细查

正确的调试方法是将 strConnditions 打印出来,比如是:

客户姓名='aaa'

然后按 DLOOKUP 的参数形式组织成 SQL 语句,根据这个语句新建一个查询,运行这个查询,看结果是否正确
select id from Tb_客户单价 where 客户姓名='aaa'

调试结果,该网友写错了 DCount("ID",....) 的参数,“Tb_客户单价”表中根本不存在 id 字段,其实表中是“单价ID”字段,该网友打字的时候疏忽了。

 

例子三::

有网友说以下代码提示 SQL 语句语法错误
CurrentProject.Connection.Execute "update 表1 set 字段1" & Me.控件1.Value & " where 条件字段=" & Me.控件2.Value & ""

粗看之下大家会认为“字段1" & Me.控件1.Value & "” 这里错误了,但是碰巧的是 Me.控件1.Value 正好为 "=12",语法正确!那么错误到底在哪里呢?其实要调试简单就不要这样写代码,应该按如下方法写:

Dim strSQL as String
strSQL = "update 表1 set 字段1" & Me.控件1.Value & " where 条件字段" & Me.控件2.Value & ""
Debug.Print strSQL   '将 SQL 语句打印到立即窗口
CurrentProject.Connection.Execute strSQL

得到结果为:

update 表1 set 字段1=12 where 条件字段=0

但是“条件字段”是文本类型,所以出错了,于是将代码改为

CurrentProject.Connection.Execute "update 表1 set 字段1" & Me.控件1.Value & " where 条件字段='" & Me.控件2.Value & "'"

即可。

 


本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接


 

 
相关文章
     没有手动相关文章
     关于ActiveX 组件的调试,用vc工具调试ActiveXdll
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利