Access交流中心

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

求助:如何通过窗体实现多个条件的查询

蓝天  发表于:2018-05-14 17:33:02  
复制

求助各位大侠:如何通过窗体实现多个条件的查询

 

1)同一个文件夹下有NACCES格式的源数据库,如索赔汇总1,索赔汇总2,索赔汇总3 -------- 等等多个数据库,

每个数据库数据量较大,几百MB以上;

每个数据库里都有一个相同格式的数据表v_gzd_cl_gs(格式相同、数据表名称也相同),表中有N个字段。

想从这些数据库的提取指定的几个字段(同时符合一定的筛选条件的数据),   追加到“索赔数据提取”数据库中

我之前找个一下VBA并编了一个,可以实现一部分功能(详见附件)


现求助各位大侠:

我想改成通过窗体输入查询条件,并实现多个条件查询,该如何写?


上附件:点击下载此附件

 

Top
蓝天 发表于:2018-05-15 08:43:40
Function drsj()
Dim strdir As String
Dim strSQL As String
strdir = Dir(CurrentProject.Path & "\" & "*.mdb", 16)
Do While Len(strdir) <> 0
    If strdir <> "索赔数据提取.mdb" Then
        strSQL = "INSERT INTO v_gzd_cl_gs SELECT v_gzd_cl_gs.服务站号, v_gzd_cl_gs.索赔单号, v_gzd_cl_gs.车型平台, v_gzd_cl_gs.车型, v_gzd_cl_gs.VIN, v_gzd_cl_gs.购车日期, v_gzd_cl_gs.生产日期, v_gzd_cl_gs.修理日期, v_gzd_cl_gs.行驶里程, v_gzd_cl_gs.故障症状名称, v_gzd_cl_gs.索赔类别_单据类型, v_gzd_cl_gs.处理结果, v_gzd_cl_gs.故障描述,v_gzd_cl_gs.故障件名称,v_gzd_cl_gs.工位号, v_gzd_cl_gs.工位名称, v_gzd_cl_gs.材料号, v_gzd_cl_gs.材料名称, v_gzd_cl_gs.材料数, v_gzd_cl_gs.合格数, v_gzd_cl_gs.工时费, v_gzd_cl_gs.材料费 FROM v_gzd_cl_gs IN '" & CurrentProject.Path & "\" & strdir & "'where v_gzd_cl_gs.材料名称 like '*轮胎*' AND v_gzd_cl_gs.车型平台 like 'QCCN200*' or v_gzd_cl_gs.车型平台 like 'QCN300*' "
        CurrentDb.Execute strSQL
    End If
    strdir = Dir
Loop

End Function


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------分割

'where v_gzd_cl_gs.材料名称 like '*轮胎*' AND v_gzd_cl_gs.车型平台 like 'QCCN200*' or v_gzd_cl_gs.车型平台 like 'QCN300*' "


就是想把语句中的Where  查询条件通过窗体实现 ,求助各位大夹!!





SiliconXu 发表于:2018-05-15 08:53:31

使用文本控件,让用户输入(或者选择)“材料名称”、“车型平台1”和“车型平台2”。然后把文本控件的值代入到你的SQL中就可以了。

比如:

"where v_gzd_cl_gs.材料名称 like '*" & txt材料名称.Value & "*' AND v_gzd_cl_gs.车型平台 like '" & txt车型平台1.Value & "*' or v_gzd_cl_gs.车型平台 like '" & txt车型平台2.Value & "*'"

如果用户可能会忽略某个条件,比如没输入“车型平台2”,你可能需要在代码中先进行判断:If IsNull(txt车型平台2) Then



蓝天 发表于:2018-05-15 09:14:10

谢谢2 楼  SilicomXu


能否帮完整的写一下吗?我里面有附件,谢谢!



leoyoung 发表于:2018-05-16 08:59:58

粗体为新增语句。自己摸索一下

...

Dim strWhere As String


With Form_查询窗体
If Not IsNull(.车型平台) Then
strWhere = strWhere & " v_gzd_cl_gs.车型平台 like '*" & .车型平台 & "*' And "

End If

...

'模仿上一条语句,写出其他的条件

...

If Not IsNull(.修理日期开始) And Not IsNull(.修理日期截止) Then

strWhere = strWhere & "v_gzd_cl_gs.修理日期 between #" & .修理日期开始 & "# and #" & .修理日期截止 & "# And "
End If
End With

If Len(strWhere) > 0 Then strWhere = "where " & Left(strWhere, Len(strWhere) - 4)

....

 strSQL = "INSERT INTO v_gzd_cl_gs .....'" & CurrentProject.Path & "\" & strdir & "'" & strWhere

....





蓝天 发表于:2018-05-21 15:18:48

谢谢,4楼 leoyoung  


我根据你的新增了语句,但没有调用成功,即没有先读取窗体里的查询条件,麻烦大侠再帮看看,谢谢!


这是更新后的附件点击下载此附件




leoyoung 发表于:2018-05-21 16:07:30

是我不好,没有写完整,有的误导楼主了,抱歉:

  Dim strWhere As String


With Form_查询窗体
....

'注意控件名称,不要想当然的用字段名称
If Not IsNull(.索赔类型) Then
strWhere = strWhere & " v_gzd_cl_gs.索赔类别_单据类型 like '*" & .索赔类型 & "*' And "
End If
...

If Not IsNull(.修理日期开始) And Not IsNull(.修理日期截止) Then
strWhere = strWhere & "v_gzd_cl_gs.修理日期 between #" & .修理日期开始 & "# and #" & .修理日期截止 & "# And "
End If
End With

If Len(strWhere) > 0 Then strWhere = "where " & Left(strWhere, Len(strWhere) - 4)
    
  '这里开始循环
strdir = Dir(CurrentProject.Path & "\" & "*.mdb", 16)


Do While Len(strdir) <> 0
    If strdir <> "索赔数据提取.mdb" Then
    
        strSQL = "INSERT INTO v_gzd_cl_gs SELECT v_gzd_cl_gs.服务站号, v_gzd_cl_gs.索赔单号, v_gzd_cl_gs.车型平台, v_gzd_cl_gs.车型, v_gzd_cl_gs.VIN, v_gzd_cl_gs.购车日期, v_gzd_cl_gs.生产日期, v_gzd_cl_gs.修理日期, v_gzd_cl_gs.行驶里程, v_gzd_cl_gs.故障症状名称, v_gzd_cl_gs.索赔类别_单据类型, v_gzd_cl_gs.处理结果, v_gzd_cl_gs.故障描述,v_gzd_cl_gs.故障件名称,v_gzd_cl_gs.工位号, v_gzd_cl_gs.工位名称, v_gzd_cl_gs.材料号, v_gzd_cl_gs.材料名称, v_gzd_cl_gs.材料数, v_gzd_cl_gs.合格数, v_gzd_cl_gs.工时费, v_gzd_cl_gs.材料费 FROM v_gzd_cl_gs IN '" & CurrentProject.Path & "\" & strdir & "'" & strWhere
        Debug.Print strSQL
        CurrentDb.Execute strSQL
    End If
    strdir = Dir
Loop
End Function





蓝天 发表于:2018-05-22 11:05:03
谢谢 leoyoung, 感谢,成功了!

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