2016-10-02 2 views
-1

Я новичок в базах данных. Я создаю базу данных Access для отслеживания динамики запасов нашей компании. У меня две таблицы. Один из них - текущий инвентарный запас, другой - потребление, вызванное производственной деятельностью. Обновление выполняется сразу после каждого выпуска.Использование оператора SQL для таблиц условного обновления в доступе 2013

Перед выполнением обновления я хочу проверить, что один и тот же блок используется как в статусе запаса, так и в листе потребления. Я пытаюсь сделать что-то вроде этого:

Private Sub Command4_Click() 
    CurrentDb.Execute "SELECT o.Unit, s.Material_Unit" & _ 
        "CASE WHEN o.Unite = s.Material_Unit" & _ 
        "THEN UPDATE tbl_Current_Stock As o INNER JOIN bl_Temp_Raw_Material_Consumption AS s ON o.Raw_Material = s.[Ingredient/Packaging material] Set o.Stock_Level = o.Stock_Level - s.Consumption" & _ 
        " Print'Congratulations! You have successfully updated inventory balance!'" & _ 
        "ElSE PRINT ' Units of source data and targeted data are not matched!'" & _ 
        "Exit Sub" & _ 
        "End" & _ 
        "FROM tbl_Current_Stock As o, bl_Temp_Raw_Material_Consumption AS s" 
END sub 

Но, похоже, некоторые ошибки существуют. Пожалуйста, помогите мне в этих кодах.

Спасибо.

+0

Вы объединяете код SQL и VBA. А Access SQL не поддерживает выражения 'CASE'. Рассмотрите возможность чтения документов или руководств по MS Access. – Parfait

ответ

1

Ваш код является абсолютно неправильным. Вы не можете использовать CASE для datermine, который должен выполнить оператор, UPDATE или PRINT (PRINT бесполезен здесь, в MS Access).

Вы должны использовать либо:

IF заявление в ваш запрос - объявить o.Unite и s.Material_Unit как переменные и сравнить их, если они совпадают, то выполнить обновление.

IF @unite = @materialunite 
BEGIN 
    [Your Update Statement] 
END 

Другой способ: DECLARE VB переменные, присваивать значения o.Unite и s.Material_Unit к ним, и писать IF - ELSE заявления в VB и выполнять ваши запросы SQL.

+0

Спасибо, Tedo, я абсолютно новый в sql. Я попробую ваши предложения. хорошего дня. –

+0

Не разделить волосы, но вы, вероятно, имели в виду VBA, заметное отличие от VB. Кроме того, ваш код, похоже, является SQL Server TSQL, а не Access SQL, другим диалектом. – Parfait

+0

@Parfait Да, это должен быть VBA. Кроме того, пользователь не указал, что он работает с удаленной базой данных локального или MS SQL SERVER, поэтому, если его исходным кодом является MS SQL, код будет выполнять и обновлять таблицы. если он использует локальный db, он может использовать условия VBA, а затем обновлять инструкцию, как я уже писал. –