如何在查询中调用自定义的函数

adog8310 2009-09-17 09:58:31
我在模块里建了一个函数 想要对查询的结果进行排序(是对每个结果自身进行排序,不是对所有值的总排序)
但在查询里面调用的时候总是提示该函数未定义 相当郁闷 浪费了一晚上了 不知道是我的函数定义有问题 还是Access里面查询不能调用自定义函数 请各位大侠指教啊

表table1
Field1 Field2
1 acdb
2 3gaf

查询
select field1, Sortdata(field2)
from table1


函数

Public Function Sortdata(OriStr As String) As String

Dim re, ch As String
Dim i, j, k, charnum As Integer

charnum = Len(OriStr)

i = 1
j = 0
k = 1
re = ""

While Len(OriStr) > 0
Begin

ch = SUBSTRING(OriStr, 1, 1)
j = 1
While j <= Len(OriStr)
Begin
If ASCII(SUBSTRING(OriStr, j, 1)) < ASCII(ch) Then
Begin
ch = SUBSTRING(OriStr, j, 1)
k = j
End
j = j + 1
End
re = re + ch
OriStr = stuff(OriStr, k, 1, "")

End

Sortdata = OriStr

End Function
...全文
317 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
msf108 2009-09-18
  • 打赏
  • 举报
回复
代码语法不对,而且调用的几个函数都不是VBA里面的,根本就没法运行。
access里面获取某字符串中部分字符用mid函数,获取字符串中首字母的字符代码用asc。
先把逻辑简化,一步一步测试,没问题了再逐步添加需求。
如果搞不定就把你想实现的功能贴出来,可能别人有多种方法都能实现。



ewang11 2009-09-18
  • 打赏
  • 举报
回复
请具体说明你的要求,别人才方便修改
hustfang2003 2009-09-18
  • 打赏
  • 举报
回复
死机的话,或者说死循环的话,你单步一下,看是怎么死在里面的。
ACMAIN_CHM 2009-09-17
  • 打赏
  • 举报
回复
你想实现什么功能?

不需要上传你的MDB了,只需要把代码贴出来就行了。
adog8310 2009-09-17
  • 打赏
  • 举报
回复
我也找到自己代码里的一大堆毛病了
现在语法没错误
能执行
但是一运行查询就跟死机一样
感觉程序逻辑有错误 不知道是不是死循环
可我才疏学浅 怎么看都看不出来
请再帮我纠正一下把
不然今晚真是睡不着觉了
拜谢

最新修改过的
http://access911.net/csdn/FileDescription.asp?mdb=2009-9-17&id=22
ACMAIN_CHM 2009-09-17
  • 打赏
  • 举报
回复
你的代码中错误太多了.

帮你把代码改了一部分,但没改完。 现在函数可以找到了,只是函数内部的代码有问题。
http://access911.net/csdn/FileDescription.asp?mdb=2009-9-17&id=21&mode=3
adog8310 2009-09-17
  • 打赏
  • 举报
回复
好人做到底 帮我改改 我删来删去还是不对。。。
ewang11 2009-09-17
  • 打赏
  • 举报
回复
access 中不支持BEGIN ..END 这样的写法
adog8310 2009-09-17
  • 打赏
  • 举报
回复
http://access911.net/csdn/FileDescription.asp?mdb=2009-9-17&id=20
我把修改后的数据库文件上传了,麻烦再看看哪还有问题吧,多谢
adog8310 2009-09-17
  • 打赏
  • 举报
回复
的确是有问题
但我把模块名改了之后 执行查询又会报出

编译错误:
子过程或函数未定义

什么原因呢
ACMAIN_CHM 2009-09-17
  • 打赏
  • 举报
回复
你的模块名和函数名重复了! 都是 Sortdata , 改一下就行了。 (你可以再建一个模块,名字 myfun, 然后把 function Sortdata 复制过来,然后删除模块Sortdata .


当您的问题得到解答后请及时结贴.
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
adog8310 2009-09-17
  • 打赏
  • 举报
回复
数据库文件已上传,麻烦大侠帮我看看,先拜谢了
http://access911.net/csdn/FileDescription.asp?mdb=2009-9-17&id=19
ACMAIN_CHM 2009-09-17
  • 打赏
  • 举报
回复
建议上传一个测试用的MDB文件。
可以上传到 http://www.access911.net/csdn
adog8310 2009-09-17
  • 打赏
  • 举报
回复
函数是在模块中创建的
我在查询中调用 不需要用ADO
郁闷的是明明都在access中调用 还是说未定义
ACMAIN_CHM 2009-09-17
  • 打赏
  • 举报
回复
Public Function Sortdata(OriStr As String) As String

这个你放在哪儿了? 模块中还是窗窗体中?

你在哪儿调用?是在ACCESS的查询中,还是ADO或DAO中?

ACCESS的VBA自定义函数,仅在ACCESS内可见。ADO中不可用。

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧