以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  如何快速的只把股票历史数据写入SQL server数据库  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=188338)

--  作者:sword8586
--  发布时间:2021/5/17 12:02:55
--  如何快速的只把股票历史数据写入SQL server数据库
老师好,如题:
1、快速写入股票,只要股票的历史数据,不要债券等的历史数据写入SQL SERVER数据库
2、我的VBA方法太慢,请老师帮忙改改,提高写入速度。谢谢。、
sub SQL_Con1()
  application.MsgOut Date &" " &Time& "检索股票名称及代码"
Dim marketName
marketName=Array("SZ","SH")\'此处只查上海及深圳A股"SZ","SH"。不查期货市场"SQ","DQ","ZQ","ZJ",
\'找到股票的代码及名称
dim markets
For j=0 To UBound(marketName)
markets=marketName(j)\'某一市场名称
n=marketData.GetReportCount(markets)\'某一市场名称下股票或商品的数量
For i=0 To n-1
                            Set reportData=marketdata.GetReportDataByIndex(markets,i)\'某一市场名称下某种(i号)股票或商品的所有信息(代码、名称等)
     Dim Table_name,Code,Open,Close,High,Low,Date
     table_name1="M1_"+reportData.Label
     \'=====================================================================================================    
     dim cn,rs
     Set cn = CreateObject("Adodb.Connection")
     Set rs = CreateObject("Adodb.Recordset")  
     \'连接数据库``
     strCn="Provider=sqloledb;Server=高大\\MYSQL;Database=MyStocK;Uid=sa;Pwd=88888888;" 
     cn.Open strCn
     strfield1 ="[OpenD] [varchar](53) NOT NULL,[CloseD] [varchar](53) NOT NULL,[StockO] [float](53) NULL,[StockC] [float](53) NULL,[StockH] [float](53) NULL,[StockL] [float](53) NULL,[StockV] [float](53) NULL,[StockOI] [float](53) NULL"
                 strsqlcre ="CREATE TABLE [dbo].["+ table_name1 + "]("+strfield1+")"
        cn.Execute(strsqlcre)
     strSQL ="select * from ["&table_name1&"]"   \'定义SQL查询命令字符串   
     rs.Open strSQL,cn,1,3 \'执行strSQL所含的SQL命令,结果保存在rs记录集对象中
     \'调入调试数据,4 60分钟 
     set qtzq= marketdata.GetHistoryData(reportData.Label,marketName(j),0)\'周期类型:0 1分钟,1 5分钟,2 15分钟,3 30分钟,4 60分钟,5日线,6周线,7月线,8年线,9多日线,10分笔成交,11多小时线,12多秒线,13多分钟线,14季度线,15半年线,16节气线,17 3分钟,18 10分钟,19 多笔线 
                        for ii=0 to qtzq.Count-1                    
                        rs.addnew 
                        rs("OpenD")=DateAdd("n", -1, qtzq.Date(ii))
                        rs("CloseD")=qtzq.Date(ii)
                        rs("StockO")=CSng(qtzq.Open(ii))
                        rs("StockC")=CSng(qtzq.Close(ii))
                        rs("StockH")=CSng(qtzq.High(ii))
                        rs("StockL")=CSng(qtzq.Low(ii))
                        rs("StockV")=CSng(qtzq.Volume(ii))
                        rs("StockOI")=CSng(qtzq.OpenInt(ii))  
  rs.update                                                                                    
  next                 
    rs.close
  cn.Close \'关闭数据库链接,释放资源
  Set cn = Nothing\'释放连接
next
next
    MSGBOX "table text1表已存在"    

end sub 

--  作者:sword8586
--  发布时间:2021/5/17 12:08:56
--  
sub SQL_Con1()
application.MsgOut Date &" " &Time& "检索股票名称及代码"
Dim marketName
marketName=Array("SZ","SH")\'此处只查上海及深圳A股"SZ","SH"。不查期货市场"SQ","DQ","ZQ","ZJ",
\'找到股票的代码及名称
dim markets
For j=0 To UBound(marketName)
markets=marketName(j)\'某一市场名称
n=marketData.GetReportCount(markets)\'某一市场名称下股票或商品的数量
For i=0 To n-1
     Set reportData=marketdata.GetReportDataByIndex(markets,i)\'某一市场名称下某种(i号)股票或商品的所有信息(代码、名称等)
     Dim Table_name,Code,Open,Close,High,Low,Date
     table_name1="M1_"+reportData.Label
     \'===================================================================================================== 
     dim cn,rs
     Set cn = CreateObject("Adodb.Connection")
     Set rs = CreateObject("Adodb.Recordset")  
     \'连接数据库``
     strCn="Provider=sqloledb;Server=高大\\MYSQL;Database=MyStocK;Uid=sa;Pwd=88888888;" 
     cn.Open strCn
     strfield1 ="[OpenD] [varchar](53) NOT NULL,[CloseD] [varchar](53) NOT NULL,[StockO] [float](53) NULL,[StockC] [float](53) NULL,[StockH] [float](53) NULL,[StockL] [float](53) NULL,[StockV] [float](53) NULL,[StockOI] [float](53) NULL"
     strsqlcre ="CREATE TABLE [dbo].["+ table_name1 + "]("+strfield1+")"
cn.Execute(strsqlcre)
     strSQL ="select * from ["&table_name1&"]"   \'定义SQL查询命令字符串   
     rs.Open strSQL,cn,1,3 \'执行strSQL所含的SQL命令,结果保存在rs记录集对象中
     \'调入调试数据,4 60分钟  
     set qtzq= marketdata.GetHistoryData(reportData.Label,marketName(j),0)\'周期类型:0 1分钟,1 5分钟,2 15分钟,3 30分钟,4 60分钟,5日线,6周线,7月线,8年线,9多日线,10分笔成交,11多小时线,12多秒线,13多分钟线,14季度线,15半年线,16节气线,17 3分钟,18 10分钟,19 多笔线 
     for ii=0 to qtzq.Count-1
     rs.addnew 
     rs("OpenD")=DateAdd("n", -1, qtzq.Date(ii))
     rs("CloseD")=qtzq.Date(ii)
     rs("StockO")=CSng(qtzq.Open(ii))
     rs("StockC")=CSng(qtzq.Close(ii))
     rs("StockH")=CSng(qtzq.High(ii))
     rs("StockL")=CSng(qtzq.Low(ii))
     rs("StockV")=CSng(qtzq.Volume(ii))
     rs("StockOI")=CSng(qtzq.OpenInt(ii))    
     rs.update                              
next
rs.close
cn.Close \'关闭数据库链接,释放资源
Set cn = Nothing\'释放连接 
next 
next
    MSGBOX "table text1表已存在"
end sub 

--  作者:yukizzc
--  发布时间:2021/5/17 21:09:47
--  

抱歉,这边不提供数据导出相关的技术服务的


--  作者:sword8586
--  发布时间:2021/5/18 10:19:04
--  
谢谢您。我就用Dll处理吧。