ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2370|回复: 5

求助一个能在EXCEL按钮直接在MSSQL进行查询,已经能连接,但如何读入文件来查询呢?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-4-12 08:54 | 显示全部楼层 |阅读模式
Sub 按钮1_Click()
Dim cnn As New ADODB.Connection
On Error Resume Next
cnn.Open "Provider=SQLOLEDB;Data Source=(local); User ID=sa;Password =123;"
If Not cnn.State = adStateOpen Then
    MsgBox "数据库连接失败,请检查!"
End If
SQL = 查询语句在:D:\查询.sql
cnn.Execute (SQL)
Set cnn = Nothing
    MsgBox "数据库连接正常,执行完毕!", 64, "提示"
End Sub

这代码如何改成能用外部的文件做查询呢

如果不能实现,是不是可以用A1:A50的内容查询,语句是排在单元格里,已经是完整的,就是如何用这区域的内容查询

TA的精华主题

TA的得分主题

发表于 2013-4-12 09:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 z315559822 于 2013-4-12 09:23 编辑

[code=sql]
'需要引用ado2.5以上
Sub 往sql里添加新编码()  '定义过程名称
    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  '定义记录集对象,保存数据表
    Dim strCn As String, strSQL As String    '字符串变量
'If Environ("userNAME") & " / " & Environ("COMPUTERNAME") = "zxc / A1981" Then
    If Application.UserName = "Administrator/MPC01" Then
        strCn = "Provider=sqloledb;Server=XYINGSC01;Database=ld;Uid=1981;Pwd=852;"    '定义数据库链接字符串
    Else
        msgbox "只有管理员才可以操作"
        Exit Sub
    End If
    strSQL = "select * from cpbm"    '定义SQL查询命令字符串
    cn.ConnectionTimeout = 30
    cn.CursorLocation = adUseClient
    cn.Open strCn   '与数据库建立连接,如果成功,返回连接对象cn
    rs.Open strSQL, cn, adOpenStatic, adLockBatchOptimistic, adCmdText    '执行strSQL所含的SQL命令,结果保存在rs记录集对象中
    Set sht = ActiveWorkbook.Worksheets("添加编码")
    With rs
        For i = 2 To sht.[a65536].End(xlUp).Row    '循环开始,i从2到4
            .MoveFirst
            .Find "产品编码='" & sht.Cells(i, 4) & "'"
            If Not rs.EOF Then
                For j = 1 To 37
                    .Fields(j - 1).Value = sht.Cells(i, j).Value
                Next j
            Else
                .AddNew
                For j = 1 To 37
                    .Fields(j - 1).Value = sht.Cells(i, j).Value
                Next j
            End If
            Application.StatusBar = "请稍等.........正在处理第 " & i - 1 & "条编码"
   If Range("V" & i & "").Value = "T" Or Range("V" & i & "").Value = "T2" Then
    RunYesNo = msgbox("这个台子是否是拉台?", vbYesNo, "提示")
    If RunYesNo = vbYes Then Exit Sub
   End If
   
        Next i
        .UpdateBatch
    End With
    rs.Close: cn.Close
    Set rs = Nothing: Set cn = Nothing: Set sht = Nothing
   
    msgbox "处理完毕!" + Chr(13) + "记得更新cpgzde!", vbInformation, "系统提示"
    Application.StatusBar = False
End Sub



[/code]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-12 09:41 | 显示全部楼层
z315559822 发表于 2013-4-12 09:17

其实还是愿意调用外部.txt或.SQL文件,因为有时其它程序生成的查询代码就方便去查询

TA的精华主题

TA的得分主题

发表于 2013-4-12 16:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
andanok 发表于 2013-4-12 09:41
其实还是愿意调用外部.txt或.SQL文件,因为有时其它程序生成的查询代码就方便去查询

读入txt文件应该就可以,不过我没弄过,你要是弄出来通知我一下,哈哈

TA的精华主题

TA的得分主题

发表于 2013-4-13 08:33 | 显示全部楼层
andanok 发表于 2013-4-12 09:41
其实还是愿意调用外部.txt或.SQL文件,因为有时其它程序生成的查询代码就方便去查询

懂你的意思了,我这里有一类似的EXCEL弄的东东,是利用excel Query首先和mssql建立连接,然后把要查询的sql语句写在EXCEL的一个单元格里,然后用VBA调用Query连接和单元格里面的SQL查询语句。具体见附件。 SQL数据查询.rar (24.16 KB, 下载次数: 85)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-13 13:22 | 显示全部楼层
不是这样哦,外部.txt或.SQL文件是已经包含完整的SQL语句,只是在EXCEL里把它发送到MSSQL服务器执行
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 20:39 , Processed in 0.034938 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表