查看完整版本: 利用ADO创建、读取Access数据库示例代码-2

闲人 2004-9-27 21:36

利用ADO创建、读取Access数据库示例代码-2

在<<输出数据到Excel示例代码>>教学篇中,老师不厌其烦地帮我解决了用公式读取自建的Excel的大难题,心中无限感激!但由于Excel受容量的限制,老师要求用Access数据库来替代Excel。见
[url]http://bbs.fjfox.com/viewthread.php?tid=2519&highlight=&page=2[/url]第35楼~38楼的贴子,尤其是36楼。
当时由于我无法自建Access数据库。现在经过长期摸索,初步能建成Access数据库了。但是又面临着新的问题,就是怎样才能读取Access里的数据呢?于是就想到了老师另一教学文章<<利用ADO创建、读取Access数据库示例代码>>,异想天开地、想当然地改动了几条语句,自以为就可以读出数据来了。可是读出来的全部是收盘价,但Access里根本又没有收盘价的数据。真是太不自量力了!下面将公式、Access(里面象征性地选了几只股票做例子)、显示的图型上传。恳请老师给予指教。衷心感谢!!!

闲人 2004-9-27 21:38

接上楼

闲人 2004-9-27 23:01

向南客老师致歉

再次拜请南客老师的"师"不知怎么漏写了,决非有意.在此向南客老师道歉,对不起,请老师原谅!

闲人 2004-9-28 22:26

南客老师,多么恳切地期望能再次得到您的无私帮助啊!

闲人 2004-9-29 21:56

[quote][i]闲人[/i] 于 2004-9-28 22:26 写道:
南客老师,多么恳切地期望能再次得到您的无私帮助啊! [/quote]
诚请南客老师.:clap::clap::clap:

hx817 2004-9-29 22:27

mdb 数据库中数据的序列与股票中 K 线的序列位置不一样

闲人 2004-9-30 00:32

请教老师,怎么样才能使它们的序列一样呢?恳请老师出手相助。十二万分感谢!!!:cool::clap::clap::clap:

闲人 2004-10-1 12:27

[quote][i]闲人[/i] 于 2004-9-30 00:32 写道:
请教老师,怎么样才能使它们的序列一样呢?恳请老师出手相助。十二万分感谢!!!:cool::clap::clap::clap: [/quote]
:clap::clap::clap:

hx817 2004-10-2 22:21

思路上,应该是将前面的
fy:=YEAR; fm:=MONTH; fd:=DAY;
带入 VBS 计算,而后与数据文件的第一位的日期比较,再对应取值

gusi 2004-10-4 23:35

:clap::clap:

gusi 2004-10-4 23:38

..............:thinking:

闲人 2004-10-5 20:14

心急如焚啊。请二位老师不吝赐教!谢谢啦!!!

hx817 2004-10-5 20:35

自己为什么不先检查清楚呢?
其中:
[code]
vo(i)=Rs.Fields("主力仓位(万股)")
vh(i)=Rs.Fields("仓位比率‰")
vl(i)=Rs.Fields("当日强度%")
vc(i)=Rs.Fields("智能体检(分)")
vv(i)=Rs.Fields("量比")
[/code]
看看这几个表,是否不对?

处理正确后,
将前面判断先去掉
[code]
  'if Rs.RecordCount=Last+1 then
    for i=0 to Last
      vo(i)=Rs.Fields("主力仓位(万股)")
      vh(i)=Rs.Fields("仓位比率‰")
      vl(i)=Rs.Fields("当日强度%")
      vc(i)=Rs.Fields("智能体检(分)")
      vv(i)=Rs.Fields("量比")
      Rs.MoveNext
    next
  'End if   
[/code]
这样就应该可以看到从第一个 K 线开始的数据
而后再来考虑前面说的时间对应问题

hx817 2004-10-5 22:04

加入对日期判断对应取数据
[code]
fc:=CLOSE;fo:=fc;fl:=fc;fh:=fc;fv:=fc;
gpdm:=STKLABEL; scdm:=MARKETLABEL;
fy:=YEAR; fm:=MONTH; fd:=DAY;
<%
vo=ffl.vardata("fo")
vh=ffl.vardata("fh")
vl=ffl.vardata("fl")
vc=ffl.vardata("fc")
vv=ffl.vardata("fv")
gpdm=ffl.vardata("gpdm")
scdm=ffl.vardata("scdm")
vy=ffl.vardata("fy")
vm=ffl.vardata("fm")
vd=ffl.vardata("fd")
n=ffl.vardata("n")

Const Jet3x = 4
Const Jet4x = 5
  FileName="user\a2000.mdb"
  TableName=scdm & gpdm
  On Error Resume Next
  ReadTable FileName,TableName

Sub ReadTable(FileName,TableName)
  Dim Conn,RS
  Set Conn=CreateObject("ADODB.Connection")
  Conn.Provider="Microsoft.Jet.OLEDB.4.0"
  Conn.Open FileName
  Set Rs=CreateObject("ADODB.Recordset")
  Rs.CursorType = 3
  Rs.LockType = 3
  Rs.Open TableName, Conn
  Rs.MoveFirst
  Last=ubound(vc)
    for i=0 to Last
     vdate=DateSerial(vy(i), vm(i), vd(i))
      if vdate>Rs.Fields("日期") then
        Rs.MoveNext
      end if
      if vdate=Rs.Fields("日期") then
        vo(i)=Rs.Fields("主力仓位(万股)")
        vh(i)=Rs.Fields("仓位比率‰")
        vl(i)=Rs.Fields("当日强度%")
        vc(i)=Rs.Fields("智能体检(分)")
        vv(i)=Rs.Fields("量比")
        Rs.MoveNext
      else
        vo(i)=0
        vh(i)=0
        vl(i)=0
        vc(i)=0
        vv(i)=0
      end if
    next
  Set Rs=Nothing
  Set Conn=Nothing  
End Sub

ffl.vardata("fo")=vo
ffl.vardata("fh")=vh
ffl.vardata("fl")=vl
ffl.vardata("fc")=vc
ffl.vardata("fv")=vv
%>
主力仓位:fo,linethick0;
仓位比率‰:fh;
当日强度:fl;
智能体检分:fc;
量比:fv;
[/code]

hx817 2004-10-5 22:21

数据

闲人 2004-10-5 23:20

使我多日悬起来的心今日终于得以落下。在此多多感谢hx817老师!:cool:在此也请老师多多保原谅,并非我偷懒,我也曾绞尽脑汁,苦思冥想,终不得要领,只因那么一点点醋,晃荡不起来,黔驴技穷了,所以不得已才麻烦老师。我也知道老师也非常忙,又在节假日中,我也十分不好意思.在此再次感谢hx817老师,谢谢!!!:cool::cool::cool::clap::clap::clap:

hx817 2004-10-5 23:38

不是说你 偷懒,而是不够细心
看了你的回帖,说明 第 13 楼 提的问题你自己还是没发现
看你公式中的原码
[code]
vo(i)=Rs.Fields("主力仓位(万股)")
vh(i)=Rs.Fields("仓位比率 ‰")
vl(i)=Rs.Fields("当日强度")
vc(i)=Rs.Fields("智能体检(分)")
vv(i)=Rs.Fields("量比")
[/code]
修改后的
[code]
vo(i)=Rs.Fields("主力仓位(万股)")
vh(i)=Rs.Fields("仓位比率‰")
vl(i)=Rs.Fields("当日强度%")
vc(i)=Rs.Fields("智能体检(分)")
vv(i)=Rs.Fields("量比")
[/code]
另外
原这句 if Rs.RecordCount=Last+1 then 是判断数据的记录数是否与 K 线序列值相等
所以要先取消

Rs.MoveNext 这个是数据库中指针的移动

新增部分完成对日期的判断
[code]
    for i=0 to Last
     vdate=DateSerial(vy(i), vm(i), vd(i))
      if vdate>Rs.Fields("日期") then //如果K线日期大于数据库日期,跳指针
        Rs.MoveNext
      end if
      if vdate=Rs.Fields("日期") then //如果K线日期等于数据库日期,取数据
           ......
        Rs.MoveNext
      else //否则,数据为 0
          ......
      end if
    next
[/code]

闲人 2004-10-6 21:05

看了老师对公式的剖析,让我获夷非浅.我要好好地珍藏!老师的精神更值得我们大家学习!再次谢谢老师!!!:cool::clap:

kjyhao 2004-10-7 18:12

我要好好地珍藏!

leguox 2004-10-14 00:15

写的很精彩啊

leguox 2004-10-14 00:20

很精彩啊

南客 2004-11-3 19:00

Sorry
近期事情多,来得少了,没看到贴子。
HX817解决得很好呀:)

闲人 2004-11-5 21:31

[quote][i]南客[/i] 于 2004-11-3 19:00 写道:
Sorry
近期事情多,来得少了,没看到贴子。
HX817解决得很好呀:) [/quote]
南客老师您真是太客气了,要说Sorry的是我,一而再再而三地麻烦老师。HX817老师也给了我很大的帮助,确实从心底里非常感谢二位老师。
      我心中有一个忧虑始终挥之不去,请见[quote]http://bbs.fjfox.com/viewthread.php?tid=11082&highlight=&page=3[/quote]第56楼的帖子,还请老师多多费心。拜谢了!!!

liws 2005-8-27 20:54

没有第 15 楼:  的源码呢,我看到一段是零以下的是什么呀????

joneslee 2005-10-28 11:19

D

njkyzy 2006-2-18 14:18

论坛有你更精彩,谢谢,辛苦了,感谢你的辛勤劳动!
页: [1]
查看完整版本: 利用ADO创建、读取Access数据库示例代码-2