решение для обновления таблицы на основе данных из другой таблицы - PullRequest
0 голосов
/ 07 июня 2010

у меня есть 2 таблицы в доступе

это то, что мне нужно:

1. if the PK from table1 exists in table2, then delete the entire record with that PK from table2 and add the entire record from table1 into table2
2. if the PK does not exist then add the record

мне нужна помощь как с оператором sql, так и с VBA

Полагаю, VBA должен быть циклом, проходящим каждую запись в таблице1 внутри цикла у меня должен быть оператор выбора

Ответы [ 3 ]

1 голос
/ 08 июня 2010

Я не думаю, что вам нужен цикл VBA, только два оператора SQL.

Сначала удалите соответствующие строки из таблицы 2.

DELETE 
FROM table2 AS m
WHERE pk IN (SELECT pk FROM table1);

Затем добавьте все строки из таблицы1 в таблицу2.

INSERT INTO table2 (
    pk,
    field2,
    field3,
    field4)
SELECT
    i.pk,
    i.field2,
    i.field3,
    i.field4
FROM
    table1 AS i;
1 голос
/ 08 июня 2010
DELETE FROM table2
  WHERE EXISTS
  (SELECT * FROM table1, table2
   WHERE table1.pk=table2.pk);

INSERT INTO table2
SELECT * FROM table1;

Предполагается, что table1 и table2 имеют одинаковые столбцы.

1 голос
/ 07 июня 2010

Я бы сделал это в двух утверждениях. Один, который удаляет правильные строки, а другой - для вставки строки.

Dim oDB As DAO.Database
Dim sSQL As String
Dim oQry As DAO.QueryDef

Set oDB = DBEngine.Workspaces(0).Databases(0)
sSQL = "Delete From Table2 Where Exists( Select 1 From Table1 Where Table1.Id = Table2.Id )"
oDB.Execute sSQL, dbFailOnError

sSQL = "PARAMETERS [Col1Param] Text, [Col2Param] Text, [Col2Param] Text; " & _
    "Insert Into Table1(Col1, Col2, Col3) Values([Col1Param], [Col2Param], [Col3Param])"
Set oQry = oDB.CreateQueryDef("", sSQL)
oQry!Col1Param = "Col1Value"
oQry!Col2Param = "Col2Value"
oQry!Col3Param = "Col3Value"
oQry.Execute, dbFailOnError

oQry.Close

Set oQry = Nothing
Set oDB = Nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...