日期:2014-05-17  浏览次数:20952 次

怎样将新插入的数据的id写入另一个表
【简述】
table1结构:
id 计划内容 完成节点 是否完成
1 出图 2012-4-30 否
2 技术单 2012-4-30 否

table2结构:
id f_id 计划内容 完成节点 是否完成
1 1 1-1号图 2012-4-18 否
2 1 1-2号图 2012-4-20 否
3 2 1-1技术单 2012-4-15 否

table1是一级计划,table2是二级计划,id是自动编号的
table1.id=table2.f_id
页面上显示:每一条一级计划下面是与它相关的二级计划

【功能描述】
现在有一个功能是任务的结转功能,就是当任务到节点时还没完成,就将此条任务的完成节点多加一个月,但是在数据库中还要保存原来的这条数据,就是说,当任务结转时,数据库里有两条相同的任务,只不过一条完成节点是2012-4-30,还有一条是2012-5-30。

【问题描述】
现在的问题是:当一级计划结转了后,二级计划也要跟着结转。
但是,我现在的做法不能使二级计划跟着结转。下面是我写的代码:
VBScript code

lid=request("id")   
sql="insert into table1(计划内容,完成节点,是否完成) select 计划内容,完成节点,是否完成 from table1 where id=cint('"&lid&"')"    '复制一条记录到数据库里
set rs=server.createobject("adodb.recordset")
rs.open sql,connstr,1,3
rs("完成节点")=time1
rs.update
newid=rs("id")  '得到复制记录的id(不知道是不是这样获得)
rs.close

sql1="insert into table2(f_id,计划内容,完成节点,是否完成) select f_id,计划内容,完成节点,是否完成 from table2 where f_id=cint('"&lid&"')"    
set rs1=server.createobject("adodb.recordset")
rs1.open sql1,connstr,1,3
rs1("f_id")=newid
rs1("完成节点")=time2
rs1.update
rs1.close



用上面的表做例子:
问题1:当table1中的一级计划结转后,不能生成table2中的结果

table1:
id 计划内容 完成节点 是否完成
1 出图 2012-4-30 否
2 技术单 2012-4-30 否
3 出图 2012-5-30 否

table2
id f_id 计划内容 完成节点 是否完成
1 1 1-1号图 2012-4-18 否
2 1 1-2号图 2012-4-20 否
3 2 1-1技术单 2012-4-15 否
4 3 1-1号图 2012-5-18 否
5 3 1-2号图 2012-5-20 否

问题2:如果一条一级计划下面有很多条二级计划,应该怎么办?

------解决方案--------------------
楼主,你的业务表模式合理与否我不评价了,
你现在就是想把主表中的一条记录另插入为一行新记录,同时把相关的子表记录也一起复制过去对吧?
这很简单,直接写在sql 语句里就行了,两条语句建议写成存储过程

 
SQL code

create proc addnewfromold
@oldid int
as
begin
    insert into table1(col1,col2) 
    select col1,col2 from table1 where id=@oldid
    
    declare @newid int
    set @newid=@@identity
    
insert into table2(f_id,col3,col4)
    select @newid,col3,col4 from tabl2 where f_id=@oldid 

end

------解决方案--------------------
VBScript code

<%
lid = Trim(request("id"))

Set conn = CreateObject("ADODB.Connection")
conn.Open connstr

sql = "select 计划内容,完成节点,是否完成 from table1 where id=" & lid
Set rs = CreateObject("ADODB.RecordSet")
rs.cursorLocation = 3
rs.open sql,conn,1,1
Set rs.activeConnection = Nothing
If Not (rs.EOF And rs.BOF) Then
   plan = Trim(rs("计划内容").Value)
   time1 = DateAdd("m", 1, CDate(rs("完成节点").Value))
   over = rs("是否完成").Value
End If
rs.close
Set rs = Nothing

sql = "SELECT * FROM table1 WHERE 1=0"
Set rs = CreateObject("ADODB.RecordSet")
rs.cursorLocation = 3
rs.open sql,conn,1,3
rs.AddNew
rs("计划内容").Value = plan
rs("完成节点").Value = time1
rs("是否完成").Value = over
iBookmark = rs.Bookmark
rs.Update
rs.Bookmark = iBookmark
newid = rs("id").Value
rs.Close
Set rs = Nothing

sql = "Select 计划内容,完成节点,是否完成 From table2 where f_id=" & lid    
sql1 = "Select * From table2 where 1=0"
Set rs = CreateObject("ADODB.RecordSet")
rs.cursorLocation = 3
Set rs1 = CreateObject("ADODB.RecordSet")
rs1.cursorLocation = 3
rs.open sql,conn,1,1
Set rs.activeConnection = Nothing
rs1.open sql1,conn,1,4 '批处理
Do While Not rs.EOF
   r