| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1515 人关注过本帖, 1 人收藏
标题:ADO 查询语法问题
取消只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏(1)
已结贴  问题点数:20 回复次数:3 
ADO 查询语法问题
如果说要查询时间并列出到Combobox内~

要怎么才能只用ADO查询~
就能让年和月放在两个不同的Combox内(资料内月份不一定固定是从1~12)?

还是只能查询完全部年和月后再用程式语法去切割年和月?

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


但是原始资料中时间格式为:

MONTH
201201
201201
201202
201202
201202
201202
201202
201202
201202
201202
201202
201202
201202
201202
201202
201203
201203
201203
201203
201203
201204
201204
201310
201310
201310
201310
201310
201310
201310
201310
201310
201310
201310
201310
201411
201411
201411
201411
201411
201411
201411
201411
201411
201411
搜索更多相关主题的帖子: 切割 资料 
2017-02-09 14:07
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
我是这样写,用程式去过滤资料,只是不知道能不能使用ADO直接找出来~
这是ADO查询EXCEL不是ADO查询SQL~

程序代码:
Private Sub ComboTime_GotFocus(Index As Integer)
Dim First As String, Second As String
Dim i As Integer, year As Integer

    ComboTime(Index).Clear
    
    Set rs = New ADODB.Recordset
    rs.Open "SELECT " + Title(3) + " FROM [" & SheetName & "$] group by " + Title(3), cn, adOpenStatic
    
    For i = 0 To rs.RecordCount - 1
        If Index = 0 Then
            If i = 0 Then
                ComboTime(Index).AddItem " "
                First = Mid$(rs.Fields.Item(Title(3)), 1, 4)
            ElseIf i = rs.RecordCount - 1 Then
                Second = Mid$(rs.Fields.Item(Title(3)), 1, 4)
            End If
        Else
            If ComboTime(0).Text <> "" Then
                year = CInt(ComboTime(0).Text)
                If i = 0 Then
                    ComboTime(Index).AddItem " "
                End If
                If Mid$(rs.Fields.Item(Title(3)), 1, 4) = year Then
                    ComboTime(Index).AddItem Mid$(rs.Fields.Item(Title(3)), 5)
                End If
            End If
        End If
        rs.MoveNext
    Next i
    
    If Index = 0 Then
        For i = CInt(First) To CInt(Second)
            ComboTime(Index).AddItem i
        Next i
    End If
    
End Sub

不要選我當版主
2017-02-09 15:24
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用xzlxzlxzl在2017-2-10 10:54:53的发言:

这个应该可以用两个查询语句完成,首先做年的查询,代码如下:
rs.Open "SELECT left(" + Title(3) + ",4) as nian FROM [" & SheetName & "$] group by left(" + Title(3) + ",4)", cn, adOpenStatic
ComboTime(0).clear
while not rs.eof
  ComboTime(0).additem rs("nian") '这样会将你示例数据的2012、2013、2014添加进用来表示年的combbox里
  rs.movenext
wend
 
在ComboTime_click事件里写下述代码,可以把选择的年份包含的月份添加进另一个combbox里
 
private sub ComboTime_click(Index As Integer)
  if index=0 then
    rs.Open "SELECT right(" + Title(3) + ",2) as yue FROM [" & SheetName & "$] where "+Title(3)+"like " + combotime(0) + "* group by right(" + Title(3) + ",2)", cn, adOpenStatic
    ComboTime(1).clear
    while not rs.eof
      ComboTime(1).additem rs("yue") '这样会将你示例数据相应年份所包含的月份添加进用来表示月的combbox里,如2012年就只有01至04
      rs.movenext
    wend
  endif
end sub

好像不行~但是不知道哪里有问题~
程序代码:
Dim cn As New ADODB.Connection, RS As New ADODB.Recordset, DDX As Integer, NYFX() As String, I As Integer

Private Sub A()
    RS.Open "SELECT left(" + "MONTH" + ",4) as nian FROM [" & "RawData" & "$] group by left(" + "MONTH" + ",4)", cn, adOpenStatic
    ComboTime(0).Clear
    While Not RS.EOF
        ComboTime(0).AddItem RS("nian")
        RS.MoveNext
    Wend
    Set RS = Nothing
End Sub

Private Sub ComboTime_Click(Index As Integer)
Dim Title(3) As String

    Title(3) = "MONTH"
    If Index = 0 Then
        RS.Open "SELECT right(" + Title(3) + ",2) as yue FROM [" & SheetName & "$] where " + Title(3) + " like " + ComboTime(0).Text + "* group by right(" + Title(3) + ",2)", cn, adOpenStatic
        ComboTime(1).Clear
        While Not RS.EOF
            ComboTime(1).AddItem RS("yue")
            RS.MoveNext
        Wend
        Set RS = Nothing
    End If
End Sub

Private Sub Form_Load()
    cn.Open "Data Source=" + App.Path + "\11111.xlsx" + ";" + "Provider=" + "Microsoft.ACE.OLEDB.12.0;" + "Extended Properties=" + "'Excel 12.0;" + "HDR=" + "Yes" + "IMEX=" + "1';"
    Call A
End Sub

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


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


不要選我當版主
2017-02-15 18:05
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用xzlxzlxzl在2017-2-15 20:28:49的发言:

我用你的数据做个示范工程供参考,不知道是不是你想要的效果,效果图如下:
 
示范工程:
 
所有代码如下:
Dim con As New ADODB.Connection
Private Sub addyue()
  '添加年份对应的月份
  Dim rs As New Recordset, sql As String


1.工程可以正常执行,所以之前无法运行的原因是?
2.因为资料上日期栏位名称为MONTH,但是month预设是DateTime的Members,所以在Rignt()内写MONTH都会自动变成month,
  所以 left([month],4) 和 right([month],2) 内的month是指兰为名称还是VB6参数?
3."nian"(年) 和 "yue"(月) 是ADO内建可辨识参数吗?


不要選我當版主
2017-02-16 19:17
快速回复:ADO 查询语法问题
数据加载中...
 
   



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

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