大家好,请教一个SQL语句,我想在一表roll中,把所有的wr_tons_1=0时所对应的上面一条记录插入到表wr_1中,
我用下面的语句,
If str <> 0 Then
      db.Execute "insert into wr_1 select date,time,strip_id,wr_tons_1 from roll where wr_tons_1<>0"
怎么老是一次性把所有的roll表中wr_tons_1<>0的记录插入到表wr_1中,有没有办法让此语句一次只插入一条记录,因为我下面还有一条语句做判断插入的.下面是我全部的循环语句,麻烦大家帮我看一看,两天了,还是老样子.谢谢了.Private Sub Command3_Click()
Dim db As Database
Dim rst As DAO.Recordset
Set db = OpenDatabase("d:\out.mdb")
Set rst = db.OpenRecordset("roll")
rst.MoveFirst
Do While Not rst.EOF
   str = rst("wr_tons_1")
   If str <> 0 Then
      db.Execute "insert into wr_1 select wr_tons_1 from roll where wr_tons_1<>0"
      ElseIf str = 0 Then
      db.Execute "insert into wr_2 select wr_tons_1 from wr_1 where ID=(select max(ID) from wr_1)"
   End If
      rst.MoveNext
   Loop
end sub

解决方案 »

  1.   

    Private Sub Command3_Click()
    Dim db As Database
    Dim rst As DAO.Recordset
    Set db = OpenDatabase("d:\out.mdb")
    Set rst = db.OpenRecordset("roll")
    rst.MoveFirst
    Do While Not rst.EOF
       If rst("wr_tons_1") <> 0 Then
          db.Execute "insert into wr_1 select rst!wr_tons_1 "
        ElseIf str = 0 Then
          db.Execute "insert into wr_2 select rst!wr_tons_1"
       End If
          rst.MoveNext
       Loop
    end sub
      

  2.   

    你的目的是干什么呀?
    好像直接执行
    db.Execute "insert into wr_1 select wr_tons_1 from roll where wr_tons_1<>0"
    db.Execute "insert into wr_2 select wr_tons_1 from wr_1 where wr_tons_1=0 and ID=(select max(ID) from wr_1)"
    就可以呀
    怎么你外面判断了在语句里有判断一次?
      

  3.   

    目的还是想把表roll的记录中wr_tons_1=0上面的那条记录挑出来放在另一表wr_1中,你用的是access数据库,不能用触发器
      

  4.   

    yoki(小马哥) :我用
    Private Sub Command3_Click()
    Dim db As Database
    Dim rst As DAO.Recordset
    Set db = OpenDatabase("d:\out.mdb")
    Set rst = db.OpenRecordset("roll")
    rst.MoveFirst
    Do While Not rst.EOF
       If rst("wr_tons_1") <> 0 Then
          db.Execute "insert into wr_1 select rst!wr_tons_1 "
        ElseIf str = 0 Then
          db.Execute "insert into wr_2 select rst!wr_tons_1"
       End If
          rst.MoveNext
       Loop
    end sub
    提示:实时错误3125
         wr_tons_1不是一个有效名称或符号.
    我用的是access数据库,不能用触发器
    能否帮我写下代码,谢谢了.
      

  5.   

    有一数据表:roll
    id     date     wr_id   wr_tons_1
    1  2003.02.3    2201    265
    2  2003.02.4    2201    268
    3  2003.02.5    2203     0
    4  2003.02.6    2203    20
    5  2003.02.7    2203    39
    6  2003.02.8    2205     0
                     .
                     .
                     .
    想把roll表中wr_tons_1=0时的记录的上一条记录,存入到另一表:a2中.比如:表a1中id=3时的记录tons=0,想把此记录的上一条
    记录即:id=2 wr_tons_1=268的记录插入到表wr_2中.wr_1是一个是间表
    不知要怎样做.思路:表roll,是一个不断增加记录的表.可以在表wr_1增加记录时,写一个条件,如果wr_tons_1<>0时,记录增加到表wr_1中,如果
    wr_tons_1=0时,先不要向表wr_1添加记录,把表wr_1最后一条的记录插入到表wr_2中.但怎样写语句?请教各位表什么好的办法,谢谢了.yoki(小马哥) :我就是想实现此目的.我用的是dao+access数据库,你在另外一贴回答用触发器,但access没有触发器,只能用代码来实现了.请大家帮帮我吧,我试过很久了,没有写出来.再次多谢各位.
      

  6.   

    你可以这样:
    插入前判断当前插入值wr_tons_1是否为0
    如果是的话,就得到当前最大的ID并且wr_tons_1<>0的那条纪录插入到wr_2中
    否者直接插入
      

  7.   

    是啊,我想一条一条判断,一条一条插入,但
    If str <> 0 Then
          db.Execute "insert into wr_1 select date,time,strip_id,wr_tons_1 from roll where wr_tons_1<>0"
    怎么老是一次性把所有的roll表中wr_tons_1<>0的记录插入到表wr_1中,有没有办法让此语句一次只插入一条记录,
    而且,有些插入的sql语句,我不知怎样写,麻烦 yoki(小马哥) 是否帮我写一写,谢谢了.
      

  8.   

    第二条SQL语句应该没有问题,第一条语句的SQL语句是执行一批查询,而你实际上只需要一条记录,应将记录定位于在该条记录上才行,而定位于一条记录最好的办法就是ID号,而你的语句中没有加上就应该可行。
    if rst("wr_tons_1")<>0 then
      db.Execute "insert into wr_1 (wr_tons_1)  select wr_tons_1 from roll where  id="+rst("id")
    else
      db.Execute "insert into wr_2 select wr_tons_1 from wr_1 where ID=(select max(ID) from wr_1)"
    end if