2013-11-20 2 views
1

у меня есть доступ к базе данных с таблицей [tblManipulate] со следующими четырьмя полями заселенных с данными:Использование таблицы «подстановки» в MS-Access для запроса на обновление

[tblManipulate].[Name] 
[tblManipulate].[Description] 
[tblManipulate].[Price] 
[tblManipulate].[Account code] 

У меня также есть 150 запись таблицу описаний, называемую [tblDescLookup], которая должна использоваться как таблица поиска, чтобы манипулировать кодами учетной записи. Пример запись следует:

[tblDescLookup].[Description Lookup] [tblDescLookup].[Account Code Result] 
*demonstration*       10000 
*coding*        12000 
*e-mail*        13000 

Какой лучший способ взять все записи в [tblManipulate] и проверьте [Описание] поле [tblManipulate] против [tblDescLookup] [Описание просмотр], присваивающее.. результат кода счета в исходную таблицу, если найдено совпадение?

Это кажется мне одним из тех случаев, когда Access не лучший инструмент для работы, но это то, что мне было поручено использовать. Я был бы признателен за любую помощь или прозрение (или альтернативы!). Спасибо!

+1

Кажется, что для * "[tblManipulate]. [Описание] поле против [tblDescLookup]. [Описание просмотра]" *, вы хотите 'сравнение Like' вместо точного соответствия. Это абсолютное требование? – HansUp

+0

Да, мне нужно сравнение «Like». Люди, которые заполняют поля описания [tblManipulate], используют ключевые слова, но не делают это последовательно. Некоторый псевдокод хотел бы [tblManipulate]. [Account code] = if ([tblManipulate]. [Description], как [tblDescLookup]. [Описание Lookup], [tblDescLookup]. [Результат кода учетной записи], [tblManipulate]. [ Код учетной записи]) ' – Rot

+0

Дайте им форму с комбинированным полем для ввода' [tblManipulate]. [Description] '... тогда они будут вводить только допустимые значения, и вы можете использовать точное совпадение (хорошее) вместо' Like' (не очень хорошо) для поиска. – HansUp

ответ

1

Что-то вроде этого должно сделать это за вас.

Dim Description As String 
Dim lookupDescription As String 

Dim rs As DAO.Recordset 
Set rs = CurrentDb.OpenRecordset(SELECT * FROM tblManipulate) 

If Not (rs.EOF And rs.BOF) Then 
     rs.MoveFirst 'good habit 

     Do Until rs.EOF = True 


     Description = rs("Description") 

     Dim rsLookUp As DAO.Recordset 
     Set rsLookUp = CurrentDb.OpenRecordset(SELECT * FROM tblDescLookup) 


       If Not (rsLookUp .EOF And rsLookUp .BOF) Then 
         rsLookUp .MoveFirst 'good habit 

         Do Until rsLookUp.EOF = True 

         lookupDescription = rsLookUp("Description Lookup") 

         If() Then 'match criteria 
         'assign value 
         End if 

         rsLookUp.MoveNext 
         Loop 

        Else 
          MsgBox "No records in the recordset." 
         End If 


       rs.MoveNext 
      Loop 


      Else 
       MsgBox "No records in the recordset." 
End If 
+0

Это отлично работает! Я очень ценю, что вы об этом думаете. Большое спасибо за Вашу помощь! – Rot

+0

Рад помочь. Мне нужно было сделать что-то подобное не так давно, поэтому я подумал, что избавлю вас от необходимости разобраться. Удачи! – Makki

0

Oy. Тебе понадобится петля. Я бы открыть tblDescLookup в наборе записей:

Set rec = CurrentDB.OpenRecordset ("Select * from tblDescLookup") 

Тогда цикл по каждой записи и выполнить запрос таким образом:

Do While rec.EOF = False 

    Set rec2 = CurrentDB.OpenRecordset ("Select * from rec where Description like '" & rec("Description Lookup") & "'") 

    rec.MoveNext 

Loop 

Или, может быть, что вам нужно сделать, что оператор Update вместо этого? Я не могу написать это с головы, но вы поняли.

0

Вы пробовали что-то вроде этого?

Update tblManipulate as t1 
Set [Account Code] = (Select [Account Code Result] from [tblDescLookup] where [Description Lookup] = t1.[Description]) 
+0

как с ответом 宮本 武 answer, мне нужно сделать сравнение «как». Есть ли способ использовать 'like', а не равный? – Rot

+0

Если я понимаю вас правильно, вы должны просто иметь возможность заменить «like» для = в приведенном выше SQL. Можете ли вы предоставить мне пример? –

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