Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: 张雄友

[已解决]SQL调用程序出不了数据

[复制链接]
 楼主| 发表于 2014-5-5 21:55 | 显示全部楼层
本帖最后由 张雄友 于 2014-5-5 21:59 编辑
hwc2ycy 发表于 2014-5-5 21:49
strSQL = "select 姓名,身份证号 from [" & s & "]"
在这后面再添加WHERE子句。

这样肯定不行,from 子句 语法错误。

出不了数据.rar

488.04 KB, 下载次数: 4

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2014-5-5 22:22 | 显示全部楼层
strSQL = "select 姓名,身份证号 from [" & S & "] WHERE 姓名='王丽力'"
你修改主过程肯定错误呀,
要在子过程里动态生成。
回复

使用道具 举报

发表于 2014-5-5 22:25 | 显示全部楼层    本楼为最佳答案   
  1. Dim strSQL, S, myPath$, OutputSheet$, OutputRange$
  2. Sub 载入数据()
  3.     strSQL = "select 姓名,身份证号 from "
  4.     '条件 = "WHERE 姓名='王丽力'"
  5.     OutputSheet = "结果"
  6.     OutputRange = "A2"
  7.     Call subProgram(strSQL, Pathstr, OutputSheet, OutputRange, "WHERE 姓名='王丽力'")    '调用子程序
  8.     MsgBox "OK"
  9. End Sub

  10. Sub subProgram(ByVal strSQL$, ByVal myPath$, ByVal OutputSheet$, ByVal OutputRange$, strCondition$)    '子程序
  11.     Dim cnn As Object, Rst As Object, rs As Object
  12.     Dim strConn As String
  13.     Dim i As Integer, j%, Pathstr, S$, t$, sProvider$
  14.     Pathstr = Application.GetOpenFilename(fileFilter:="Excel文件(*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", Title:="打开Excel文件", MultiSelect:=True)    '选择多个EXCCEL 文件
  15.     If TypeName(Pathstr) = "Boolean" Then Exit Sub
  16.     Application.ScreenUpdating = False
  17.     Select Case Application.Version * 1
  18.         Case Is <= 11
  19.             sProvider = "Provider = Microsoft.Jet.Oledb.4.0;Extended Properties ='Excel 8.0';Data Source ="
  20.         Case Is >= 12
  21.             sProvider = "Provider = Microsoft.Ace.Oledb.12.0;Extended Properties ='Excel 12.0';Data Source ="
  22.     End Select
  23.     Cells.ClearContents
  24.     On Error Resume Next    '
  25.     myPath = S
  26.     For i = 1 To UBound(Pathstr)
  27.         If Pathstr(i) <> ThisWorkbook.FullName Then
  28.             Set cnn = CreateObject("ADODB.Connection")
  29.             cnn.Open sProvider & Pathstr(i)
  30.             Set rs = cnn.OpenSchema(20)
  31.             Do Until rs.EOF
  32.                 If rs.Fields("TABLE_TYPE") = "TABLE" Then
  33.                     S = Replace(rs("TABLE_NAME").Value, "'", "")
  34.                     If Right(S, 1) = "$" Then

  35.                         Set Rst = cnn.Execute(strSQL & " [" & S & "] " & strCondition)
  36.                         If Err.Number = 0 Then
  37.                             m = m + 1
  38.                             If m = 1 Then
  39.                                 For j = 0 To Rst.Fields.Count - 1
  40.                                     Cells(1, j + 1) = Rst.Fields(j).Name
  41.                                 Next
  42.                                 Range("A2").CopyFromRecordset Rst
  43.                             Else
  44.                                 Range("A65536").End(xlUp).Offset(1).CopyFromRecordset Rst
  45.                             End If
  46.                             Exit Do
  47.                         Else
  48.                             Err.Clear
  49.                         End If
  50.                     End If
  51.                 End If
  52.                 rs.MoveNext
  53.             Loop
  54.         End If
  55.     Next
  56.     Cells.EntireColumn.AutoFit
  57.     Rst.Close
  58.     rs.Close
  59.     cnn.Close
  60.     Set cnn = Nothing
  61.     Set rs = Nothing
  62.     Set Rst = Nothing
  63.     Application.ScreenUpdating = True
  64. End Sub
复制代码
回复

使用道具 举报

发表于 2014-5-5 22:26 | 显示全部楼层
哪怕会一点点SQL,都知道错哪了。
回复

使用道具 举报

 楼主| 发表于 2014-5-5 22:27 | 显示全部楼层
hwc2ycy 发表于 2014-5-5 22:22
strSQL = "select 姓名,身份证号 from [" & S & "] WHERE 姓名='王丽力'"
你修改主过程肯定错误呀,
要在 ...

在子过程里动态生成?什么情况。
回复

使用道具 举报

发表于 2014-5-5 23:19 | 显示全部楼层
张雄友 发表于 2014-5-5 22:27
在子过程里动态生成?什么情况。

基础不好,先消化一个再说,多了只会越学越乱。
回复

使用道具 举报

 楼主| 发表于 2014-5-6 07:45 | 显示全部楼层
hwc2ycy 发表于 2014-5-5 21:28
strSQL是空的,肯定要报错。

你查别的表,该表里不是不有这些字段,这都要考虑到的,否则你就要考虑到容 ...

《美女一号》有二个表,但只提取了一个表的数据,有一个表没有提取到。

出不了数据hwc2ycy.rar

75.8 KB, 下载次数: 2

回复

使用道具 举报

发表于 2014-5-6 08:34 | 显示全部楼层
张雄友 发表于 2014-5-6 07:45
《美女一号》有二个表,但只提取了一个表的数据,有一个表没有提取到。

不能加EXIT DO,加了这个循环就结束了,余下的表就不会再处理了。
你把EXIT DO注释掉就可以了。

评分

参与人数 1 +3 收起 理由
张雄友 + 3 很给力!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-7 08:54 , Processed in 0.671071 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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