在更新之前先修改其他两个主表并进行数据修改

时间:2018-11-01 19:33:21

标签: sql vba ms-access

我有两个表需要更新。我必须检查一张桌子上的每条记录,然后对数据进行一些修改,然后上传修改后的 数据到另一个表!

这两个表有3,000条记录和11,000条记录。另外我还必须 从大约50条记录的第三张表中检查一些信息!

Dim id
Dim fly_SQL
id="user1"
Dim rsc1_conn As ADODB.Connection

Set rsc1_conn = CreateObject("ADODB.Connection")
rsc1_conn.Provider = "SQLOLEDB"
rsc1_conn.ConnectionString = "SERVER=companyserver;UID=" & id & 
";Trusted_Connection=Yes;DATABASE=DATAbank" '
rsc1_conn.Open

Set rsc1 = CurrentDb.OpenRecordset("SELECT * FROM main_database", 
dbOpenDynaset, dbSeeChanges)
rsc1.movefirst
do until rsc1.EOF 

    fly_SQL = "Select * from alt_db where alt_db.number = main.net_number" 

    Set rsc2 = CurrentDb.OpenRecordset(fly_SQL)

    do stuff 

    code = dlookup( "type_def", "third_rec" , alt_db.activity = activity) 

两个表都使用 net_number 作为参考,该表在主键上是唯一的主键,但是 alt_db 有多个条目。

所以基本上,我必须遍历主机上的每个 net_number ,查看 alt_db 上匹配的 net_number ,然后比较一个活动字段 第三张表,看看我主要更新哪个字段!如果这是项目管理费用,则将其放在main.PM_cost中。 alt_db 中的 net_number 可能会重复10次,需要将这些其他费用汇总到主数据库中的相应费用类别中!例如:

主表类似于

net_number  

第一条记录显示

main.netnumber = 123456 
main.cont_cost
main.PM_cost
main.mgmt_cost

alt_db表看起来像

alt_db.net_number
alt_db.activity
alt_db.PM_cost
alt_db.const_cost
alt_db.mgmt_cost 

third_rec看起来像

third_rec.code
third_type

数据可以是con1,sabb,

code     type
sauf     construction
con1     management
I130     project management

以及所需的规则:

  • alt_db.activity检查third_rec.act并返回activity类型

  • 如果活动类型是构造类型,那么我将alt_db.cost放入main.const_cost

  • 如果活动类型为 project_mgmt ,那么我将alt_db.cost放入main.PM_cost中。 alt_db.activity可以是con1或SAF4,其类型由 third_rec 表确定。

试图找出最好的方法(最有效的方法)。

有什么建议吗?

上面的代码肯定会缺少适当的变量定义,但仅用于解释我的困境!

我也许可以用DLookup来做到这一点,但我认为那不是非常有效!

Pete

1 个答案:

答案 0 :(得分:0)

最好的方法是构建一个查询,该查询从Main和alt_db生成文件过滤的数据,以按net_number对活动进行分组。然后使用案例确定使用第三个文件更新alt_db中的哪些字段,并在主数据库的适当字段中更新结果。