CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他数据库开发 >  Access

ACCESS中使用SQL语句的一个奇怪的问题

楼主cjx020(大雄)2006-11-21 12:40:03 在 其他数据库开发 / Access 提问

写的SQL语句中有用到round函数,Access中使用新建查询语句,可以执行。后来相同的语句在vb中使用Microsoft.Jet.OLEDB.4.0的方式连接数据库执行,却提示出错:error为:  
  “表达式中   'round'   函数未定义。”请问是不是程序连接数据库时有什么替代“round”函数。这个问题有点类似   在access中符号“%”不能用,“*”却能用,在模糊查询时。  
  问题点数:100、回复次数:12Top

1 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-21 12:41:36 得分 0

参考版主文章:为什么老出现XXX函数未定义错误?  
   
  http://access911.net/fixhtm/77FAB51E14DC.htm?tt=为什么老出现XXX函数未定义错误?《函数》Top

2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-21 12:46:20 得分 0

 
  Access使用的是Jet-SQL。  
   
   
  JET   SQL   帮助(jet4   access2000)下载地址  
   
  http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=  
   
  Top

3 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-21 12:47:08 得分 0

看看jet-SQL的保留字:  
   
  A  
   
  ABSOLUTE   ANY    
  ADD   ARE    
  ADMINDB   AS    
  ALL   ASC    
  Alphanumeric   —   See   TEXT   ASSERTION    
  ALTER   AUTHORIZATION    
  ALTER   TABLE     AUTOINCREMENT   —   See   COUNTER    
  And     Avg    
  AS        
   
   
  B-C  
   
  BEGIN   COLLATION    
  Between   COLUMN    
  BINARY   COMMIT    
  BIT     COMP,   COMPRESSION    
  BIT_LENGTH   CONNECT    
  BOOLEAN   —   See   BIT   CONNECTION    
  BOTH   CONSTRAINT,   CONSTRAINTS      
  BY   CONTAINER    
  BYTE   CONTAINS    
  CASCADE   CONVERT    
  CATALOG   Count    
  CHAR,   CHARACTER   —   See   TEXT   COUNTER    
  CHAR_LENGTH   CREATE      
  CHARACTER_LENGTH   CURRENCY      
  CHECK   CURRENT_DATE    
  CLOSE   CURRENT_TIME    
  CLUSTERED   CURRENT_TIMESTAMP    
  COALESCE   CURRENT_USER    
  COLLATE   CURSOR    
   
   
  D  
   
  DATABASE   DISALLOW    
  DATE   —   See   DATETIME   DISCONNECT    
  DATETIME   DISTINCT      
  DAY   DISTINCTROW      
  DEC,   DECIMAL   DOMAIN    
  DECLARE   DOUBLE    
  DELETE   DROP    
  DESC        
   
   
  E-H  
   
  Eqv   FOREIGN    
  EXCLUSIVECONNECT   FROM    
  EXEC,   EXECUTE   FROM   子句      
  EXISTS   GENERAL   —   See   LONGBINARY    
  EXTRACT   GRANT    
  FALSE   GROUP    
  FETCH   GUID    
  FIRST   HAVING    
  FLOAT,FLOAT8   —   参阅   DOUBLE   HOUR    
  FLOAT4   —   See   SINGLE        
   
   
  I  
   
  IDENTITY   INPUT    
  IEEEDOUBLE   —   See   DOUBLE   INSENSITIVE    
  IEEESINGLE   —   See   SINGLE   INSERT    
  IGNORE   INSERT   INTO    
  IMAGE   INT,INTEGER,INTEGER4   —   参阅   LONG    
  Imp   INTEGER1   —   参阅   BYTE    
  In   INTEGER2   —   参阅   SHORT    
  IN   INTERVAL    
  INDEX   INTO    
  INDEXCREATEDB   Is      
  INNER   ISOLATION    
   
   
  J-M  
   
  JOIN   LONGTEXT      
  KEY   LOWER    
  LANGUAGE   MATCH    
  LAST   Max      
  LEFT   MEMO   —   参阅   LONGTEXT    
  Level*   Min      
  Like   MINUTE    
  LOGICAL,LOGICAL1   —   参阅   BIT   Mod    
  LONG     MONEY   —   参阅   CURRENCY    
  LONGBINARY     MONTH    
  LONGCHAR        
   
   
  N-P  
   
  NATIONAL   Outer*    
  NCHAR   OUTPUT    
  NONCLUSTERED   OWNERACCESS      
  Not   PAD    
  NTEXT   PARAMETERS      
  NULL   PARTIAL    
  NUMBER   —   See   DOUBLE   PASSWORD    
  NUMERIC   —   See   DECIMAL   PERCENT    
  NVARCHAR   PIVOT      
  OCTET_LENGTH   POSITION    
  OLEOBJECT   —   See   LONGBINARY   PRECISION    
  ON   PREPARE    
  OPEN   PRIMARY      
  OPTION   PRIVILEGES    
  Or     PROC,   PROCEDURE      
  ORDER     PUBLIC    
   
   
  Q-S  
   
  REAL   —   See   SINGLE   SMALLDATETIME    
  REFERENCES   SMALLINT   —   See   SHORT    
  RESTRICT   SMALLMONEY    
  REVOKE   SOME    
  RIGHT     SPACE    
  ROLLBACK   SQL    
  SCHEMA   SQLCODE,   SQLERROR,   SQLSTATE    
  SECOND   StDev    
  SELECT     StDevP      
  SELECTSCHEMA   STRING   —   See   TEXT    
  SELECTSECURITY   SUBSTRING    
  SET     Sum    
  SHORT     SYSNAME    
  SINGLE   SYSTEM_USER    
  SIZE        
   
   
  T-Z  
   
  TABLE   UPDATEOWNER    
  TableID*   UPDATESECURITY    
  TEMPORARY   UPPER    
  TEXT     USAGE    
  TIME   —   See   DATETIME   USER    
  TIMESTAMP   USING    
  TIMEZONE_HOUR   VALUE      
  TIMEZONE_MINUTE   VALUES      
  TINYINT   Var      
  TO   VARBINARY   —   参阅   BINARY    
  TOP   VARCHAR   —   参阅   TEXT    
  TRAILING   VarP    
  TRANSACTION   VARYING    
  TRANSFORM   VIEW    
  TRANSLATE   WHEN    
  TRANSLATION   WHENEVER    
  TRIM   WHERE    
  TRUE   WITH      
  UNION   WORK    
  UNIQUE   Xor    
  UNIQUEIDENTIFIER   YEAR    
  UNKNOWN   YESNO   —   See   BIT    
  UPDATE   ZONE    
  UPDATEIDENTITY        
  Top

4 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-21 12:47:33 得分 0

Round()是Access的函数,不是jet-SQL函数。Top

5 楼wwwwb()回复于 2006-11-21 12:49:22 得分 0

ROUND是VBA函数,不是JET   SQL   函数Top

6 楼wwwwb()回复于 2006-11-22 15:46:46 得分 0

这个问题有点类似   在access中符号“%”不能用,“*”却能用,在模糊查询时。  
  ado:*  
  access:*  
  用SELECT   format(1.245,'####.##')代替  
  Top

7 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-22 17:48:28 得分 0

如果要在SQL中处理,就用format(1.23456,'###0.####')。  
   
  如果允许,也可以在前台表格控件中设置格式。  
  Top

8 楼wwwwb()回复于 2006-11-22 17:50:42 得分 0

这个问题有点类似   在access中符号“%”不能用,“*”却能用,在模糊查询时。  
  ado:%  
  access:*  
  用SELECT   format(1.245,'####.##')代替  
  Top

9 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2006-11-23 11:38:29 得分 0

为什么老出现XXX函数未定义错误?  
     
   
  作者:cg1     摘自:access911.net     编辑:cg1     更新日期:2003-7-16     浏览人次:2133  
     
  专题地址:  
  http://access911.net/?kbid;77FAB51E14DC  
     
     
   
  简述:  
  为什么老出现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界面,菜单   工具   ->   引用   中看一下有没有丢失的引用,如果有,重新引用一下即可  
   
  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  
   
  最终的解决方案是当你在   VB   /   C#   等语言中取出数据赋值到变量后再对变量进行函数操作  
   
     
   
     
   
   
   
   
  access911.net   原创文章,作者本人对文章保留一切权利。  
  如需转载必须征得作者同意并注明本站链接  
   
   
     
     
  Top

10 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2006-11-23 11:39:19 得分 0

如果你只是凑巧字段名为   ROUND   ,请用  
   
  select   [round]   from   [table]    
   
  来查询。  
   
  Top

11 楼changechange(http://access911.net 是我的个人网站,欢迎光临)回复于 2006-11-23 11:40:21 得分 0

新手来看:LIKE   语句到底如何组织?*和%该用哪个?  
     
   
  作者:cg1     摘自:access911.net     编辑:cg1     更新日期:2004-10-8     浏览人次:1168  
     
  专题地址:  
  http://access911.net/?kbid;72FAB31E13DCEAF3  
     
     
   
  简述:  
  新手来看:LIKE   语句到底如何组织?*和%该用哪个?《查询》  
   
     
   
  阅读前需掌握:  
  熟练掌握   VBA   编程;熟练掌握   JET   SQL   语句  
     
   
  难度等级:  
  40    
     
   
   
   
     
   
   
   
     
     
   
     
     
     
   
  问题:  
   
   
   
    LIKE   语句到底如何组织?*和%该用哪个?  
  用like   不行,如何进行糊模查询?    
   
     
   
   
  回答:  
   
   
    在回答上述问题时你必须弄清楚你的环境  
  1、在纯   ACCESS   环境中,并且没有开启   ANSI     SQL   兼容选项的情况下:  
  (菜单   ->   工具   ->   选项   ->   高级   ->   SQL   SERVER   兼容语法(ANSI   92)   中可以看到你是否开启了   ANSI   兼容,如果开启了,请使用   %   而不是   *)  
  在这种环境下仍然至少要分成3种情况  
  1.1、在   VBA   代码中组织   JET   SQL   语句:  
  dim   rs   as   new   adodb.recordset  
  dim   strSQL   as   string  
  dim   变量   as   string  
  strSQL="select   *   from   table   where   field   like   '*"   &   变量   &   "*'"  
  '如果是   ANSI   SQL   兼容模式时,必须用  
  'strSQL="select   *   from   table   where   field   like   '%"   &   变量   &   "%'"    
  '代替  
   
  '如果不使用变量可以直接这样组织  
  'strSQL="select   *   from   table   where   field   like   '%字符串%'"    
  'strSQL="select   *   from   table   where   field   like   '*字符串*'"    
   
  rs.open   strsql   ,adodb.connection,1,1  
     
   
   
   
  1.2、直接在新建查询中写   SQL   代码,并保存为一个查询备用  
  select   *   from   table   where   field   like   '*'   &   forms!某个窗体名!控件名   &   '*'    
   
   
  千万注意,不能写成以下形式,以下形式是错误的:  
  select   *   from   table   where   field   like   '*forms!某个窗体名!控件名*'    
   
   
  1.3、在窗体的   RECORDSOURCE   数据源属性或者控件的   ROWSOURCE行来源属性中  
  在这种情况中,同1.2是相同的。  
   
  2、在纯   ACCESS   环境中,并且已经开启   ANSI   SQL   兼容选项的情况下:  
  在这种情况下也一样至少要分3种情况  
  2.1、在   VBA   代码中组织   JET   SQL   语句:  
  dim   rs   as   new   adodb.recordset  
  dim   strSQL   as   string  
  dim   变量   as   string  
  strSQL="select   *   from   table   where   field   like   '%"   &   变量   &   "%'"  
  '如果是非   ANSI   SQL   兼容模式时,必须用  
  'strSQL="select   *   from   table   where   field   like   '*"   &   变量   &   "*'"    
  '代替  
   
  '如果不使用变量可以直接这样组织  
  'strSQL="select   *   from   table   where   field   like   '%字符串%'"    
  'strSQL="select   *   from   table   where   field   like   '*字符串*'"    
   
  rs.open   strsql   ,adodb.connection,1,1  
     
   
   
  2.2、直接在新建查询中写   SQL   代码,并保存为一个查询备用  
  select   *   from   table   where   field   like   '%'   &   forms!某个窗体名!控件名   &   '%'    
   
   
  千万注意,不能写成以下形式,以下形式是错误的:  
  select   *   from   table   where   field   like   '%forms!某个窗体名!控件名%'    
   
   
  2.3、在窗体的   RECORDSOURCE   数据源属性或者控件的   ROWSOURCE行来源属性中  
  在这种情况中,同2.2是相同的。  
   
  3、在非   ACCESS   环境中,只是   VB   ASP   DELPHI   等调用   MDB   格式的文件的情况下:  
  以下以   VB   举例  
  dim   strSQL   as   string  
  strSQL="select   *   from   table   where   field   like   '%"   &   某字符串变量名   &   "%'"    
   
   
     
   
     
   
   
   
   
   
  access911.net   原创文章,作者本人对文章保留一切权利。  
  如需转载必须征得作者同意并注明本站链接  
   
   
     
     
  Top

12 楼itone_wong(执子之手,与之偕老)回复于 2007-01-11 08:54:15 得分 0

Hello,我也被这个问题搞得好郁闷!  
  不过后来才知道解决办法却是非常之简单呵,拿出来与大家分享!!  
  其实只需要:  
  1.   打开数据库。    
  2.   按   Alt+F   11   以打开   VisualBasic   编辑器。    
  3.   在   工具   菜单上,   单击   引用   。      
  4.   单击以清除复选框对类型库或对象库标记为"丢失"的选项就OK了.  
   
  详细参考http://support.microsoft.com/kb/275110/zh-cn  
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:cjx020

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo