XCEL查找SQL SERVER数据库的数据

来源:互联网 发布:sql server 日志回滚 编辑:程序博客网 时间:2024/05/22 11:42

新建sql数据库,建立表单,测试数据。如图。这些都是常规操作。



我的表名是:Table_Yangji  

然后新建一个EXCEL连接SQL SERVER数据库.xlsx 填写如下内容,然后另存为EXCEL连接SQL SERVER数据库.xlsm

这个按钮是在:开发工具--插入--Active控件


然后打开Visual Basic 或者ALT+F11 插入模块。名称随便。没有影响。例如我取个conn

黏贴代码。

[html] view plain copy
  1. <pre name="code" class="html">Public Function search_sql()  
  2.   
  3.   
  4.   
  5.   
  6. Dim I2 As Integer, j2 As Integer, sht As Worksheet     ' i2,j2为整数变量;sht 为excel工作表对象变量,指向某一工作表  
  7.   
  8. Dim R, C, F, I As Integer      'R Excel表的行序号,C  Excel表的列序号 F 查询结果的总记录数  I SQL表的字段序号  
  9.   
  10. Dim strCn As String, strSQL As String '字符串变量  
  11.   
  12.   
  13.   
  14.   
  15.   
  16. '方法一:直接引入数据库驱动程序  
  17. '工具 ---〉引用 ---〉Microsoft ActiveX data objects ....  
  18. '然后定义两个驱动  
  19. 'Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用  
  20. 'Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表  
  21.   
  22. '方法二:不用引入驱动,直接设置驱动。  
  23.   
  24.  Dim cn As Object  
  25.  Dim rs As Object  
  26.  Set cn = CreateObject("Adodb.Connection")  
  27.  Set rs = CreateObject("Adodb.Recordset")  
  28.   
  29. '=========================我用的是方法二======================  
  30. '  
  31. '  
  32. '  
  33. '  
  34.       
  35.   
  36.   
  37.     strCn = "Provider=sqloledb;Server=127.0.0.1;Database=yangji_test;Uid=yangji;Pwd=yangji0321" '定义数据库链接字符串  
  38.       
  39.     '下面的语句将读取数据表数据,并将它保存到excel工作表中:工作表为一张两维表,记录集也是一张两维表  
  40.       
  41.     strSQL = "SELECT * FROM [dbo].[Table_Yangji] " '定义SQL查询命令字符串  
  42.       
  43.     cn.Open strCn '与数据库建立连接,如果成功,返回连接对象cn  
  44.     rs.Open strSQL, cn '执行strSQL所含的SQL命令,结果保存在rs记录集对象中  
  45.      
  46.      
  47.    R = 2  '表示从第二行开始,行序号  
  48.      
  49.    C = 1  '表示从第一列开始,列序号  
  50.      
  51.      
  52.    '这里需要注意的是,如果用这一句,只能在当前工作表中正常使用。另存为宏后就不能正常工作了  
  53.    'ThisWorkbook指的是当前工作簿,不是活动工作表。她就指向宏的工作簿了。  
  54.      
  55.    ' Set sht = ThisWorkbook.Worksheets("Sheet1")'把sht指向当前工作簿的Test工作表  
  56.      
  57.    '改用ActiveWorkbook就指向当前活动工作簿了。就能正常工作了。O(∩_∩)O哈哈~  
  58.       
  59.     Set sht = ActiveWorkbook.Worksheets("Sheet1") '把sht指向当前工作簿的Test工作表  
  60.       
  61.       
  62.     '测试用  
  63.     'Dim a As String  
  64.     'Dim b As String  
  65.     'a = ActiveWorkbook.Name '返回活动工作薄的名称  
  66.     'b = ThisWorkbook.Name   '返回当前工作簿名称  
  67.     'MsgBox "程序被调用。" & a & "=====" & b  
  68.       
  69.       
  70.       
  71.     Do While Not rs.EOF '当数据指针未移到记录集末尾时,循环下列操作  
  72.       
  73.       sht.Cells(R, C) = rs("bianhao") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  74.       sht.Cells(R, C + 1) = rs("changdu") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  75.       sht.Cells(R, C + 2) = rs("neijing") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  76.       sht.Cells(R, C + 3) = rs("waijing") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  77.       sht.Cells(R, C + 4) = rs("zifuchuan") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  78.       sht.Cells(R, C + 5) = rs("riqi") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  79.       sht.Cells(R, C + 6) = rs("shijian") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  80.       sht.Cells(R, C + 7) = rs("text") '把当前记录的字段1的值保存到sheet1工作表的第I行第1列  
  81.         
  82.       rs.MoveNext '把指针移向下一条记录  
  83.       R = R + 1 'i加1,准备把下一记录相关字段的值保存到工作表的下一行  
  84.     Loop '循环  
  85.       
  86.       
  87.     rs.Close '关闭记录集,至此,程序将把某数据的字段1保存在工作表sheet1的第1列,行数等于数据表的记录数  
  88.     Set rs = Nothing  
  89.     cn.Close '关闭数据库连接,释放资源  
  90.     Set cn = Nothing  
  91.       
  92.       
  93.      
  94.   
  95. End Function  



这里需要注意的是:

1、VBA编辑必须在中文状态下复制黏贴,才能正常显示中文,不然复制黏贴中文会乱码。

2、还是开头必须

[html] view plain copy
  1. Public  

不然当按钮调用的时候会出现函数未定义错误。

好。保存。然后点EXCEL图标,进入EXCEL界面。


双击那个按钮,进入编码,然后黏贴代码。

[html] view plain copy
  1. Private Sub CommandButton1_Click()  
  2.   
  3.   
  4. Call search_sql  
  5.   
  6.   
  7.   
  8. End Sub  


保存。再关闭设计模式,点按钮测试。



读取成功。公司有事。先写到这里。

阅读全文
0 0
原创粉丝点击