vb access2007/ 2003 sql查询求助。
原来vb区有专门的数据库板块,刚在数据access那边发了,重发版主不要删除,问题搞好几天没搞定,谢谢。各位大神好:
小弟最近使用vb做个小报表,数据库的数据是有别的软件(rsview se)通过ODBC实时存储好的,我需要读取其中的部分数据显示到表格。
数据库类型是:access2003或者access2007
操作系统是win7
数据库的字段:dateandtime 记录准确写入数据的时间 格式 yyyy-mm-dd hh:mm:ss
tagindex 索引号如0,1,2。。对应与另一张表的名称。
val 具体数据
每个tagindex在每一分钟记录一次数据。
可以产生的情况如下:
DateAndTime TagIndex Val
2012-11-23 9:08:49 0 50
2012-11-23 9:08:49 1 7
2012-11-23 9:08:49 2 9
2012-11-23 9:08:49 3 2012
2012-11-23 9:09:49 0 49
2012-11-23 9:09:49 1 8
2012-11-23 9:09:49 2 9
2012-11-23 9:09:49 3 2012
2012-11-23 9:10:49 0 49
现在我需要查询这个表达到如下结果:
根据用户选择日期和tagindex 来查询对应日期所在月份的每一天的8:20,16:20,00:20的数据,然后填入表格中,现在在vb中使用spreadsheet控件。
我的思路是这样;按天查询,使用循环查出对应tagindex在某个月的一天中的三个值,外面再循环查这个月的每一天,但查询语句似乎有很大的问题,然后同一个tagindex如果取出3各值的话,我怎么填到表格内,rs的条件不清楚。
以下是我的代码:
'Open ADODB
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sq As String
Dim i As Integer
Dim n As Integer
Dim DD As Integer
Dim tt As String
For DD = 1 To tc '获取日期号,tc为某月的天数
For i = 0 To 2 '对于同一tagindex提取的数据数量,为3个,
'打开数据库
With cnn
.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.mdb;Mode=ReadWrite;Persist Security Info=False"
.CommandTimeout = 300
End With
'根据i值指定时间点
Select Case i
Case 0: tt = "08:20"
Case 1: tt = "16:20"
Case 1: tt = "00:20"
Case Else: tt = "08:20"
End Select
'查询数据
With rs
.Open "select val from FloatTable where TagIndex= " & Num & " and cint(month(DateAndTime))= " & Mth & " and cint(day(DateAndTime))= " & DD & " and mid(cstr(format(DateAndTime,hh:mm)),0,4)= " & tt & ", cnn, 1, 1"
End With
If rs.BOF Or rs.EOF Then
MsgBox "kong"
Else
For n = 0 To rs.Fields.Count - 1
'填充表格
ssp1.Range("b3:f10").Cells(n, 2) = Trim(rs.Fields.Item(n).Value)
Next n
End If
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
Next i
Next DD
以上“Num”为用户在操作界面选择的tagIndex对应的号。“mth”为用户选择日期所在的月份值,dd是个日期循环值,从月初到月底循环,所查询总计多少天在其它代码实现。
报错误为“3709,连接无法执行次操作,再次上下文中可能已关闭或无法操作”
csdn无法提供附件?why!
各位对于这种查询是否有更好的方法,可提供学习,毕竟小弟不是专门玩这个的。
补充:VB , 数据库(包含打印,安装,报表)