网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

EXCELvba+SQL

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:本文主要为网学会员提供EXCELvba+SQL,希望对需要EXCELvba+SQL网友有所帮助,学习一下!


    EXCEL里使用SQL的方法(欢乐小爪原创)
    急用EXCEL的SQL用法,抄来欢乐小爪几篇文章,支持原创,留下小爪印:hi.baidu/huanhuanxiaozhua/blog
    EXCEL(VBA)~SQL经典写法范本汇集(一)
    2007-12-1021:20
    编前话:为了更系统的学习sql语句,小爪首次系统的汇集sql需引用microsoftactiveXDataObjects2.8library
    1.sql="select构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺from[参数$B2:K1916]where(大样代码='"&;DYDH&;"')and(内外框='WKXC')"
    2.sql="select构件名称,构件代号,横长度,横数量,竖长度,竖数量,比重,相应工艺from[参数$B2:K"&;CSMaxrow&;"]where(大样代码='"&;DYDH&;"')and(内外框='WKXC')"****************************************************************A、根据本工作簿的1个表查询求和写法范本Sub查询方法一()
    SetCONN=CreateObject("ADODB.Connection")
    CONN.Open"provider=microsoft.jet.oledb.4.0;extendedproperties=excel8.0;datasource="&;ThisWorkbook.FullName
    sql="select区域,存货类,sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from[sheet4$a:i]where区域='"&;[b3]&;"'andmonth(日期)='"&;Month(Range("F3"))&;"'groupby区域,存货类"
    Sheets("sheet2").[A5].CopyFromRecordsetCONN.Execute(sql)CONN.Close:SetCONN=NothingEndSub
    -----------------
    Sub查询方法二()
    SetCONN=CreateObject("ADODB.Connection")
    CONN.Open"dsn=excelfiles;dbq="&;ThisWorkbook.FullName
    sql="select区域,存货类,sum(代销仓入库数量),sum(代销仓出库数量),sum(日报数量)from[sheet4$a:i]where区域='"&;[b3]&;"'andmonth(日期)='"&;Month(Range("F3"))&;"'groupby区域,存货类"
    Sheets("sheet2").[A5].CopyFromRecordsetCONN.Execute(sql)CONN.Close:SetCONN=NothingEndSub
    **************************************************************************************************
    B、根据本工作簿2个表的不同类别查询求和写法范本
    Sub根据入库表和回款表的区域名和月份分别求存货类发货数量和本月回款数量查询()Setconn=CreateObject("adodb.connection")
    conn.Open"provider=microsoft.jet.oledb.4.0;"&;_
    "extendedproperties=excel8.0;datasource="&;ThisWorkbook.FullNameSheet3.Activate
    Sql="selecta.存货类,a.fh,b.hkfrom(select存货类,sum(本月发货数量)"_&;"asfhfrom[入库$]where存货类isnotnulland区域='"&;[b2]_&;"'andmonth(日期)="&;[d2]&;"groupby存货类)asa"_
    &;"leftjoin(select存货类,sum(数量)ashkfrom[回款$]where存货类"_&;"isnotnulland区域='"&;[b2]&;"'andmonth(开票日期)="&;[d2]&;""_&;"groupby存货类)asbona.存货类=b.存货类"Range("a5").CopyFromRecordsetconn.Execute(Sql)EndSub
    *******************************************************************C、根据本文件夹下其他工作簿1个表区域的区域求和
    Sub在工作表1汇总本文件夹下001工作薄的表1分数列查询汇总()Setconn=CreateObject("ADODB.Connection")
    conn.Open"dsn=excelfiles;dbq="&;ThisWorkbook.Path&;"\001.xls"sql="selectsum(分数)from[sheet1$]"
    Sheets(1).[a2].CopyFromRecordsetconn.Execute(sql)conn.Close:Setconn=NothingEndSub
    ---------------------
    Sub在工作表1汇总本文件夹下001工作薄的表1A1:A10查询汇总()Setconn=CreateObject("ADODB.Connection")
    conn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;hdr=no;';datasource="&;ThisWorkbook.Path&;"\001.xls"sql="selectsum(f1)from[sheet1$a1:a10]"
    Sheets(1).[A5].CopyFromRecordsetconn.Execute(sql)conn.Close:Setconn=NothingEndSub
    -----------------------
    Sub在工作表1汇总本文件夹下001工作薄的表1分数列A1:A7查询并msgbox表达汇总()Setconn=CreateObject("ADODB.Connection")Setrr=CreateObject("ADODB.recordset")
    conn.Open"dsn=excelfiles;dbq="&;ThisWorkbook.Path&;"\001.xls"sql="selectsum(分数)from[sheet1$a1:a7]"
    Sheets(1).[A8].CopyFromRecordsetconn.Execute(sql)rr.Opensql,conn,3,1,1MsgBoxrr.fields(0)
    conn.Close:Setconn=NothingEndSub
    ******************************************************************************************
    D、根据本文件夹下其他工作簿多个表区域的单列区域查询求和sub本文件夹下其他工作簿的每个工作簿的第4列30行查询求和DimcnAsObject,f$,arr&;(1To30),i%Application.ScreenUpdating=False
    Setcn=CreateObject("adodb.connection")
    f=Dir(ThisWorkbook.Path&;"\*.xls")DoWhilef<>""
    Iff<>ThisWorkbook.NameThen
    cn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;hdr=no;';datasource="&;ThisWorkbook.Path&;"\"&;f
    Range("d5").CopyFromRecordsetcn.Execute("selectf4from[基表1$a5:d65536]")cn.Close
    Fori=1To30
    arr(i)=arr(i)+Range("d"&;i+4)NextiEndIff=DirLoop
    Range("d5").Resize(UBound(arr),1)=WorksheetFunction.Transpose(arr)Application.ScreenUpdating=TrueEndSub
    **************************************************************************************************
    E、根据本文件夹下其他工作簿多个表区域的多列区域查询求和
    sub本文件夹下其他工作簿的每个工作簿的第B\C\D列25行查询求和DimcnAsObject,f$,arr&;(1To25,1To3),i%Application.ScreenUpdating=False
    Setcn=CreateObject("adodb.connection")f=Dir(ThisWorkbook.Path&;"\*.xls")DoWhilef<>""
    Iff<>ThisWorkbook.NameThen
    cn.Open"provider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;hdr=no;';datasource="&;ThisWorkbook.Path&;"\"&;f
    Range("b6").CopyFromRecordsetcn.Execute("selectf2,f3,f4from[基表3$a6:e65536]")cn.Close
    Fori=1To25Forj=1To3
    arr(i,j)=arr(i,j)+Cells(i+5,j+1)NextjNextiEndIff=DirLoop
    Range("b6").Resize(UBound(arr),3)=arrApplication.ScreenUpdating=TrueEndSub
    ***********************************************************************************
    F、其他相关知识整理'用excelSQL方法
    'conn是建立的连接对象,用open打开
    '通过CreateObject("ADODB.Connection")这一句建立了一个数据库连接对象conn'在工程中就不再需要引用“MicrosotActiveXDataObjects2.0Library“对象
    '设置对象conn为一个新的ADO链接实例,也可以用setconn=NewADODB.Connection。--------------
    'conn.Close表示关闭conn连接
    'Setconn=Nothing是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭conn.Open"dsn=excelfiles;dbq="&;ThisWorkbook.Path&;"\001.xls"能把这段含义具体解释一下吗?
    '这里的dbq的作用?
    '------------------
    'dsn是缩写,datasourcename数据库名是excelfile'
    'dbq也是缩写,databasequery意思是数据库查询,后接源库文件名001.xls
    '---------------------
    '代码中长单词怎么记住的?
    '比如copyfromrecordset可以拆开记忆,copy、from、recordset这三个单词意思知道吧,就是“复制、从、记录集”
    '-----------------
    'Sql="selectsum(分数)from[sheet1$]"这里加"分数"两字什么作用?'
    'SQL一般结构是select字段from表,意思是从指定的表中查询字段,字段的理解可以是:表中的列名'
    '分数是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据'-------------------
    '为什么要用复制的对象引用过来计算呢?'
    '因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总表来,所以需要复制copy'
    '注意这里的[sheet1$]",001文件的数据存放地上sheet1表,应当用方括号并加上
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师

    '如果源数据文件001不是excel,而是Access,则引用表时,不需要加方括号,也不要
  • 上一篇资讯: EXCEL表格导入到SQL数据库(附导入重复数据方法)
  • 下一篇资讯: Excel+ADO(DAO)+SQL+Access专辑(示例)
  • 相关资讯

    网学推荐

    原创论文

    文章排行榜

    设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师
    -----------------
        还有,这里Execute表示什么作用?
        ''Execute是执行SQL查询语句的意思-----------------------------
        如果不要字段也可以,那么在打开语句中加上:hdr=no'这样没有分数字段也可实现
        'SQL语句我换了形式,而且加上了hdr=no,即无需字段,而且我在SQL中用了sum(f1),f1表示第一列数据
        '[sheet1$a1:a10]"是只求a1:a10区域的和"
        **********************************************编后话:
        前面也多次听说了sql,总没有时间,也没有好好认识它第一次认真系统学习sql语句,汇集了一些代码。
        有不同理解的人,欢迎给予小爪评论,小爪只爱excel
        用Excel+VBA+SQLServer进行数据处理subtest()'定义过程名称
        DimiAsInteger,jAsInteger,shtAsWorksheet'i,j为整数变量;sht为excel工作表对象变量,指向某一工作表
        DimcnAsNewADODB.Connection'定义数据链接对象,保存连接数据库信息;请先添加ADO引用
        DimrsAsNewADODB.Recordset'定义记录集对象,保存数据表DimstrCnAsString,strSQLasString'字符串变量
        strCn="Provider=sqloledb;Server=服务器名称或IP地址;Database=数据库名称;Uid=用户登录名;Pwd=密码;"'定义数据库链接字符串
        '下面的语句将读取数据表数据,并将它保存到excel工作表中:画两张表想像一下,工作表为一张两维表,记录集也是一张两维表
        strSQL="select字段1,字段2from表名称"'定义SQL查询命令字符串cn.OpenstrCn'与数据库建立连接,如果成功,返回连接对象cn
        rs.OpenstrSQL,cn'执行strSQL所含的SQL命令,结果保存在rs记录集对象中i=1
        Setsht=ThisWorkbook.Worksheets("sheet1")'把sht指向当前工作簿的sheet1工作表
        DoWhileNotrs.EOF'当数据指针未移到记录集末尾时,循环下列操作
        sht.Cells(i,1)=rs("字段1")'把当前记录的字段1的值保存到sheet1工作表的第i行第1列
        sht.Cells(i,2)=rs("字段2")'把当前字段2的值保存到sheet1工作表的第i行第2列
        rs.MoveNext'把指针移向下一条记录
        i=i+1'i加1,准备把下一记录相关字段的值保存到工作表的下一行Loop'循环
        rs.Close'关闭记录集,至此,程序将把某数据表的字段1和字段2保存在excel工作表sheet1的第1、2列,行数等于数据表的记录数
        '下面的语句将读取excel工作表数据,并将之简单计算后存入数据库,这里使用上面程序中的一些变量
        '假设分别读取工作表sheet1第5行至第500行的第8列和第9列已存在的数据,然后将它们
        相乘,并将积存入数据库的某个表strSQL=""'清空上面定义的变量fori=5to500'循环开始,i从5到500
        strSQL=strSQL&;"insertinto表名(字段)values("&;sht.cells(i,8)*sht.cells(i,9)&;");"'构造SQL命令串next
        '至此生成一串SQL命令串,保存的内容大概为:insertinto表名(字段)values(数值1);insertinto表名(字段)values(数值2);
        
        cn.executestrSQL'执行该SQL命令串,如果SQL命令没有错误,将在数据库中添加501个记录;也可以用rs.openstrSQL,cn执行cn.close'关闭数据库链接,释放资源endsub
        
        
  • 上一篇资讯: EXCEL表格导入到SQL数据库(附导入重复数据方法)
  • 下一篇资讯: Excel+ADO(DAO)+SQL+Access专辑(示例)
  • 相关资讯

    网学推荐

    原创论文

    文章排行榜

    设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师