zoukankan      html  css  js  c++  java
  • 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   原创文章,作者本人对文章保留一切权利。  
      如需转载必须征得作者同意并注明本站链接  

  • 相关阅读:
    Codeforces 231E
    Practice 15.07.07 计算几何
    Codeforces 552E
    Topcoder SRM 661 (Div.1) 250 MissingLCM
    HDU 4971
    Codeforces Round #306 (Div. 2)
    URAL 1988
    URAL 2032
    ServiceStack.Ormlit 事务
    ServiceStack.Ormlit 使用Insert的时候自增列不会被赋值
  • 原文地址:https://www.cnblogs.com/emanlee/p/1709802.html
Copyright © 2011-2022 走看看