Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1900|回复: 8

[已解决]解释下SQL代码?

[复制链接]
发表于 2013-6-19 16:53 | 显示全部楼层 |阅读模式
本帖最后由 dasda 于 2013-6-20 16:46 编辑

Sub 更新数据()
    Dim cnn As Object, SQL As String, arr, i&
    arr = Range("b1:b" & Range("b65536").End(xlUp).Row)
    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no';Data Source=" & ThisWorkbook.Path & "\B.xls"
    For i = 3 To UBound(arr)
        If IsNumeric(arr(i, 1)) Then
            SQL = "update [Sheet1$C" & i & ":C" & i & "] set f1=" & arr(i, 1)
        Else
            SQL = "update [Sheet1$C" & i & ":C" & i & "] set f1='" & arr(i, 1) & "'"
        End If
        cnn.Execute SQL
    Next
    cnn.Close
    Set cnn = Nothing
End Sub
最佳答案
2013-6-20 12:50
这里的F1,我猜是,因为连接数据库时没有指定属性HEADER=NO,所以,字段名就以F1(Fields1)这样的格式来命名,如果有多个有效字段,那字段名就依顺序为F1,F2,,F3这种格式。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-6-19 17:06 | 显示全部楼层
更新值的..B工作簿中Sheet1里C列中的值为当前表中对应的
回复

使用道具 举报

 楼主| 发表于 2013-6-19 17:08 | 显示全部楼层
Dj_soo 发表于 2013-6-19 17:06
更新值的..B工作簿中Sheet1里C列中的值为当前表中对应的

能不能解释每行代码?
回复

使用道具 举报

发表于 2013-6-19 17:26 | 显示全部楼层
  1. Sub 更新数据()
  2.     Dim cnn As Object, SQL As String, arr, i&
  3.     '取得B列数据,这里有个BUG,当B列只有B1有数据时,问题就会产生。
  4.     arr = Range("b1:b" & Range("b65536").End(xlUp).Row)
  5.    
  6.     '创建ADO连接对象
  7.     Set cnn = CreateObject("ADODB.Connection")
  8.    
  9.     '建立连接,当前工作簿目录下的B.XLS
  10.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no';Data Source=" & ThisWorkbook.Path & "\B.xls"
  11.    
  12.     '从数据第3行开始循环,实际中也就是B3单元格
  13.     For i = 3 To UBound(arr)
  14.         '更新对应的C列值
  15.         If IsNumeric(arr(i, 1)) Then
  16.             SQL = "update [Sheet1$C" & i & ":C" & i & "] set f1=" & arr(i, 1)
  17.         Else
  18.             SQL = "update [Sheet1$C" & i & ":C" & i & "] set f1='" & arr(i, 1) & "'"
  19.         End If
  20.         cnn.Execute SQL
  21.     Next
  22.     '关闭连接
  23.     cnn.Close
  24.     '释放对象
  25.     Set cnn = Nothing
  26. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-6-20 09:28 | 显示全部楼层
hwc2ycy 发表于 2013-6-19 17:26

IsNumeric(arr(i, 1)) 是什么
set f1=" & arr(i, 1) 这里的f1是什么?

回复

使用道具 举报

发表于 2013-6-20 09:56 | 显示全部楼层
IsNumeric 函数
请参阅     示例     特性

返回 Boolean 值,指出表达式的运算结果是否为数。

语法

IsNumeric(expression)

必要的 expression 参数是一个 Variant,包含数值表达式或字符串表达式。

说明

如果整个 expression 的运算结果为数字,则 IsNumeric 返回 True;否则返回 False。

如果 expression 是日期表达式,则 IsNumeric 返回 False。
回复

使用道具 举报

发表于 2013-6-20 09:56 | 显示全部楼层
f1是字段名。
你传个附件吧。
回复

使用道具 举报

 楼主| 发表于 2013-6-20 12:28 | 显示全部楼层
hwc2ycy 发表于 2013-6-20 09:56
f1是字段名。
你传个附件吧。

附件: 附件.rar (12.35 KB, 下载次数: 6)
回复

使用道具 举报

发表于 2013-6-20 12:50 | 显示全部楼层    本楼为最佳答案   
这里的F1,我猜是,因为连接数据库时没有指定属性HEADER=NO,所以,字段名就以F1(Fields1)这样的格式来命名,如果有多个有效字段,那字段名就依顺序为F1,F2,,F3这种格式。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 13:43 , Processed in 0.555951 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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