Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

查询出错提示及导出EXCEL出错提示

峰回路转  发表于:2013-08-19 10:51:21  
复制

各位老师,在编写一个查界面时出现以下2个问题,请指教!现附2图分明说明:

1、第一次查询正常,在按“清除条件”后,再次执行查询时,出现“类型不匹配”,除了日期查询可以外,按分类和出版社就会出现问题(源表这两个字段为文本型)

2、在得到查询结果后,导出到EXCEL时,出现提示“集合中找不到项目”(关于Microsoft DAO 3.6 Object Library. 已安装)

 

Top
cspa 发表于:2013-08-19 13:56:55
把你的查询和导出的SQL或VBA语句传上来看看。

峰回路转 发表于:2013-08-19 14:20:10

好的,谢谢指点。

查询语句:

下面是我的导出EXCEL语句:



cspa 发表于:2013-08-19 16:53:14

1、关于第一个问题:从图上看,“出版日期”字段是文本型的,你改为日期型的试试。见下图

 

2、关于第二个问题,把“Set qdf = CurrentDb.QueryDefs("查询结果")”改为:“Set qdf = CurrentDb.CreateQueryDef("查询结果")”。

另:此句:CurrentProject.Path & "\查询结果.xls" & format(Date,“yyyymmdd”) & ".xls",建议改为:CurrentProject.Path & "\查询结果" & format(Date,“yyyymmdd”) & ".xls"



峰回路转 发表于:2013-08-19 17:53:12

你好,我测试了。第一个问题没有解决,现把“清除条件”代码附上,看有没有问题?

======================================

Me.Combokind = ""
Me.Combohouse = ""
Me.开始日期 = ""
Me.结束日期 = ""
Me.Combokind.SetFocus
Me.图书查询子窗体.Form.Filter = ""
Me.图书查询子窗体.Form.FilterOn = False
 '在子窗体取消筛选后要运行一下自编子程序CheckSubformCount()
    Call CheckSubformCount
Me.图书查询子窗体.Requery
===========================================

第二个问题应该快解决了,麻烦再看下,第一次运行导出EXCEL成功,但同时出现“文件错误,可能某些数字格式已丢失”提示,但在EXCEL中检查是导出完整的。

第二次再查询导出就不行了,提示”对象查询结果已存在“



cspa 发表于:2013-08-19 20:00:39

关于第一个问题,因为提示是“数据类型不匹配”,建议你从表的字段数据类型设置和查询对变量的引用格式方面查找原因,如可能请把实例传上来,否则不好判断到底是哪里的问题。

关于第二个问题:1、“文件错误,可能某些数字格式已丢失”提示可能是你的excel兼容性造成的。

                        2、第二次再查询导出就不行了,提示”对象查询结果已存在“,是因为你上次输出时已建立了一个名为“查询结果”的查询,需要先删除。在你的代码

Dim strWhere, strSQL As String后面加上以下语句:

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("select * from MSysObjects where name='查询结果'")
If rs.RecordCount = 1 Then DoCmd.DeleteObject acQuery, "查询结果"
rs.Close
Set rs = Nothing

......


 

 



cspa 发表于:2013-08-19 21:13:23
http://www.accessoft.com/article-show.asp?id=8581

峰回路转 发表于:2013-08-19 22:28:29
你好,谢谢您的指点,第二个问题已经解决,根据你的提示,我正在找表字段与查询的原因!

峰回路转 发表于:2013-08-20 13:22:48

卡壳了,我重新检查了源表字段数据类型:1---分类,文本,组合框 ,行来源为固定值

                                                     2---出版社,文本,文本框

                                                     3---出版日期,日期型,默认值#某年某月某日#,掩码:0000-99-99;0:_

现在查询界面的三个条件设置:             1---分类,组合框,行来源为表查询

                                                     2---出版社,组合框,行来源为表查询

                                                     3---起止日期,为两个文本框,数据格式为还y-mm-dd

还有个问题,我在"清除条件"中加入以下代码,提示"函数未定义",该怎样改正?是否与错误产生有关?


'这里将使用FOR EACH CONTROL的方法来清除控件的值
'================================


    Dim ctl As Control
 For Each ctl In Me.Controls


        根据ctl的控件类型来选择
        Select Case ctl.ControlType
        Case acTextBox    '是文本框,要清空(注意,子窗体下面还有两个锁定的文本框不能赋值)
            If ctl.Locked = False Then ctl.Value = Null
        Case acComboBox    '是组合框,也要清空
            ctl.Value = Null
          '  其它类型的控件不处理
     End Select
    Next
谢谢指点!



zhaoyoulong 发表于:2013-08-20 17:48:22
把字段名或控制件名都加上 NZ() 试一试,象你这种情况,也可能是一个NULL值造成的

峰回路转 发表于:2013-08-23 14:46:25
举个NZ()用法例子吧

zhaoyoulong 发表于:2013-08-23 17:55:03
nz([分类]) like '*f*'

峰回路转 发表于:2013-08-23 22:11:23
我把字窗体中的源表查询字段(分类、出版社、出版日期)都用NZ(),还是不行!

cspa 发表于:2013-08-24 00:38:37

需要换个思路考虑问题了。麦田老师曾举过一个类型错误的例子:http://www.accessoft.com/article-show.asp?id=7449,其中是误将dao记录集定义为ado记录集。

1、你上次贴出的查询代码并不完整,未显示代码开头的数据定义部分,但根据后续代码,你并未使用dao或ado,所以误用的可能性不大。

2、我看你的清除条件代码中调用了一个自编子程序CheckSubformCount(),不知其中是否用到dao或ado,是否有误用?

还有一点就是,你在代码调试时,先不要屏蔽错误,可先将on error goto...语句封上。当代码出错时,按“调试”按钮,看错误出在那条语句上(黄*颜*色*标识的语句),据此可判断问题所在。(你判断不了,起码可截屏并发上来,让大家给你诊断一下)或将你的实例发上来也行。现在是信息不足,大家乱猜,自然影响问题的解决。

呵呵,贴子审查还真严,不加*还把我的回复认为有问题给屏蔽**了



zch 发表于:2013-08-24 08:44:07

看来你的问题是应该出现在不选择日期的时候发生的,在代码中日期比较的那一段前面加一个条件,有两个日期字段不为空就进行比较,任意一个为空就跳过



峰回路转 发表于:2013-08-24 12:24:58

1、谢谢各位的热情帮助,问题已解决!特别感谢cspa兄弟耐心的指点,给我提出了很好的思路和错误检查习惯“在代码调试时,先不要屏蔽错误,可先将on error goto...语句封上。当代码出错时,按“调试”按钮,看错误出在那条语句上(黄*颜*色*标识的语句),据此可判断问题所在。”

2、zch兄弟的方法已试,虽然不成功(不出现“类型不匹配”提示,但另外两个条件的查询没反映了),但对在多条件判断时提供了一种思路。

3、下面是我的解决方法,希望各位新手不要再犯同样的错误!

a、通过调试,发现最开始错误出现在日期判断比较处(见前面的代码),开始日期、结束日期用了isnull判断和CDate()转化数据类型,而我的另外两个判断条件分类和出版社为字符型,所以出错。

b、再把代码中判断开始日期和结束日期文本框是否为空语句:“if not isnull(Me.XX日期) then"修改为"“if (Me.XX日期)<>"" then"即可




总记录:15篇  页次:1/1 9 1 :