ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 从零开始学习SQL(图文教程)

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-1-26 23:08 | 显示全部楼层
本帖已被收录到知识树中,索引项:SQL应用
335081548 发表于 2014-1-31 10:05
用ADO+SQL在Excel文件中,插入新的数据
INSERT INTO [Sheet1$] (编号,商品名称, 单位,数量,单价,金额) VAL ...

感谢大师分享经验!请教一个问题,我建了个新空白excel工作表,在使用
INSERT INTO [Sheet1$] (编号,商品名称, 单位,数量,单价,金额) VALUES (21,'洗衣机','台',100,2500,250000)
这个语句的时候,出现下面问题:
我在这个新表中先建立这六个字段名“编号,商品名称, 单位,数量,单价,金额”,再使用insert into 语句的时候可以成功插入“21,'洗衣机','台',100,2500,250000”这几个值。
可是如果新表中完全空白,想直接插入字段名和字段值的时候msql总是提示字段名错误。
简单说,就是我在新空表中不能直接插入字段名。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-30 22:10 | 显示全部楼层
本帖最后由 335081548 于 2015-1-30 22:14 编辑

SQL多文件夹下多工作簿多工作表汇总
本实例适用于在一个文件夹下,有多个子文件夹,文件夹里有多个工作簿,工作簿里有多个工作表,而且数量不固定,文件夹可以拷贝到任意位置使用.
可以不知道文件夹路径,可以不知道工作簿名(不确定、无规律),可以不知道工作表名,不知道工作表数量。
但表的结构一定要一样。这是唯一的要求。


  1. Sub SQL多文件夹下多工作簿多工作表汇总_雪山飞狐()
  2.     Dim Fso As Object, Folder As Object, ArrFile$(), mf As Long, i As Long, x As Integer
  3.     Dim Cnn As Object, Rs As Object, SQL As String, SheetName$
  4.     With Application.FileDialog(msoFileDialogFolderPicker)
  5.         .InitialFileName = ThisWorkbook.Path & ""
  6.         If .Show = False Then Exit Sub
  7.         MyPath = .SelectedItems(1)
  8.     End With
  9.     Set Fso = CreateObject("Scripting.FileSystemObject")
  10.     Set Folder = Fso.GetFolder(MyPath)
  11.     Call GetFiles(Folder, ArrFile, mf)
  12.     Select Case Application.Version * 1    '根据Excel版本选择合适的连接语句
  13.     Case Is <= 11    '03以下包括03
  14.         strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data source="
  15.     Case Is >= 12    '07以上包括07
  16.         strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source="
  17.     End Select
  18.     Set Cnn = CreateObject("ADODB.Connection")
  19.     With Sheets("Sheet3")
  20.         .Cells.Clear    '清除所有内容
  21.         For i = 1 To mf
  22.             If ArrFile(i) <> ThisWorkbook.FullName Then    '文件不等于本文件
  23.                 Set Cnn = CreateObject("ADODB.Connection")
  24.                 Cnn.Open strConn & ArrFile(i)
  25.                 Set Rs = Cnn.OpenSchema(20)    '使用OpenSchema 方法取得数据源中的所有表信息,其中20是参数adSchemaTables的值,因为采用的是后期绑定,所以只能使用adSchemaTables的值
  26.                 Do Until Rs.EOF
  27.                     If Rs.Fields("TABLE_TYPE") = "TABLE" Then    '判断表类型是工作表,数据库中是数据表
  28.                         SheetName = Replace(Rs("TABLE_NAME").Value, "'", "")    '去掉可能存在的单引号,只能当工作表名中含有数字时才会出现
  29.                         If Right(SheetName, 1) = "$" Then
  30.                             SQL = "Select * From [" & SheetName & "] "
  31.                             .Range("A" & Rows.Count).End(xlUp).Offset(1).CopyFromRecordset Cnn.Execute(SQL)
  32.                         End If
  33.                     End If
  34.                     Rs.MoveNext
  35.                 Loop
  36.             End If
  37.         Next
  38.         For x = 0 To Cnn.Execute(SQL).Fields.Count - 1    '填写标题
  39.             .Cells(1, x + 1) = Cnn.Execute(SQL).Fields(x).Name
  40.         Next
  41.     End With
  42.     Set Folder = Nothing: Set Fso = Nothing
  43.     Rs.Close: Cnn.Close
  44.     Set Rs = Nothing: Set Cnn = Nothing
  45. End Sub
  46. Sub GetFiles(ByVal Folder As Object, ArrFile$(), mf&)
  47.     Dim SubFolder As Object
  48.     Dim File As Object
  49.     'If Folder.Path <> ThisWorkbook.Path Then'子文件夹
  50.     For Each File In Folder.Files
  51.         If File.Name Like "*.xls*" And InStr(File.Name, ThisWorkbook.Name) = 0 Then
  52.             mf = mf + 1
  53.             ReDim Preserve ArrFile(1 To mf)
  54.             ArrFile(mf) = File
  55.         End If
  56.     Next
  57.     'End If
  58.     For Each SubFolder In Folder.SubFolders
  59.         Call GetFiles(SubFolder, ArrFile, mf)
  60.     Next
  61. End Sub
复制代码

SQL多文件夹下多工作簿多工作表汇总.rar (75.68 KB, 下载次数: 833)

点评

这个子程序很熟悉。  发表于 2015-1-30 22:35

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-30 22:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
SQL跨工作簿多表查询

  1. Sub SQL多表查询_雪山飞狐()
  2.     Dim Conn As Object, Rst As Object
  3.     Dim strConn As String, strSQL As String
  4.     Dim i As Integer, PathStr As String
  5.     On Error GoTo ErrScr
  6.     Set Conn = CreateObject("ADODB.Connection")
  7.     Set Rst = CreateObject("ADODB.Recordset")
  8.     PathStr = ThisWorkbook.FullName   '设置工作簿的完整路径和名称
  9.     Select Case Application.Version * 1    '设置连接字符串,根据版本创建连接
  10.     Case Is <= 11
  11.         strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
  12.     Case Is >= 12
  13.         strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
  14.     End Select
  15.     '设置SQL查询语句
  16.     Conn.Open strConn    '打开数据库链接
  17.     strSQL = "Select * From (" _
  18.            & "Select * From [" & ThisWorkbook.Path & "\数据源.xlsx].[Sheet1$]  Union All " _
  19.            & "Select * From [" & ThisWorkbook.Path & "\数据源.xlsx].[Sheet2$]  Union All " _
  20.            & "Select * From [" & ThisWorkbook.Path & "\数据源.xlsx].[Sheet3$] ) " _
  21.            & "Where 班級&組別 In ( Select 班級&組別 From [Sheet1$A1:B]) "
  22.              'Debug.Print strSQL
  23.     Set Rst = Conn.Execute(strSQL)    '执行查询,并将结果输出到记录集对象
  24.     With Sheets("Sheet2")
  25.         .Cells.Clear
  26.         For i = 0 To Rst.Fields.Count - 1    '填写标题
  27.             .Cells(1, i + 1) = Rst.Fields(i).Name
  28.         Next i
  29.         .Range("A2").CopyFromRecordset Rst
  30.         .Cells.EntireColumn.AutoFit  '自动调整列宽
  31.     End With
  32.     Rst.Close: Conn.Close    '关闭数据库连接
  33.     Set Conn = Nothing: Set Rst = Nothing
  34.     Exit Sub
  35. ErrScr:
  36.     MsgBox Err.Description, , "雪山飞狐温馨提示"
  37. End Sub
复制代码


SQL跨工作簿多表查詢.rar

26.74 KB, 下载次数: 792

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-1-31 00:11 | 显示全部楼层
我想说的是,如果你要用的是两个工作表的数据时,你的SQL数据是怎么操作的 呢? 就是你上满介绍的都是用到sheet1表格里面的数据,但是当我要用到sheet2里面的数据的时候,SQL怎么书写呢?  还有就是你在里面介绍的多表合并的时候我也没有看到,怎么同时操作两个表格的数据?在同时把两个数据表格里面的列都移动到右边,然后在建立连接还是怎么操作???因为才刚刚开始学习SQL,功力还不够,如果问题太弱智,你见谅!!!

TA的精华主题

TA的得分主题

发表于 2015-2-2 19:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-4 10:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-7 20:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
很好的教程

TA的精华主题

TA的得分主题

发表于 2015-2-7 21:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Union All 查找多表数据不错

TA的精华主题

TA的得分主题

发表于 2015-2-7 23:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-2-10 23:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习sql较全的一个例子。做记号
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-26 07:56 , Processed in 0.044582 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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