现有一个数据表(access)命名为product,有三个字段
产品号 prodID varChar(50)
零件号 compID varChar(50)
版本号 verID  varChar(10)
其中版本号的格式为"年月日"+"00",例如"2003070900"
一个产品由若干零件组成,若产品的版本号改变,则该产品的所有零件都重新纪录进数据库。怎样实现如下功能?
给定一个字符串"年月日"+"00"(即可能是表中版本号的值,也可能不是),选出所有满足条件的纪录写入另一张表中。
条件:取出所有产品的最新的版本(即离给定的字符串最近的版本号)。注意:产品的最新的版本号,不一定都是一样的,例如 可能a的最新版本号是20030630,b的是20030703,但是他们都是满足输入"20030705"时所要求的纪录给位帮一下忙拉,不够再加,急

解决方案 »

  1.   

    如果“版本号”是统一的数字,按该“版本号”排序,就可以了。
    1.选定的记录:"select * from Table1 where 版本号=" & val(trim$(text1.text)) & " order by 版本号"(要加入另一张表,用update 或 select into)
    2.最新版本号:"select * from Table1 where 版本号>=" & val(trim$(text1.text)) & " order by 版本号"
      

  2.   

    不清楚吗?
    给定的字符串假设为"20030703"a 的最新版本号为"20030630"
    a 的另一个版本号为“20030521”
    b 的最新版本号为"20030703"
    b 的另一个版本号位"20030625“
    c 的最新版本号为"20030708"
    c 的另一个版本号为"20030701“
    这样只有产品a 版本"20030630“
              和b 版本"20030625
              和c 版本"20030701“是满足条件的纪录
      

  3.   

    上面有错误:如果你的版本号的构成不是有规律的数字,还是用ADODB对象取出记录集来分析吧。用SQL可能有些麻烦。
      

  4.   

    to qingming81:
    版本号是有规律的"年月日"。例如"20030709"
     
      

  5.   


    最新版本号(假设text2.text中输入的是其产品号,text1.text是其对应的版本号):"select * from Table1 where 产品=" & val(trim$(text2.text)) & " and 版本号>=" & val(trim$(text1.text)) & " order by 版本号"
      

  6.   

    大概思路是这样的。如下就会得一个产品号对应的所有版本号(升序):
    "select * from Table1 where 产品号=" & val(trim$(text2.text)) & " order by 版本号"
      

  7.   

    最新版本号(假设text2.text中输入的是其产品号,text1.text是其对应的版本号):"select * from Table1 where 产品=" & val(trim$(text2.text)) & " and 版本号>=" & val(trim$(text1.text)) & " order by 版本号"
    ??
    这样好像意思不对啊,你这里是列出所有版本号大于给定的条件,可是我的意思是列出版本号中小于给定条件的最大值的所有记录举个例子
    版本号
    20030625
    20030629
    20030630
    20030702
    20030705如果我的条件是
    20030627 则应该返回的记录的版本号应该是 20030625
    20030701 则应该返回的记录的版本号应该是 20030630
    20030720 则应该返回的记录的版本号应该是 20030705
      

  8.   

    可以先找到满足小于版本号的所有记录,按产品号排序。
    在同一种产品中找到最大记录,将产品号及最大版本号同时记录下来,写进SQL语句中。
    重新搜索一遍,即可得到所求结果Dim rs As ADODB.Recordset
    Dim Cn As ADODB.Connection
    Set Cn = New ADODB.Connection
    Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\parTdb.mdb;Persist Security Info=False"
    Cn.Open Cn.ConnectionString
    sql="select * form product where 版本号 < '’+DateString+"00' order 产品号"
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open Sql, Cn, adOpenDynamic, adLockOptimistic, adCmdText'先按条件查找,如果存在取最后一条记录,不存在就修改条件再找
    If rs.EOF = False Then
       Dim i as long
       Dim LastProductNo As String
       Dim MaxVerNo As String   sql=="select * form product where "
       LastProductNo=rs!产品号 
       MaxVerNo=rs!版本号 
       rs.movenext
       For i=1 To rs.RecordCount-1
           if rs!产品号 = LastProductNo Then
                 If rs!版本号 >MaxVerNo Then
                     MaxVerNo = rs!版本号   '找到每种产品的最大版本号
                 End If
           Else   '在SQL语句中记录下每种产品最大版本号
                 sql=sql +" 产品号= '" + LastProductNo + " and 版本号 = "+MaxVerNo 
                 if rs.book <> rs.RecordCount Then
                 sql=sql +" or " '这个地方不是很确定,就是条件很多时,怎么写组合语句
                 End If
                  
                 LastProductNo =rs!LastProductNo
                 
           End If
                 rs.movenext
       Next i'按新的条件重新搜索,找到每种产品的最大版本号的所有记录Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open Sql, Cn, adOpenDynamic, adLockOptimistic, adCmdText
       
    End If
             
      

  9.   

    你这个是对所有记录进行操作,所以不必输入版本号吧,第一个SQL语句可以直接写为
    sql="select * form product order 产品号"
      

  10.   

    "select AssembleNo,max(VersionNo) from product where VersionNo<='" txtbomdate.text & "' group by AssembleNo,VersionNo order by VersionNo desc"想了半天,不知道这样能不能满足要求,hoho