ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 再讲ADO

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-8 12:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:ADO技术
向好心人致敬!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-10 10:57 | 显示全部楼层
本帖最后由 hyefeifei 于 2016-5-16 14:55 编辑

  二、如何把excel的数据写入文本文件
  答案是:以随机方式写入文本文件
  什么是随机方式呢?
  且看 open语句语法:
  Open 路径 访问模式 文件号 长度
  其中,访问模式共5种:①追加②二进制③输入④输出⑥随机
  默认方式为⑥随机
  且看示例:


  现在要把图中表的数据导出到文本文件,程序如图:


  代码如下:

Public Type udtGx
    bh As String * 30
    xh As Long
    bj As String * 10
    lj As String * 10
    gx As String * 10
End Type

Public Sub Tofile()
    Dim strPathToFile As String
    Dim m_Sj As udtGx
    Dim arr
    Dim i As Long
    Dim myFileNo As Integer
    strPathToFile = "d:\temp\fltab.dat"
    If Dir(strPathToFile) <> "" Then Kill strPathToFile   
    myFileNo = FreeFile
    Open strPathToFile For Random As myFileNo Len = Len(m_Sj)
    With ThisWorkbook.Worksheets("Fltab")
        arr = .Range("a2:e29")
    End With
    For i = 1 To UBound(arr)
        With m_Sj
            .bh = arr(i, 1)
            .xh = arr(i, 2)
            .bj = arr(i, 3)
            .lj = arr(i, 4)
            .gx = arr(i, 5)
        End With
        Put myFileNo, , m_Sj
    Next
    Close myFileNo                                 
End Sub

为什么要以随机方式写入文件呢?
  当然,不是非这种做不可,但这样做有这样做的好处:
  1. 由固定长度的记录顺序排列而成 每个记录可由多个数据项组成。
  2. 记录是最小的读/写单位,可以直接定位在任意一个记录后执行读/写操作,便于查询和修改。
  3. 通过制定记录号可以快速访问相应的记录。
  4. 当打开文件后,在读出数据时同时允许写入新数据。
  今天讲到这里,有点跳脱ADO了,下讲再讲把数据从文件取回到数据库。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-4-11 08:43 | 显示全部楼层
hyefeifei 发表于 2016-4-10 10:57
二、如何把excel的数据写入文本文件
答案是:以随机方式写入文本文件
什么是随机方式呢?

学习,慢慢消化!期待下一讲。

TA的精华主题

TA的得分主题

发表于 2016-4-11 10:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
期待精彩的下一讲!

TA的精华主题

TA的得分主题

发表于 2016-4-11 11:14 | 显示全部楼层
ADO相关教程太少了,期待大师继续完善!

TA的精华主题

TA的得分主题

发表于 2016-4-11 12:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-11 14:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-11 15:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-4-14 11:15 | 显示全部楼层
大神再讲下,如何根据excel表内容,用临时表批量更新sql数据表相关字段

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-15 12:19 | 显示全部楼层
前面把数据存入txt文件了,如何从txt文件中取回数据呢,很简单,现在把程序贴在下面,讲解在图中:
12.jpg
如果按以上程序,取回数据如下,各位看图会看到多取回了一行:
12.jpg
原因如下:
12.jpg
修改后的程序如下:
  1. Sub fromfile11()
  2.     Dim m_Sj As udtGx
  3.     Dim strPathToFile As String
  4.     Dim arr(1 To 1000, 1 To 5)
  5.     Dim myFileNo As Integer
  6.     Dim k As Long
  7.     strPathToFile = "d:\temp\fltab.dat"
  8.     myFileNo = FreeFile
  9.     Open strPathToFile For Random As myFileNo Len = Len(m_Sj)
  10.     With m_Sj
  11.         Do
  12.             Get myFileNo, , m_Sj
  13.                      If EOF(1) Then Exit Do       ‘在这里判断是否到了文件最后,及时退出,免得多取一行
  14.             k = k + 1
  15.             arr(k, 1) = Trim(.bh)
  16.             arr(k, 2) = Trim(.xh)
  17.             arr(k, 3) = Trim(.bj)
  18.             arr(k, 4) = Trim(.lj)
  19.             arr(k, 5) = Trim(.gx)
  20.         Loop
  21.         Close myFileNo
  22.     End With
  23.     With ThisWorkbook.Worksheets("fltab")
  24.         .Range("g2:q6000").Clear
  25.         .Range("g2").Resize(k, 5) = arr
  26.     End With
  27. End sub
复制代码
以下程序把文本文件中的记录插入数据库:
  1. Sub tobase()
  2.     Dim cmd As Object
  3.     Dim mj As udtGx
  4.     Dim strPathToFile As String
  5.     Connect "NorthwindSQL"
  6.     Conn.Open
  7.     strPathToFile = "d:\temp\fltab.dat"
  8.     Set cmd = CreateObject("adodb.command")
  9.     With cmd
  10.         .CommandText = "INSERT INTO fltab VALUES (?,?,?,?,?)"
  11.         Set .activeconnection = Conn
  12.         Open strPathToFile For Random As #1 Len = Len(mj)
  13.         .Parameters.Refresh
  14.         With mj
  15.             Do
  16.                 Get #1, , mj
  17.                 If EOF(1) Then Exit Do
  18.                 cmd.Execute Parameters:=Array(.bh, .xh, .bj, .lj, .gx), _
  19.                             Options:=adCmdText + adExecuteNoRecords
  20.             Loop
  21.         End With
  22.         Close #1
  23.     End With
  24. End Sub
复制代码
这方面的东西还有好多没有讲,讲了就太失之于琐碎了,下一讲说说更新数据库表


评分

3

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-14 15:09 , Processed in 0.044525 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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