Office中国论坛/Access中国论坛

标题: 求助:如何在SQL中自定义函数? [打印本页]

作者: zrj898    时间: 2012-7-18 17:55
标题: 求助:如何在SQL中自定义函数?
本帖最后由 zrj898 于 2012-7-18 18:51 编辑

如何自定义函数,就像在SQL语句中使用的tan()、trim()等函数一样可以包含在SQL语句中的函数。而不是模块定义的那种函数。
有一个角度的数据格式是度分秒的,从一个表更新到另一个表,需要转换成弧度格式,那就要用到转换函数,函数是在模块中定义的,用一个更新查询是完成不了的。效率很低,请问有没有效率高的办法。
Public Sub ¼ì²é·½Î»¶ÁÈ¡()
    Dim DbTemp As DAO.Database
    Dim Rst01 As DAO.Recordset2
    Dim Sql As String
    Dim tempFW As Double
    Dim tempID As Long
        On Error Resume Next
        Call ¶ÁÈ¡µ±Ç°²ÎÊý
        If XmLx = "¶þά" Then
            Sql = "UPDATE (((²âÏßÉè¼ÆÊý¾Ý AS a LEFT JOIN Éè¼ÆÎïÀíµãÁбí AS d ON a.ÖØÐÂÉè¼ÆID = d.ID) LEFT JOIN ÏîÄ¿ AS e ON a.ÏîÄ¿ID = e.ID) "
            Sql = Sql & "LEFT JOIN [Ïß(Êø)-ÎïÀíµã¹Øϵ±í] AS f ON d.¹Øϵ±íID = f.ID) LEFT JOIN ²âÏßÉè¼Æ²ÎÊý AS g ON f.Éè¼Æ²ÎÊýID = g.ID "
            Sql = Sql & "SET a.¼ì²é·½Î»=g.²âÏß·½Î» "
            Sql = Sql & "WHERE e.&micro;±&Ccedil;°&Ntilde;&iexcl;&Ocirc;&ntilde;<>False"
            DoCmd.RunSQL Sql
        Else
            Sql = "UPDATE &sup2;&acirc;&Iuml;&szlig;&Eacute;è&frac14;&AElig;&Ecirc;&yacute;&frac34;&Yacute; AS a LEFT JOIN &Iuml;&icirc;&Auml;&iquest; AS e ON a.&Iuml;&icirc;&Auml;&iquest;ID = e.ID SET a.&frac14;ì&sup2;é·&frac12;&Icirc;&raquo; = " & str(PYFfw) & " WHERE e.&micro;±&Ccedil;°&Ntilde;&iexcl;&Ocirc;&ntilde;<>False"
            DoCmd.RunSQL Sql
        End If
        Set DbTemp = CurrentDb
            Sql = "SELECT b.ID, b.&frac14;ì&sup2;é·&frac12;&Icirc;&raquo; FROM &Iuml;&icirc;&Auml;&iquest; AS a INNER JOIN &sup2;&acirc;&Iuml;&szlig;&Eacute;è&frac14;&AElig;&Ecirc;&yacute;&frac34;&Yacute; AS b ON a.ID = b.&Iuml;&icirc;&Auml;&iquest;ID where a.&micro;±&Ccedil;°&Ntilde;&iexcl;&Ocirc;&ntilde;"
        Set Rst01 = DbTemp.OpenRecordset(Sql)
        Rst01.MoveFirst
        Do While Not Rst01.EOF
            tempID = Rst01.Fields("ID").Value: tempFW = Rst01.Fields("&frac14;ì&sup2;é·&frac12;&Icirc;&raquo;").Value
            tempFW = JtoH(tempFW)
            Sql = "update &sup2;&acirc;&Iuml;&szlig;&Eacute;è&frac14;&AElig;&Ecirc;&yacute;&frac34;&Yacute; AS a SET a.&frac14;ì&sup2;é·&frac12;&Icirc;&raquo; = " & str(tempFW) & " where a.ID=" & str(tempID)
            DoCmd.RunSQL Sql
            Rst01.MoveNext
        Loop
        Rst01.Close
        DbTemp.Close
End Sub

呵呵,没办法拷过来是乱码,大概意思应该。。。。
作者: zrj898    时间: 2012-7-19 07:29
试了下,模块中自定义函数htoj()可以直接在sql语句中使用。
作者: zrj898    时间: 2012-7-23 18:16
呵呵,以解决问题,把查询都更新查询都换成了成批查询,而不是读一条recordset再写一条,呵呵,效率提高太多啦!那个模块级的自定义函数是可以使用的,问题提的不太好,没经过验证就提出来了。




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