Office中国论坛/Access中国论坛

标题: 求助:DAO查询代码转ADO [打印本页]

作者: cocopig    时间: 2012-9-5 14:07
标题: 求助:DAO查询代码转ADO
已有DAO写好交叉表查询代码,为日后升级至服务器,拟用ADO改写连接方式。请求提示recordset和connection的正确表达。。。。。代码如下:

Private Sub cmdStatics_Click()

     Dim strWhere As String
     Dim strSql As String
     Dim qdf As DAO.QueryDef    
   
     strWhere = ""
   
    If Not IsNull(Me.txtInsYear) Then
        strWhere = strWhere & "(year([SupervisalPaperList.InspectionDate]) = '" & Me.txtInsYear & "') and "
    End If
   
    If Not IsNull(Me.cmbMonth) Then
        strWhere = strWhere & "(month(InspectionDate) = '" & Me.cmbMonth & "') and "
    End If
   
    If Not IsNull(Me.cmbSupervisor) Then
        strWhere = strWhere & "([Supervisor] = '" & Me.cmbSupervisor & "') and "
    End If
   
    If Len(strWhere) > 0 Then
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If
   
    If Len(strWhere) > 0 Then
        strSql = "TRANSFORM Count(SupervisalPaperList.ProjectName) AS ProjectName之计算 "
        strSql = strSql & "SELECT SupervisalPaperList.Supervisor, Count(SupervisalPaperList.ProjectName) AS 发整改总数 "
        strSql = strSql & "FROM SupervisalPaperList WHERE ((SupervisalPaperList.Reversion) = '是 ') and "
        strSql = strSql & "(" & strWhere & ")"
        strSql = strSql & " GROUP BY SupervisalPaperList.Supervisor "
        strSql = strSql & "PIVOT Format([InspectionDate],'yyyy - mm');"
        
    Else
        strSql = "TRANSFORM Count(SupervisalPaperList.ProjectName) AS ProjectName之计算 "
        strSql = strSql & "SELECT SupervisalPaperList.Supervisor, Count(SupervisalPaperList.ProjectName) AS 发整改总数 "
        strSql = strSql & "FROM SupervisalPaperList WHERE ((SupervisalPaperList.Reversion) = '是 ')"
        strSql = strSql & " GROUP BY SupervisalPaperList.Supervisor "
        strSql = strSql & " PIVOT Format([InspectionDate],'yyyy - mm');"
    End If

    Set qdf = CurrentDb.QueryDefs("CrossSupervisalPaperList")
    qdf.SQL = strSql
    qdf.Close
   
    Set qdf = Nothing

   
    '显示交叉表的内容
    Me.fmSubSupervisalPaperList.SourceObject = ""
    Me.fmSubSupervisalPaperList.SourceObject = "query.CrossSupervisalPaperList"
   
    '  清除Me.txtCount的controlSource
    Me.txtCount.ControlSource = ""
    Me.txtCount = DCount("*", "CrossSupervisalPaperList")


End Sub


作者: zhuyiwen    时间: 2012-9-5 15:47
恐怕你的想法是好的,就这个样用ADO,只怕你最终还是要失望,因为,SQL Server 不支持交叉查询的语法,只能通过存储过程来实现交叉查询的结果。

你的红色部分,要用 ADOX 来替代, 只是写法有很大的差异。
作者: roych    时间: 2012-9-5 18:26
本帖最后由 roych 于 2012-9-5 18:29 编辑
每个人都会经过这个阶段,见到DAO,就想知道ADO是什么。我很想告诉他,可能学过ADO,你会发现没什么特别。回望之下,可能会觉得DAO更好用。

——《东邪西毒》Access版

作者: cocopig    时间: 2012-9-5 19:06
roych 发表于 2012-9-5 18:26
——《东邪西毒》Access版

不是说DAO不好,将来我可能要面对的是ADO.NET,这个DAO可不能在它里面运行吧。。。。
作者: layaman_999    时间: 2012-9-6 09:32
远虑亦忧,无虑亦忧,未雨绸缪,冬天只有三个月,可勤劳的小松鼠却每年都要埋3年都吃不完的松果。
等到DAO淘汰的时候再升级吧。
把XP做得太完美了,微软后悔了。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3