设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3273|回复: 2
打印 上一主题 下一主题

[其它] 求助:如何在SQL中自定义函数?

[复制链接]
跳转到指定楼层
1#
发表于 2012-7-18 17:55:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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

呵呵,没办法拷过来是乱码,大概意思应该。。。。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2012-7-19 07:29:10 | 只看该作者
试了下,模块中自定义函数htoj()可以直接在sql语句中使用。
3#
 楼主| 发表于 2012-7-23 18:16:58 | 只看该作者
呵呵,以解决问题,把查询都更新查询都换成了成批查询,而不是读一条recordset再写一条,呵呵,效率提高太多啦!那个模块级的自定义函数是可以使用的,问题提的不太好,没经过验证就提出来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-6 02:42 , Processed in 0.096364 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表