关于VBA读SQL表数据与EXCEL表数据判断的问题。

关于VBA读SQL表数据与EXCEL表数据判断的问题。,第1张

这个问题一两句话说不清楚,只能给你一个算法的思路与步骤;

i = 1

Do While 数据第 i 行的名称,规格不为空

用Select 语句检索SQL数据

If 如果返回的记录不为空 Then

用返回的编号,写到数据表第 i 行的编号列

End If

i = i + 1

Loop

Sub 按钮1_Click()

Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表

'Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用

'Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表

‘工具 ---〉引用 ---〉Microsoft ActiveX data objects ....

'下面两句就不需要增加引用ADO

Set cn = CreateObject("Adodb.Connection")

Set rs = CreateObject("Adodb.Recordset")

Dim strCn As String, strSQL As String '字符串变量

Dim strCond As String

strCn = "Provider=sqloledbServer=R9HDET7Database=dbnameUid=usernamePwd=password" '定义数据库链接字符串

'下面的语句将读取数据表数据,并将它保存到excel工作表中:工作表为一张两维表,记录集也是一张两维表

strSQL = "select CUSTOMER_NAME from VSC_BI_CUSTOMER " '定义SQL查询命令字符串

cn.Open strCn '与数据库建立连接,如果成功,返回连接对象cn

rs.Open strSQL, cn '执行strSQL所含的SQL命令,结果保存在rs记录集对象中

i = 2

Set sht = ThisWorkbook.Worksheets("Test") '把sht指向当前工作簿的Test工作表

Do While Not rs.EOF '当数据指针未移到记录集末尾时,循环下列 *** 作

sht.Cells(i, 1) = rs("CUSTOMER_NAME") '把当前记录的字段1的值保存到sheet1工作表的第i行第1列

rs.MoveNext '把指针移向下一条记录

i = i + 1 'i加1,准备把下一记录相关字段的值保存到工作表的下一行

Loop '循环

rs.Close '关闭记录集,至此,程序将把某数据表的字段1保存在excel工作表sheet1的第1列,行数等于数据表的记录数

cn.Close '关闭数据库链接,释放资源

End Sub

以下内容引用于excelhome论坛。建议去论坛查看更多信息。

'在Excel中使用SQL语句总结-1:

'************************************        标准SQL查找代码:       *********************************************************

Sub SQL_Excel_2003_2007()

'On Error Resume Next       '如果出现错误,忽略,然后执行下一行代码。

Application.ScreenUpdating = False '关闭屏幕刷新,成对出现,提高速度

Application.DisplayAlerts = False '关闭提示,,成对出现,避免出现提示框

'---------------------------------------   参数声明部分  ------------------- ------------------- -------------------

    Dim cnn, SQL$   '定义数据库连接和SQL语句

    Set cnn = CreateObject("adodb.connection")  '创建数据库连接

    Set rs = CreateObject("adodb.recordset")   '创建一个数据集保存数据

   

'---------------------------------------   设置数据库连接  ------------------- ------------------- -------------------

    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0Extended Properties=Excel 12.0Data Source=" & ThisWorkbook.FullName

    

       '将EXCEL文件作为数据库连接,实际并不打开EXCEL,

       'Excel2003版本:cnn.Open "Provider=Microsoft.jet.OLEDB.4.0Extended Properties=Excel 8.0Data Source=" & ThisWorkbook.Path & "\数据表.xls"

       'Excel2007版本:cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0Extended Properties=Excel 12.0Data Source=" & ThisWorkbook.Path & "\数据表.xlsx"

       '带参数的连接字符串:cnn.Open "provider=microsoft.jet.oledb.4.0extended properties='excel 8.0HDR=yesIMEX=2'data source=" & ThisWorkbook.FullName

       '    HDR=Yes   代表 Excel 档中的工作表第一行是标题栏,标题只能是一行,不能使多行,或者合并的单元格。

       '    HDR=no     工作表第一行就是数据了,没有标题栏,不使用栏位,则栏位就以f代表,第一列列名就是:f1,第二列列名:f2

       '    IMEX 汇入模式  0 只读  1 只写   2 可读写

       '              当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。

       '              当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。

       '              当 IMEX=2 时为“连结模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。

       'Data Source  存储查询数据来源的工作薄名称,数据库路径为:数据表.xls  或本表:& ThisWorkbook.FullName

       

'---------------------------------------   设置SQL语句  ------------------- ------------------- -------------------

  SQL = "select * from  [数据表_1$A1:G100] where 姓名='马拉多纳'"

  

       '在Sheet1表内查找列名为:姓名 中所有:马拉多纳 的数据。

       '[XXX$A2:G100]的中括号和$为特别数据表标示符,XXX为Sheet名,A2:G100是选取的区域。

       'SQL语句是一个字符串,双引号开头和结尾,列名两边无单引号,表示一个字符串:‘马拉多纳’,要用单引号扩上,数字就不用了。

       'Nu=36:  AA="马拉多纳":   set  Sh=Sheet1:  SQL = "select * from  [" & Sh.name & “$] where 姓名=‘” & AA & “’  and  年龄=Nu"

       

'---------------------------------------   SQL结果处理  ------------------- ------------------- -------------------

   Set rs = cnn.Execute(SQL) '将SQL语句获得的数据传递给数据集

   Sheets("结果").Cells.ClearContents       '清理保存数据的区域

   Sheets("结果").Range("a2").CopyFromRecordset rs    '将数据集粘贴到Excel中,左上角为A2,无列名。

   'Sheets("结果").Range("b2").CopyFromRecordset cnn.Execute(SQL)  '可以不声明Y,直接使用

   cnn.Close     '关闭数据库连接

   Set cnn = Nothing    '将CNN从内存中删除。

'--------------------------------------- ------------------------ ------------------- -------------------

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub   '这就是最简单的EXCEL中SQL的应用 ,其他的都是SQL的运用了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10069525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存