织梦CMS - 轻松建站从此开始!

VBA教程、excel VBA编程、VBA视频、VBA控件,VBA应用教程,vba技巧

在excel中使用vba和连接数据库详解

时间:2010-05-10 20:56来源:未知 作者:vba技术联盟 点击:
cnn1.ConnectionString = driver={SQL Server}; _ server=bigsmile;uid=sa;pwd=pwd;database=pubs Connection对象的主要属性 1、 CursorLocation,它的取值有两个,一个是adUseClient,一个是adUseServer(默认),从其英语本身的含义就可以看出,前者是使用客户端的游标,而

cnn1.ConnectionString   =   "driver={SQL   Server};"   &   _  
  "server=bigsmile;uid=sa;pwd=pwd;database=pubs"  
   
  Connection对象的主要属性  
    1、   CursorLocation,它的取值有两个,一个是adUseClient,一个是adUseServer(默认),从其英语本身的含义就可以看出,前者是使用客户端的游标,而后者是使用服务器端的游标。二着的差别在于adUseClient游标可以提供供应商所没有提供的额外的属性,因而灵活性更大。需要注意的是Connection对象与RecordSet对象均有此属性,由Connection对象产生的RecordSet对象会自动的继承这个属性。另外要让此属性对Connection和RecordSet对象的实例起作用的话,必须在打开它们之前先定义。

Connection的主要方法  
    1、   open,打开一个Connection的对象实例,常用的写法为conn.open   ConnectionString,如果在打开之前已经定义了ConnectionString属性的话,就可以直接的打开。  
    2、   Execute,产生一个RecordSet实例,常用的写法为  
  Rs=conn.Excute   CommandText,RecordsAffected,Option  
  其中的CommandText可以为以下的几种形式,主要由Option的值来决定1)   SQL语句,此时Option的值为adCmdText,表示将执行一段SQL语句。2)数据库的一个表名,此时Option的值为adCmdTable,表示将对该表进行操作。  
    3、一个StoredProcedure名字,此时Option取值为adCmdStoredProc,它表示将要执行一个SQL上定义的存储过程。这是一个非常灵活而强大的方法,它可以对用户隐藏数据库的具体信息,而只需用户提供适当的参数就可以了,还能返还需要的参数值。在后面介绍Command对象时再做详细的介绍。值得注意的是,有时Excute后并不需要返回一个RecordSet对象,例如在表中删除记录。看下面的例子:  
  set   conn=   Server.CreateObject("ADODB.Connection")  
  conn.ConnectionString="driver={SQL   Server};server=srv;"&   _  
  "uid=sa;pwd=;database=pubs"  
  conn.open  
  conn.Execute   "Delect   From   Employee   Where   Job_ID=1;",,adCmdText  
    该例子删除Employee表中Job_ID为1的记录,并不需要再返回一个RecordSet的实例,但如果将最后一句变为rs=   conn.Execute   "Delect   From   Employee   Where   Job_ID=1;",,adCmdText那么我们就可以用此rs来指向表中的记录条了。返回的rs和后面RecordSet对象中用Source属性产生的rs是相同的。

Connection对象的集合  
  1、   Errors集合,对应产生Error对象。我们将在后面做单独的讨论。  
  2、   Properties集合,对应产生Property对象,下面给出一段代码,它包含了Property对象的主要方法和属性。  
   
  $#@60;%  
  "this   program   is   testing   the   ADO"s   Property   object  
  Const   adCmdTable   =   &H0002  
  set   conn=Server.CreateObject("ADODB.Connection")  
  set   rs=Server.CreateObject("ADODB.RecordSet")  
  conn.ConnectionString="Driver={Microsoft   Access   Driver   (*.mdb)};DBQ="&   _  
  Server.Mappath("/source_asp")&"/property/employee.mdb;"  
  conn.open  
  rs.ActiveConnection=conn  
  rs.open   "employee",,,adCmdTable  
  dim   i,j  
  for   i=0   to   rs.fields.count-1  
  Response.Write   rs.fields(i).name&"$#@60;br$#@62;"  
  next  
  for   j=0   to   rs.properties.count-1  
  Response.write   rs.properties(j).name&"$#@60;br$#@62;"  
  next  
  rs.close  
  conn.close  
实例:

具体的例子,在我的机器上调试好了的。作用是连接到192.168.5.72上的DB1数据库,然后取得所有数据,并依次分行显示在Excel当前表中:  
   
  Sub   ConnectSQLServer()  
  Set   cnn   =   CreateObject("ADODB.connection")  
  cnn.connectionstring   =   "Driver={SQL   Server};server=192.168.5.72;uid=sa;pwd=pwd;database=db1"  
  cnn.Open  
  Set   rs   =   cnn.Execute("Select   *   from   author")  
  rs.movefirst  
  i   =   1  
  j   =   0  
  While   Not   rs.EOF  
      For   j   =   0   To   rs.fields.Count   -   1  
      Cells(i,   j   +   1).Value   =   rs(j).Value  
      Next   j  
      rs.movenext  
      i   =   i   +   1  
  Wend  
   
  cnn.Close  
  Set   cnn   =   Nothing  
  Set   rs   =   Nothing  
   
  End   Sub  
 

(责任编辑:vba技术联盟)
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
栏目列表
推荐内容