代码操作 ACCESS时为什么老出现XXX函数未定义错误?

本文解答了在不同环境下遇到函数未定义错误的原因及解决方法,包括Access数据库移植、跨平台SQL调用问题及自定义函数的环境兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么老出现XXX函数未定义错误?

问题:


1、为什么以前运行正常的Access数据库,搬到另一台电脑上老出现XXXX函数未定义错误?

2、为什么我在Access中调试通过的sql语句,在VB/ASP/JSP/PHP/VB.NET/SQL SERVER中调用却老是出现XXX函数未定义错误?

3、在ACCESS中的模块中自定义了一个getV函数,在ACCESS查询中执行SQL语句
select getV(5) from T 
这条语句能执行,并且能得到数据,
但是在Adodc1中
Adodc1.RecordSource ="select getV(5) from T "
Adodc1.Refresh
结果出错了,显示的错误为“getV未定义函数”。

 

回答:

1、转到VBE界面,菜单 工具 -> 引用 中看一下有没有丢失的引用,如果有,重新引用一下即可。特别是出错信息提示一些 VBA 的基本函数未定义,比如 Left Date Right 等函数未定义时,90%的情况丢失引用丢失

2、Access中执行 jet sql 语句时使用的很多函数是Access自带的函数,只允许使用在Access界面下,一旦你使用了其他软件做界面,那么很多本来在 access+jet sql环境中能够运行的函数将成为错误根源。

3、Access中编写的自定义函数必须由ACCESS环境支持,在其他环境中根本不能使用。

特别注意:许多在VB代码中可以运行的函数并不一定能嵌入到jet sql语句中

以下列出 jet sql 中的资料供参考:

ODBC 标量函数
Microsoft® Jet SQL 支持使用由 ODBC 为标量函数定义的语法。例如这一查询:

SELECT DAILYCLOSE, DAILYCHANGE FROM DAILYQUOTE
WHERE {fn ABS(DAILYCHANGE)} > 5

凡是一种股票价格变化的绝对值大于 5 的列会返回。

 ODBC 定义的标量函数的子集受支持。下表列出了受支持的函数。

关于使函数包含于 SQL 语句的变元的描述和逸出语法的详尽解释,请看 ODBC文献。 

字符串函数
ASCII LENGTH RTRIM 
CHAR LOCATE SPACE 
CONCAT LTRIM SUBSTRING 
LCASE RIGHT  UCASE 
LEFT     


数字函数
ABS FLOOR SIN 
ATAN LOG SQRT 
CEILING POWER TAN 
COS RAND MOD 
EXP SIGN   


时间和日期函数
CURDATE DAYOFYEAR MONTH 
CURTIME YEAR WEEK 
NOW HOUR QUARTER 
DAYOFMONTH MINUTE MONTHNAME 
DAYOFWEEK SECOND DAYNAME 


数据类型变换
CONVERT 字符串文字能被转换成下列数据类型:SQL_FLOAT, SQL_DOUBLE, SQL_NUMERIC, SQL_INTEGER, SQL_REAL, SQL_SMALLINT, SQL_VARCHAR和 SQL_DATETIME. 


请参考:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odappepr_3.asp
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript></script>

最终的解决方案是当你在 VB / C# 等语言中取出数据赋值到变量后再对变量进行函数操作

在Windows系统中使用Python3的multiprocessing.Pool模块,由于操作系统对于进程创建的差异,可能导致在使用pickle进行函数序列化和反序列化出现函数未定义错误。为了解决这个问题,你可以在`if __name__ == '__main__':`的保护下进行multiprocessing的初始化和执行。这种方式确保了只有在主程序入口点执行的代码才会被新创建的进程执行,从而避免了因全局变量不被继承导致的pickle错误。在具体的代码实现中,你需要确保所有的multiprocessing相关的实例化、进程池的创建和任务的提交操作都位于这个保护块内。这样,当Python解释器在Windows平台上运行,它会正确地处理模块的作用域问题,保证进程间的正确通信和数据传递。具体操作如下所示: 参考资源链接:[Windows环境下Python3 multiprocessing.Pool问题及解决](https://wenku.youkuaiyun.com/doc/288yz8oqz8?spm=1055.2569.3001.10343) ```python from multiprocessing import Pool def f(x): return x * x if __name__ == '__main__': pool = Pool(processes=4) result = pool.map(f, range(100)) pool.close() pool.join() ``` 在上述代码中,所有与Pool相关的操作都被包含在了`if __name__ == '__main__':`块内。这样可以防止在子进程中执行不应该执行的代码,确保所有必要的函数和变量在子进程中可用。通过这种方式,你可以有效地处理因pickle导致的函数未定义错误,并在Windows环境下顺利使用multiprocessing进行多进程编程。 参考资源链接:[Windows环境下Python3 multiprocessing.Pool问题及解决](https://wenku.youkuaiyun.com/doc/288yz8oqz8?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值