2013-06-16 8 views
2

Это включает в себя две таблицы в нашей Access 2007.Обновить таблицу базы на другой таблицы

«Станция Master» таблица состоит из записей рабочих станций

«Move-Add-Change» таблицы состоят из записей для перемещения, добавления, изменения шагов для специфики Идентификатор проекта.

Я создал запрос, чтобы вытащить все записи из «Move-Add-Change», которые соответствуют идентификатору проекта . Тогда мне нужно будет обработать следующим образом:

пройти через каждую строку в "Pull MAC Records by Project # Qry" запросе (есть Sequence поле нумерация от 1 подсчитывая там тоже)

Если поле Действие в строке Move :

  • Если «для Loc» той же строки не начинается с TSS (используется для инвентаризации Loc), обновление записей в «станция Master» с Loc Имя, равной «От Loc» поле той же строке в "Pull MAC Records by Project # Qry" запросе, изменить его значение к Чтобы Loc поле той же строке в "Pull MAC Records by Project # Qry" запросе

  • Если «К Loc» той же строки, начиная с TSS, удалите записи в «Мастер станции», который имеет имя локации, соответствующее «From Loc» той же строки в запросе "Pull MAC Records by Project # Qry".

Если поле Действие в строке Добавить:

  • Создать новую запись в "Station Master" с Loc Name является "Для Loc" поле строки

Если поле Действие в строке Изменение:

  • Сделайте то же самое, как Move плюс udpate на Описание «Станция Master» используя информацию из поля Notes той же строки в "Pull MAC Records by Project # Qry" запросе

Код должен идти один на один ряд в "Pull MAC Records by Project # Qry", потому что мы могли бы переместить другую станцию ​​в место, которое только что отошло.

Пример частичные результаты запроса:

Project Id Seq Action From Loc To Loc  Notes 
A123456  1  Move  WFC1234 TSSRepair For OEM service 
A123456  2  Move  WFC9999 WFC1234  Test station 
... 

Если я вызываю запрос, чтобы сделать обновление, похоже, она не проходит через построчно и побудит за нарушение (я думаю, что он пытался изменить WFC9999 до WFC1234 если оригинал WFC1234 запись все еще есть, причина дубликат).

Вот SQL моего запроса:

UPDATE [Station Master], [Pull MAC Records by Project # Qry] 
SET [Station Master].[Loc Name] = [Pull MAC Records by Project # Qry]![To Loc], 
    [Station Master].[Loc Function] = Left([Pull MAC Records by Project # Qry]![To Loc],3), [Station Master].[LoC#] = Right([Pull MAC Records by Project # Qry]![To Loc],Len([Pull MAC Records by Project # Qry]![To Loc])-3) 
WHERE 
    ((([Station Master].[Loc Name]) = [Pull MAC Records by Project # Qry]![From Loc])); 

Что я сделал не так? Могу ли я иметь все эти процессы исключительно в коде VBA (что мне не нравится)?

ответ

0

В зависимости от того, если вы хотите реальный цикл, вы можете использовать VBA, чтобы сделать это:

'Set your variables 

Dim myR as Recordset 
Dim myR2 as Recordset 

'Then set your recordsets to the two tables you want to work with 

Set myR = db.OpenRecordset("Station Master", dbOpenDynaset) 
Set myR2 = db.OpenRecordset("Move-Add-Change", dbOpenDynaset) 

'Now select the table you wish to work with until the end of file(EOF) 

while Not myR.EOF 
    If myR![Action] = "Move" Then 

     'Code goes here if true 

    Else 

     'Code goes here if false 

    End If 

    'Move to the next record and loop if not end of file(EOF) 

    myR.MoveNext 
Loop 

'Make sure to set close your recordsets when done 

Set myR = Nothing 
Set myR2 = Nothing 

Также проверьте here и here больше примеров на зацикливание.

+0

Я попробую эту идею. Мне, вероятно, придется закодировать цикл для каждого действия, чтобы идти по строкам подряд. Это важно, потому что станция может быть перемещена в другое место, затем другая станция будет перемещена в ее прежнее пространство и займет свое прежнее имя Лока. По мере того как запрос идет, он просто вышел из строя и жалуется на дублированный индекс. Благодарю. Если я заблужусь, вернусь к большему руководству. :-) – user2490287

Смежные вопросы