VBA中连接SQLSERVER数据库例子
我们在使用excel编程时,很多时候都需要使用数据库。
那么如何连接数据库然后从数据库读取数据呢?
VBA连接SQLSERVER数据库实例:
DimstrConnAsString,strSQLAsString DimconnAsADODB.Connection DimdsAsADODB.Recordset DimcolAsInteger '连接数据库的字符串 strConn="Provider=SQLOLEDB.1;PersistSecurityInfo=True;UserID=[user];Password=[password];InitialCatalog=[database];DataSource=[数据库IP地址或数据库服务器名称];ConnectTimeout=720;" '查询语句,如果sql语句很长可以用strSQL=strSQL+来连接分成多段的语句,如果语句很短可以只写在一行上。 strSQL="select*fromHy_KPI_Shop_Dept_WeekRpt" strSQL=strSQL+"wheresdate='2014-01-01'orderbysdate,shopid" Setconn=NewADODB.Connection Setds=NewADODB.Recordset '打开数据库连接 conn.OpenstrConn '该句和数据库连接字符串处的ConnectTimeout=720,表示说如果语句运行时间很长,这两句可以延长vba的等待时间,没有这两句,vba往往会报查询超时。 conn.CommandTimeout=720 Withds '根据查询语句获得数据 .OpenstrSQL,conn '自动控制加入所有列标题 Forcol=0Tods.Fields.Count-1 '请注意Offset(0,col)中的参数一定要正确,该句表示标题将会写在第一行,从A1单元格开始,如果不想写入标题行,可将下面这句注释掉。 Worksheets("门店各课KPI周报").Range("A1").Offset(0,col).Value=ds.Fields(col).Name Next '加入所有行数据,该句表示查询结果将会写在第一行,从A1单元格开始,但是由于标题行写在第一行了,所以实际这一行从标题下的一行写入。 Worksheets("sheet1").Range("A1").Offset(1,0).CopyFromRecordsetds EndWith '关闭数据库连接和清空资源 Setds=Nothing conn.Close Setconn=Nothing