2010-09-07 211 views
1

我想知道是否有人可以帮我在这里。如何删除记录并在其位置分配现有记录

删除记录以将已删除记录的所有实例分配给新记录时可能吗?

例如:

为了在时间规划数据库中的每个项目,我可以指定一个工人领队为每个项目。如果有一个团队负责人的重复条目,我需要删除其中一个这些细节的实例。如果你这样做了,那么你会留下空值来分配给这个“组长”的记录。这将是一个问题。

我明白你希望能够将这个问题扼杀在萌芽状态,可以这么说,并且不允许重复输入。但是,如果您需要删除记录,是否可以在其位置分配单独的记录?

希望这是有道理的,如果你能帮助我,将不胜感激。

干杯

诺埃尔

回答

2

Cascade update是可能的,但可能是矫枉过正的东西,只会偶尔发生,不应该发生在所有。我建议你运行一个查询,以更新相关记录删除领队之前:

Update Projects Set TeamLeaderID=123 
Where TeamLeaderID=456 
+0

如果FK是自动编号,我看不到CASCADE UPDATE会有什么好处。当更新FK值时,所有CASCADE UPDATE都将更新FK,并且由于Autonumbers不能更新,所以它不起作用。当然,如果要删除的记录的PK不是自动编号,CASCADE UPDATE可以工作,但不能将其更改为要将记录指向的现有记录的值,因为这会导致碰撞关于PK的独特索引。所以,我只是没有看到CASCADE UPDATE在解决这个问题上可以发挥什么作用。 – 2010-09-07 22:09:41

+0

OP说'不允许重复条目',这表明一些设计问题,这可能会使级联更新的可能性,但是,您可能会注意到我说'可能性',我没有说'推荐'。我在清洁数据时不时发现级联更新有用。 – Fionnuala 2010-09-07 22:28:14

+0

我并不质疑有时它可能有用,但在这种情况下,我无法想象它有助于解决这个问题。 – 2010-09-08 22:27:50

0

是的,这是可能的。这是一个知道的问题,你的工作人员被引用,找到所有这些位置,并通过对另一个工作人员的新引用替换引用。一旦所有对工作人员的引用都被删除,您可以删除该工作人员。

Option Compare Database 

Private Sub test() 
Dim db As Database 
Dim rs As Recordset 
Dim sql As String 


Set db = CurrentDb 
sql = "select worker_id from worker_ref_table" 
Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges) 

While Not rs.EOF 
    rs.Edit 
    rs!worker_id = "new value" 
    rs.Update 
    rs.MoveNext 
Wend 

rs.Close 

sql = "select worker_id from worker_table" 
Set rs = db.OpenRecordset(sql, dbOpenDynaset, dbSeeChanges) 

While Not rs.EOF 
    rs.delete 
Wend 

rs.Close 

End Sub 

VB Database Programming请参阅有关连接和数据库上运行更多的帮助。请注意,VB和VBA不一样。您应该能够在Access VBA中使用上述代码来完成此任务。

+2

当你可以简单地运行更新查询时,为什么要通过表格? – Fionnuala 2010-09-07 15:11:55

+0

我想,一旦我学到了一些可行的方法,但并不是完成任务的黄金时段,我倾向于坚持旧的方式。使用这种方法,我能够更新远程sql server表上的几个字段。很可能,其他方法更容易... – froeschli 2010-09-07 17:01:01

+1

为技术froeschli欢呼 – noelmcg 2010-09-13 14:03:08