网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月30日漏签0天
excel吧 关注:282,024贴子:1,557,908
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 20回复贴,共1页
<<返回excel吧
>0< 加载中...

请教大神,如何用VBA将Excel中的数据插入SQL ser

  • 只看楼主
  • 收藏

  • 回复
  • 吃肉喝水
  • 日新月E
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如题。网上找了一些代码都报错,请大神指教


  • baifandu2013
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个我知道,我用过的。大致上就是用sql select的插入语句来操作,sql主要使用sql select来操作数据库,我估计其他数据库应该也是,所以控制数据库的数据是完全依赖sql select的,跟在数据库里面的操作是一样的。


2025-12-30 15:09:07
广告
不感兴趣
开通SVIP免广告
  • baifandu2013
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
关于vba导入数据到sql server数据库,下面是核心代码:
1、连接数据库:
需要microsoft activeX date objects组件支持,系统自带的,但我曾发现有些电脑的默认安装中没有包含它。在vba菜单-工具-引用,找到并勾选,随便什么版本号的都行;
下面是我实际代码的摘录,把你的服务器名称和数据库名称写在下面代码的对应位置:
Const cnnstr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=数据库名称;Data Source=数据服务器名称
Cn.Open cnnstr
2、删除原有数据:在添加数据前一般要先删除原有数据,防止重复添加。其中s1和s3都是我代码中的参数,你适当修改;
FanSql = "delete from fanMaster where rq between '" + s1 + "' and '" + s3 + "'"
Rec.Open FanSql, Cn
3、插入数据:完整复制了我的运行代码,其中的参数你自行替换掉,也包含了个别字段转换的逻辑匹配。要记住:sql数据库都是以文本的方式插入的,即使定义的字段是数字,所以都需要把值添加双引号;
While Cells(i, 1) <> ""
FanSql = "Insert into fanMaster (gs,rq,pzh,kmbm,km,zy,dwbm,wldw,xmh,jf,df) values("
For k = 1 To 9
FanSql = FanSql & "'" & Cells(i, k) & "',"
Next
If IsEmpty(Cells(i, 10)) Then '防止空白到数字的转换问题
FanSql = FanSql & "'0.00',"
Else
FanSql = FanSql & "'" & Cells(i, 10) & "',"
End If
If IsEmpty(Cells(i, 11)) Then
FanSql = FanSql & "'0.00')"
Else
FanSql = FanSql & "'" & Cells(i, 11) & "')"
End If
Rec.Open FanSql, Cn
i = i + 1
Wend
4、其他关于数据库的操作都类似,完全是按照sql语法规范来进行的。在vba中调用sql语句总结下来就是3步:
1)、连接,Rec.Open FanSql, Cn;
2)、执行, Rec.Open FanSql, Cn;
3)、关闭,Cn.Close。
连接和关闭语句只需要开始和结束用一次就ok,但执行每调用一次sql就要执行一次,所以Rec.Open FanSql, Cn是放在循环内的
就这些了。


  • baifandu2013
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复 吃肉喝水 :我没遇到过连接不成功的情况,尤其你本机就是服务器的时候更不会发生。其他客户端连不上一般是公司网络故障造成的。我使用这种代码连接很多年,我认为很可靠。sql对电脑硬件的要求并不算高,普通电脑都能从分应付,但有一种情况会影响运行效率,当开了大量浏览器窗口或者打开很多其他程序时会有明显的延时,这种延时主要体现在连接阶段,一旦连上了后面的运算就很效率了。


  • baifandu2013
  • 博采众E
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
读取sqlserver数据库的基本代码:
Dim Cn As New ADODB.Connection
Dim Rec As New ADODB.Recordset
Const cnnstr = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=数据库名称;Data Source=数据服务器名称;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=FANYOULIN;Use Encryption for Data=False;Tag with column collation when possible=False"
Cn.Open cnnstr
FanSql = "select gs,xmh,km,dwbm,wldw sum(jf)-sum(df) from fanMaster where (km like '材料%') group by gs,xmh,km,dwbm,wldw having (xmh<>'') and (sum(jf)-sum(df)<>0) order by gs,xmh,wldw"
Rec.Open FanSql, Cn
ls1 = 0
While Not Rec.EOF
x1 = Rec.Fields(0).Value
x2 = Rec.Fields(1).Value
x4 = Rec.Fields(2).Value
x5 = Rec.Fields(3).Value
x6 = Rec.Fields(4).Value
x7 = Rec.Fields(5).Value
Cells(ls1, 1) = x1
Cells(ls1, 2) = x2
Cells(ls1, 3) = x3
Cells(ls1, 4) = x4
Cells(ls1, 5) = x5
Cells(ls1, 6) = x6
Cells(ls1, 7) = x7
Rec.MoveNext
Wend
Rec.Close
Cn.Close
上面是一段很基本的读取代码,数据库连接3楼我解释了。数据查询结果会返回到记录集 Rec中,它定义为ADODB.Recordset,用循环逐一读取来写在对应单元格就好了。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 20回复贴,共1页
<<返回excel吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示