我想把"交通调查"这个表里的数据按15MIN时间段将各列数值相加后放到"数据统计"这个表里面,共有2各问题,一个50分,呵呵,代码如下;
Private Sub Command1_Click()
Dim db As Database
Dim rs As Recordset
Dim Sql1 As String, Sql2 As String, TimeInt As String
Dim bTime As Date, eTime As Date, mTime As Date, iTime As Date
Set db = OpenDatabase(App.Path & "\交通调查.mdb")
Set rs = db.OpenRecordset("数据统计")
For i = 1 To rs.RecordCount
rs.MoveFirst
rs.Delete
Next i
bTime = TimeValue("7:15")
endTime = TimeValue("18:15")
mTime = TimeValue("0:01")
iTime = TimeValue("0:15")
While bTime < endTime - iTime
bTime = bTime + iTime
eTime = bTime + iTime - mTime
Debug.Print eTime
TimeInt = CStr(bTime) & "-" & CStr(eTime)
Debug.Print TimeInt
Sql1 = "insert into 数据统计(小汽车,小货车,中货车,大货车,中客车,大客车,摩托车,自行车,行人) select sum(小汽车),sum(小货车),sum(中货车),sum(大货车),sum(中客车),sum(大客车),sum(摩托车),sum(自行车),sum(行人) from 城市道路 where 时间 between " & bTime & " and " & eTime & ""
Sql2 = "update 数据统计 set 时段='" & TimeInt & "'"
db.Execute Sql1
db.Execute Sql2
Wend
End Sub
Q1:关于sql1,运行后出现提示:语法错误(操作符丢失)在查询表达式'时间 between 7:30:00 and 7:44:00'中,也就是第一次循环执行sql1就没成功,哪里有问题啊?
Q2:关于sql2,为了避免问题1,我把sql1,中的between " & bTime & " and " & eTime & "换成一个特定时间between #7:55# and#8:00#,这次循环正常进行,但是最后sql2中时段那列所有值全都变成相同的时间18:15-18:29,而debug.print显示的是我要的连续时间段,我在sql2中使用的变量timeint啊,为什么和debug.print的不同呢?怎么改啊?
问题有点多,请各位慢慢看啊,谢谢!!

解决方案 »

  1.   

    Q1:
    between " & bTime & " and " & eTime & ""==>
    between '" & bTime & "' and '" & eTime & "'"
    Q2:
    Sql2 = "update 数据统计 set 时段='" & TimeInt & "'"==>
    Sql2 = "update 数据统计 set 时段='" & TimeInt & "'" & From 数据统计 Where 你的条件
      

  2.   

    1》
    between  bTime  and  eTime 2》Sql2 = update 数据统计 set 时段=TimeInt
      

  3.   

    TimeValue() 干什么作用的? SQL SERVER 语句,字符串、日期等等需要加上'' ,在为字符形式来对待的。
      

  4.   

    未解决!!!
    第一个问题按一楼的添上单引号后还是不行啊,提示"标准表达式中数据类型不匹配",怎么回事啊,?
    第二个问题我知道原因了,是因为我用update没有制定条件,所以就是整列修改
    现在问题还没有解决,100分等着大家呢!!
    我把问题说的更清楚点吧,两个表的结构如下,我本想用循环一条一条的添记录,先用sql1把数据统计表中的除时段外个列都填上,再用sql2添加时段,一直循环下去.
    由于要分2次完成这个表,这个方法不好实现,于是我在数据统计这个表里面加了一个序号字段用修改后的sql2对时段的进行添加,具体代码如下:城市道路:表
    时间   小汽车  小货车 .........
    7:30    0       1    ...
    7:31    1       0
    7:35    1       0
    ....     ..     ...数据统计:表
    序号    时段    小汽车  小货车  ....
    1      7:30-7:44  12     6     ..
     2      7:45-8:00   5     23  ..
    .....
    Private Sub Command1_Click()
    Dim db As Database
    Dim rs As Recordset
    Dim Sql As String, Sql1 As String, Sql2 As String, TimeInt As String
    Dim bTime As Date, eTime As Date, mTime As Date, iTime As Date
    Dim i As Integer, j As Integer
    Set db = OpenDatabase(App.Path & "\交通调查.mdb")
    Set rs = db.OpenRecordset("数据统计")
    For i = 1 To rs.RecordCount
    rs.MoveFirst
    rs.Delete
    Next i
    rs.Close                                                         '关闭rs,否则将于sql的执行冲突
    Sql = "ALTER Table 数据统计 ALTER COLUMN 序号 COUNTER (1, 1)"    '序号归1
    db.Execute Sql
    bTime = TimeValue("7:15")
    endTime = TimeValue("18:15")
    mTime = TimeValue("0:01")
    iTime = TimeValue("0:15")
    While bTime < endTime - iTime
    j = j + 1
    bTime = bTime + iTime
    eTime = bTime + iTime - mTime
    Debug.Print j
    Debug.Print eTime
    TimeInt = CStr(bTime) & "-" & CStr(eTime)
    Debug.Print TimeInt
    Sql1 = "insert into 数据统计(小汽车,小货车,中货车,大货车,中客车,大客车,摩托车,自行车,行人) select sum(小汽车),sum(小货车),sum(中货车),sum(大货车),sum(中客车),sum(大客车),sum(摩托车),sum(自行车),sum(行人) from 城市道路 where 时间 between '" & bTime & "' and '" & eTime & "'"
    Sql2 = "update 数据统计 set 时段='" & TimeInt & "' where 序号=" & j & ""      'j为整数,不用加单引号
    db.Execute Sql1
    db.Execute Sql2
    Wend
    End Sub因此现在只要解决第一个问题就行了,一个问题一百分啊!!!!我就奇怪了,sql2中的那个时间变量都可以正常运行,为什么sql1中的那个不行?大家花点时间仔细看看问题出在哪里,谢谢!
      

  5.   

    1.你检查一下你表中字段:时间 的数据格式
    2.用一个固定值取代你的bTime,eTime测试一下看看
    3.取消时间部分看看是不是正常插入
      

  6.   

    回楼上的,我把sql1,中的between  "  &  bTime  &  "  and  "  &  eTime  &  "换成一个特定时间between  #7:55#  and#8:00#,循环正常进行,但我要的是不同的时间啊?
    哪里的问题啊?????
    还有,能否换一种方法来避开这个问题又能达到同样的效果?请指教
      

  7.   

    1 sql2中的那个时间变量都可以正常运行是应为你数据表中“时段”应该是字符型
    2 表“城市道路”中的“时间”字段的数据类型是什么?(我估计是字符型)
    3 如果是字符型,将 where 时间 between '" & bTime & "' and '" & eTime & "'"
    改成:where 时间 between '" & cstr(bTime) & "' and  '" & cstr(eTime) & "'"试试
      

  8.   

    对 先要搞清楚你表中的 时间 这个字段什么类型 SQL语句的数据类型大多数不是自动转换的
      

  9.   

    楼上的朋友们太感谢你们了,特别是ctseu(点水清荷)大侠,困扰我2天的问题解决了!我吧城市道路里时间的数据类型由时间改为文本就ok了!再次感谢ctseu(点水清荷)!!
    结贴了,感谢大家帮忙,每人5分,乘下的就给ctseu(点水清荷)了!!