第一步保证远程的数据库能在本地的SQL程序中打开。
可以参照此博客的步骤进行配置
http://www.cnblogs.com/yougmi/p/4616273.html
然后就是代码区了!
'////////////////////////////////////////////////////////////////////////////////////
'2016-12-9
'采集远程数据库上面的电度
'只要配置好远程的SQL访问设置(允许远程访问)
'////////////////////////////////////////////////////////////////////////////////////
'实现方案!
'建立连接筛选出需要用到的列
'读取数据
'送到本地数据库中
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'远程数据库变量
On Error Resume Next
'Remote
Dim rStrCn,rCn,rSql,rConn,rRS,rCom
'本地数据库变量
'local
Dim lStrCn,lCn,is_lSql,lConn,lRS,lCom
Dim n,i
Dim Ana(1,14)
Dim riqi
Dim DateTime
'从WINCC访问sql2005数据库步骤:
'1) 创建一个到数据库的 ADO 连接
'2) 打开数据库连接
'3) 创建ADO记录集
'4) 从记录集提取你想要的数据,在表格显示出来
'5) 关闭记录集
'6) 关闭连接
'查询语句rSql
rSql = "SELECT pON, ReaValue FROM Ana WHERE pON BETWEEN 135 AND 149 ORDER BY pON "
'创建一个ADO连接远程数据库并且读出需要数据
rStrCn = "Provider=SQLOLEDB.1;Persist Security Info=false;User ID=sa;Password=123456;Initial Catalog=EasyOnline;Data Source=192.168.0.109,1433WINCC"
'创建ADO连接对象,对数据库操作
Set rConn = CreateObject("ADODB.Connection")
rConn.ConnectionString = rStrCn
rConn.CursorLocation = 3
rConn.Open
'打开数据库连接
'使用命令文本查询
'读取数据库的数据,那么其中的数据必须首先被载入一个记录集中。ADO连接创立后,就可以创建一个ADO记录集了。
Set rRS = CreateObject("ADODB.Recordset")
'创建一个ADO.Command对象。该查询用于取回数据,此数据将以一个 RecordSet 对象返回。这意味着被取回的数据能够被 RecordSet 对象的属性、集合、方法或事件进行操作
Set rCom = CreateObject("ADODB.Command")
'返回一个 Command 对象的类型
rCom.CommandType = 1
'返回包含了定义连接或 Connection 对象的字符串
Set rCom.ActiveConnection = rConn
'设置或返回包含提供者(provider)命令的字符串
rCom.CommandText = rSql
'执行 CommandText 属性定义的Sq1定义查询、SQL 语句或存储过程
Set rRs = rCom.Execute
n = rRs.RecordCount
i = 0
rRs.MoveFirst
Do While Not rRs.EOF
'取第一条记录的值。ADO Field 对象包含有关 Recordset 对象中某一列的信息。Recordset 中的每一列对应一个 Field 对象
Ana(0,i) = CStr(rRs.Fields(0).Value)
Ana(1,i) = CStr(rRs.Fields(1).Value)
i = i +1
rRs.MoveNext
Loop
rRs.close'退出程序前,关闭与数据库,记录集的连接
rConn.close
rCom.close
'添加到本地数据库
riqi=Now
lStrCn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=Electric_energy_meter;Data Source=.wincc"
Set lCn=CreateObject("ADODB.connection")
lCn.connectionString = lStrCn
lCn.Open
'执行INSERT INTO语句进行数据库的行添加
is_lSql = "insert into meter("& _
"Time,"& _
"jinxian1,"& _
"dianronggui1,"& _
"dianronggui2,"& _
"dianronggui3,"& _
"jiegouPL1,"& _
"jiegouPL2,"& _
"jiegouPL3,"& _
"tuzhuangdasha,"& _
"zhonghelou,"& _
"cangkuyuliu,"& _
"jiegouzhaoming,"& _
"beiyong,"& _
"biandianfangAL2,"& _
"weixiubanPL8"& _
") Values("& _
" '"& riqi &"',"& _
" '"& Ana(1,0) &"',"& _
" '"& Ana(1,1) &"',"& _
" '"& Ana(1,2) &"',"& _
" '"& Ana(1,3) &"',"& _
" '"& Ana(1,4) &"',"& _
" '"& Ana(1,5) &"',"& _
" '"& Ana(1,6) &"',"& _
" '"& Ana(1,7) &"',"& _
" '"& Ana(1,8) &"',"& _
" '"& Ana(1,9) &"',"& _
" '"& Ana(1,10) &"',"& _
" '"& Ana(1,11) &"',"& _
" '"& Ana(1,12) &"',"& _
" '"& Ana(1,13) &"'"& _
")"
lCn.Execute is_lSql
lCn.Close