Запустите один SQL-скрипт MS Access для определенной таблицы, выбранной пользователем. - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть база данных MS Access 2016 (* .accdb) с более чем 20 таблицами.Поля в каждом из них слегка варьируются от таблицы к таблице.У меня нет опыта работы с VBA, поэтому я придерживаюсь только SQL-запроса ниже (отредактировано).

SQL-скрипт

myvar ниже - это параметр, который я бы использовалхотелось бы, чтобы при запуске скрипта запрашивался ввод в таблицу, к которой нужно применить изменения.

PARAMETERS 
[myvar] TableID;

UPDATE 
[myvar]

INNER JOIN  
Excel_Data ON [myvar].[Part Number] = Excel_Data.[Part Number] 

SET 
[myvar].[Value] = '?', 
[myvar].Description = Excel_Data.Description, 
[myvar].[Ref] = '?'
.
.
.

WHERE 
[myvar].Description Is Null;

Вывод

Сообщение об ошибке:

Too few parameters. Expected 0.

Что мне нужно

Я предпочитаю решение для выше в форме сценария SQL, как указано выше, предпочтительно без участия VBA.Я хотел бы ввести имя таблицы при появлении запроса, чтобы скрипт знал, какую таблицу нужно ОБНОВИТЬ.К вашему сведению: ПАРАМЕТРЫ работают, когда это не Таблица, как я показал в моем сценарии выше.

Помощь / совет очень важен.

РЕДАКТИРОВАНИЕ 1

Поскольку кажется невозможным использовать параметры в качестве имен таблиц, не могли бы вы предложить решение VBA?Пример кода, возможно?

1 Ответ

0 голосов
/ 06 декабря 2018

Как сказано в комментариях, вы действительно не можете решить эту проблему без VBA.

Вы можете сохранить свой SQL-запрос в строке и использовать заполнитель для указания имени таблицы.Затем получите имя таблицы с помощью поля ввода и замените заполнитель на имя таблицы.

Dim sqlString As String
sqlString = "UPDATE [%Placeholder%] "  & vbCrLf & _
"INNER JOIN Excel_Data ON [%Placeholder%].[Part Number] = Excel_Data.[Part Number]  "  & vbCrLf & _
"SET [%Placeholder%].[Value] = '?', " & vbCrLf & _
...
"WHERE [%Placeholder%].Description Is Null;"
sqlString = Replace(sqlString, "%PlaceHolder%", InputBox("Enter a tablename"))
CurrentDb.Execute sqlString

В более зрелом решении я бы создал форму со списком, содержащим все доступные имена таблиц, и добавил бы функцию вочистить имена таблиц (заменить "]" на "]]")

...