| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 657 人关注过本帖, 3 人收藏
标题:我想用ADO+SQL语句查询EXCEL,但得不到结果,大侠帮忙查找一下原因,谢谢
只看楼主 加入收藏
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
结帖率:51.67%
收藏(3)
已结贴  问题点数:20 回复次数:8 
我想用ADO+SQL语句查询EXCEL,但得不到结果,大侠帮忙查找一下原因,谢谢
Public xlApp As Excel.Application          '定义EXCEL类
 Public xlBook As Excel.Workbook            '定义工件簿类
 Public xlsheet As Excel.Worksheet          '定义工作表类
Private Sub Command1_Click()
   FileName = "仓库.xls"
Set xlApp = GetObject(, "Excel.Application")     '判断Excel是否打开
xlApp.WindowState = xlMaximized
           Set xlBook = xlApp.Workbooks.Open(App.Path & "\" & FileName) '打开工件簿文件
           xlApp.Visible = True
 Set cnn = CreateObject("ADODB.Connection")
    Set rst2 = CreateObject("ADODB.Recordset")
'    Set xlsheet = xlBook.Worksheets(4)
    ' xlsheet.Unprotect "123abc"
   ' xlsheet.Range("J:J").ClearContents

    cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=Excel 8.0;data source=" & App.Path & "\" & FileName
   ' StrSQL = "SELECT * FROM [" & Sh.Name & "$]"
     StrSQL = "SELECT * FROM [结存$] where 物料名称='JACK IN THE BOX'"
     StrSQL = "SELECT * FROM [结存$] "
    ' Set rst2 = cnn.Execute("SELECT 物料名称,规格型号,出库地点,出库人 FROM [出库$] where 物料名称 =''and 出库方式='采购入库'")
      Set rst2 = cnn.Execute(StrSQL)
       Set xlsheet = xlBook.Worksheets(2)
      xlsheet.Range("a5").CopyFromRecordset rst2
      For i = 1 To 2  'rst2.Fields.Count '获得SQL结果的列标题
      ' MsgBox rst2.Fields(i - 1).Name '字段名,
     '  MsgBox rst2.Fields(i - 1) '字段名,

    Next
End Sub
跟踪没有提示错误,我错了哪里?
SQLCX.zip (21.09 KB)
搜索更多相关主题的帖子: 工作表 EXCEL Excel 仓库 
2014-03-21 18:51
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:0 
有些细节上出错了,特别是记录集定义后要设置或返回游标引擎的位置 rst2.CursorLocation = adUseClient

程序代码:

 Public xlApp As New Excel.Application          '定义EXCEL类
 Public xlBook As New Excel.Workbook            '定义工件簿类
 Public xlSheet As New Excel.Worksheet          '定义工作表类
 Dim rst2 As New ADODB.Recordset, cnn As New ADODB.Connection

 
Private Sub Command1_Click()
    rst2.CursorLocation = adUseClient
    FileName = "仓库.xls"
    Set xlApp = CreateObject("Excel.Application") 
    xlApp.WindowState = xlMaximized
    Set xlBook = xlApp.Workbooks.Open(App.Path & "\" & FileName) '打开工件簿文件
    xlApp.Visible = True
    cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=Excel 8.0;data source=" & App.Path & "\" & FileName
    'StrSQL = "SELECT * FROM [结存$] where 物料名称='JACK IN THE BOX'"
    StrSQL = "SELECT * FROM [结存$]"
    rst2.Open StrSQL, cnn, 1, 1
    If Not rst2.EOF Then
        Set xlSheet = xlBook.Worksheets(2)
        xlSheet.Range("A2").CopyFromRecordset rst2
        For i = 1 To rst2.Fields.Count '获得SQL结果的列标题
            xlSheet.Cells(1, i) = rst2.Fields(i - 1).Name
        Next i
    Else
        MsgBox "没有找到记录!"
    End If
End Sub
2014-03-21 22:43
w360989426
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:228
专家分:301
注 册:2013-11-12
收藏
得分:0 
2楼正解
2014-03-21 22:52
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
收藏
得分:0 
拜读,二楼正确。

但我写在上面的代码,是网上搬过来的,为什么就不能用Set rst2 = cnn.Execute(StrSQL)???不解
2014-03-22 07:28
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:0 
应该也可以 试下
主要是要加这句,具体功能百度下,还有其它属性
rst2.CursorLocation = adUseClient
2014-03-22 10:35
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
收藏
得分:0 
又出现新问题了。。
   一般的查询都没有问题,
   但我发现:
    物料名称中一旦含有'时,就会出现操作符丢失的错误的。。。。
    比如:30行:WILKINSONS'S HARDWARE STORES LIMITED
          49行: SAINSBURY'S SUPERMARKETS LTD   
高手再帮我解决一下这个问题。。谢谢
2014-03-22 11:24
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:10 
如果遇到字串有单引号,在SQL语句中单引号前再加一个单引号
如果遇到字串有双引号,在SQL语句中双引号前再加一个双引号

StrSQL = "SELECT * FROM [结存$] where 物料名称='WILKINSONS''S HARDWARE STORES LIMITED'"
2014-03-22 22:02
yiyaozjk
Rank: 2
等 级:论坛游民
帖 子:231
专家分:30
注 册:2010-3-10
收藏
得分:0 
问题是:如果用 StrSQL = "SELECT * FROM [结存$] where 物料名称='"& 变量名 &"'"
   而这个字符串变量中又有单引号。。。。。。那如何再加单引号或双引号   啦??
2014-03-22 22:16
owenlu1981
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:211
专家分:1130
注 册:2013-5-17
收藏
得分:10 
先将变量作字符串替换 Replace(变量名,"'","''")
一般数据库中尽量避免引号
2014-03-23 13:20
快速回复:我想用ADO+SQL语句查询EXCEL,但得不到结果,大侠帮忙查找一下原因,谢 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014993 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved