ACCESS中如何用sql语句创建一个查询

关于此主题请参考:  
          新手来看:ACCESS中是否存在存储过程或者视图?《查询》  
          http://access911.net/index.asp?u1=a&u2=79FAB21E12DC  
  ----------------------  
  在Access的MDB中可以运行JET   SQL   的   DDL   语句:   create   procedure   Name   as   ....   来创建参数查询(存储过程)或者用   create   view   name   as   ....   来创建查询(视图)  
  如何运行   JET   SQL   语句请参考:  
  《如何运行一段   jet   sql   代码》  
  http://access911.net/eg/swf/runsql.swf  
  -------------------------  
  必须使用   CURRENTPROJECT.CONNECTION.EXECUTE   "CREATE   VIEW...   "   来建立

 

 

jet   sql是否支持程序流分支?是否能像存储过程那样使用变量?能否多行一起执行?  
  作者:cg1     摘自:access911.net     编辑:cg1     更新日期:2004-8-10     浏览人次:597  
  专题地址:  
  http://access911.net/?kbid;72FAB51E17DCE9F3  
  简述:  
  1、jet   sql   是否支持程序流分支?  
  2、JET   SQL   是否能像   T-SQL   存储过程那样使用变量?  
  3、jet   sql   能否多行一起执行?  
  阅读前需掌握:  
  熟练掌握   ACCESS   操作;熟练掌握   VBA   编程;基本了解   JET   SQL   DDL   语句  
  难度等级:  
  85    
  问题:  
  1、jet   sql   是否支持程序流分支?  
  2、JET   SQL   是否能像   T-SQL   存储过程那样使用变量?  
  3、  
  if   exists   (select   *   from   mruser   where   userid='12')  
    begin      
        update   mruser     set   upass="sss",uname="ww",   userid="11"        
    end     else    
        insert     into   mruser   (userid,upass,uname)   values   ("11","sss","ww")    
  这条SQL语句转换为ACCESS该怎么写  
  4、ACCESS查询是否可以连续执行多条   JET   SQL   语句,是否可以将多条JET   SQL   语句写在一个查询里面  
  回答:  


  1、Access   的   MDB   /   MDE   中存在类似存储过程得概念(建立时也可以使用   DDL   语句的   create   procedure   语句建立),但是叫参数查询,并且一个参数查询只支持一条   JET   SQL   语句,因而   JET   SQL   不存在程序流控制语句,所有的程序流控制都交由   VBA   控制。  
  也就是说   T-SQL   中的   IF   以及   CASE   语句在   JET   SQL   中不存在,但是部分功能可以用   IIF   函数以及   SWITCH   函数代替,具体内容请参考   ACCESS   帮助。 

 
  2、JET   SQL中也可以定义“变量”,但是这个变量和   T-SQL   中的变量是不同的概念,因此在   JET   SQL   中被称为“参数”  
  关于此主题请参考:  
          《查询》ado构建参数一例  
          http://access911.net/index.asp?u1=a&u2=71FAB51E12DC  
  关于此主题请参考:  
          《查询》如何构建参数查询?  
          http://access911.net/index.asp?u1=a&u2=72FAB21E15DC  
  关于此主题请参考:  
          T-SQL、VBA、JET   SQL中参数的构建《查询》  
          http://access911.net/index.asp?u1=a&u2=79FAB51E1ADC  


  3、ACCESS   不支持将两条   JET   SQL   连续写在一个查询里面以达到连续执行的目的。上述语句由于涉及到两条不同的   JET   SQL   语句,因此无法写在一个查询里面,但是你可以通过   VBA   来控制程序流  
  Dim   Rs   As   New   ADODB.Recordset  
  Dim   strSQL   As   String  
  strSQL   =   "select   *   from   mruser   where   userid='12'"  
  Rs.Open   strSQL,   CurrentProject.Connection,   1,   1  
  '这里的   CurrentProject.Connection   为   ACCESS   特有的  
  '对象,在   VB   中请用   adodb.connection   对象代替  
  If   Rs.EOF   And   Rs.BOF   Then  
  '上面这个   IF   在   ACCESS   环境中完全可以用   DLOOKUP   函数代替,  
  '具体内容请参考帮助,搜索关键字“DLOOKUP”  
          strSQL   =   "insert     into   mruser   (userid,upass,uname)   values   ('11','sss','ww')"  
  Else  
          strSQL   =   "update   mruser     set   upass='sss',uname='ww',   userid='11'"  
  End   If  
  CurrentProject.Connection.Execute   strSQL    


  4、前面已经说过,ACCESS   查询只支持单条的   JET   SQL   语句,因此如果你要执行多条语句请使用   VBA   调用   ADO   或者   DAO   来完成,比如:  
  Dim   strSQL   As   String  
  strSQL   =   "insert     into   mruser   (userid,upass,uname)   values   ('11','sss','ww')"  
  CurrentProject.Connection.Execute   strSQL  
  strSQL   =   "update   mruser     set   upass='sss',uname='ww',   userid='11'"  
  CurrentProject.Connection.Execute   strSQL    
  如果要考虑数据结构完整性请使用   ADO   支持的事务处理  
  关于此主题请参考:  
          《查询》什么是事务处理?怎么进行事务处理?  
          http://access911.net/index.asp?u1=a&u2=71FABE1E13DC  
  关于此主题请参考:  
          关于事务处理《查询》  
          http://access911.net/index.asp?u1=a&u2=73FABF1E14DC  
  access911.net   原创文章,作者本人对文章保留一切权利。  
  如需转载必须征得作者同意并注明本站链接  

posted @ 2010-04-11 22:05  emanlee  阅读(9835)  评论(0编辑  收藏  举报