ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 方法'Open'作用于对象'_Connection'时失败

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-9-7 10:53 | 显示全部楼层 |阅读模式
各位大侠,我用excel写了一段vba访问SQL数据库,我的电脑上能运行,但是到别人电脑上,出现方法'Open'作用于对象'_Connection'时失败,光标停留在“cnn.Open”,请帮忙看看有什么问题
-----------------------------------------------------------------------------------------
Public Function fnFind_Record()

Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cnnStr As String, strSQL As String
Dim mySource As String
Dim myTable As String
Dim myDB As String
Dim myTB As String
Dim txtModels As String
Dim txtSN As String
Dim txtData As String
Dim c As String
Dim i As Integer
Dim d As Integer

On Error Resume Next

mySource = "192.168.206.86"
myDB = "test_Record"
myTB = ThisWorkbook.Sheets("link").Cells(2, 1)
txtModels = ThisWorkbook.Sheets("link").Cells(1, 3)
txtSN = ThisWorkbook.Sheets("link").Cells(2, 3)

cnn = "Provider=SQLOLEDB; User ID=admin; password=abc; " & " Data Source=" & mySource & ";" & "initial catalog=" & myDB
cnn.Open                    '<<<==到此地报错误,参考附件图片

---------------------下面没执行的代码略-------------------------------------------

错误代码

错误代码

TA的精华主题

TA的得分主题

发表于 2015-9-7 11:59 | 显示全部楼层
cnn = "Provider=SQLOLEDB; User ID=admin; password=abc; " & " Data Source=" & mySource & ";" & "initial catalog=" & myDB
cnn.Open   
合成一句:
cnn.Open  "Provider=SQLOLEDB; User ID=admin; password=abc; " & " Data Source=" & mySource & ";" & "initial catalog=" & myDB
  

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-29 13:27 | 显示全部楼层
好像没有效果,有没有其他的办法?

TA的精华主题

TA的得分主题

发表于 2015-9-29 19:30 | 显示全部楼层
(1)cnn是Connection對象,怎麼會等於一串字符?
(2)2樓的寫法是正確的。
(3)檢查一下Provider是否正確,以及ADO元件是否先期綁定。
(4)改成後期綁定看看是否可以:
Dim cnn As Object
Set cnn = CreateObject("ADODB.Connection")

TA的精华主题

TA的得分主题

发表于 2018-4-26 21:42 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-4-26 21:43 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我用的excel做数据库的,在自己电脑是ok的,在别人电脑就出现这个提示

TA的精华主题

TA的得分主题

发表于 2018-11-30 06:04 | 显示全部楼层
我也遇到这种事,但我的情况有点怪,我是用TXT文件做后台数据库的,我用了很长时间没事,但电脑重装后,就出现这种现象了,然后点击帮助,EXCEL 就重新启动,并修复EXCEL ,然后又行了,但用一会,又再出现这个问题,程序肯定是没有问题的,已经用了很长时间了,估计是重新安装电脑与OFFICE 后出现的问题,但为何又像六脉神剑一样,一会可以,一会又不行呢?请问各位高手,知道是怎么一回事,要如何处理?谢谢!

TA的精华主题

TA的得分主题

发表于 2019-1-23 17:34 | 显示全部楼层
我好像遇到了同样的问题,求助

Sub DoSql_Execute1()
   
    Dim TT
    TT = Timer
   
   

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

   
    Dim Sql1 As String, Sql2 As String, Sql3 As String, Sql4 As String, Sql5 As String, Sql6 As String, Sql7 As String, Sql8 As String


Dim a
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.InitialFileName = ThisWorkbook.Path


If .Show = 0 Then
    MsgBox ("已取消打开文件,并清空本工作薄"): Exit Sub '判断是否打开文件,点击确定返回-1,点击取消返回0,若返回0 则取消打开文件,显示弹窗并停止运行。

Else
    Sheets(2).Select
   
Set a = Workbooks.Open(.SelectedItems(1))
a.Sheets(1).AutoFilterMode = False
a.Sheets(1).Range("A:XFD").Copy ThisWorkbook.Sheets(2).Range("A1")
a.Close False

End If
End With



    Dim cnn As Object, rst As Object
    Dim Mypath As String, Str_cnn As String, Sql As String

    Dim i As Long
    Set cnn = CreateObject("adodb.connection")
    '以上是第一步,后期绑定ADO
    '
    Mypath = ThisWorkbook.FullName
    If Application.Version < 12 Then
        Str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath
    Else
        Str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath
    End If
    cnn.Open Str_cnn
    '以上是第二步,建立链接
   

    Sql = "SELECT a,b,c,d,e FROM [sheet2$] where e>" & Sql1 & " and (c>" & Sql2 & " or d>" & Sql3 & ") ORDER BY e DESC "
    'Sql语句,查询Sheet1表成绩大于80……姓名和成绩的记录
    Set rst = cnn.Execute(Sql)
    'cnn.Execute()执行SQL语句,始终得到一个新的记录集rst
    '以上是第三步,编写并使用SQL语句
    '
   
   
    Sheets(3).Select
    [a:z].ClearContents
    '清空[d:e]区域的值
    For i = 0 To rst.Fields.Count - 1
    '利用fields属性获取所有字段名,fields包含了当前记录有关的所有字段,fields.count得到字段的数量
    '由于Fields.Count下标为0,又从0开始遍历,因此总数-1
        Cells(1, i + 1) = rst.Fields(i).Name
    Next
    Range("a2").CopyFromRecordset rst
    '使用单元格对象的CopyFromRecordset方法将rst内容复制到D2单元格为左上角的单元格区域
    '以上是第四步,将SQL查询结果和字段名写入表格指定区域
    Columns("A:A").Select
    Selection.NumberFormatLocal = "yyyy/m/d h:mm"
    Range("a1").Select


    cnn.Close
    '关闭链接
    Set cnn = Nothing
    '释放内存



    MsgBox ("完成!并已另存为新工作薄!" & vbCrLf & "保存路径为宏工具所在位置" & vbCrLf & "用时:" & Format(Timer - TT, "#0.00") & " 秒")
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

TA的精华主题

TA的得分主题

发表于 2019-1-24 15:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-1-25 09:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
找到原因了,打开的文档重新打开保存下就好了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-18 12:40 , Processed in 0.045391 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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