MS Access - запустить запрос на обновление, чтобы заменить все значения на основе значения текстового поля - PullRequest
0 голосов
/ 14 июня 2019

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

Мое текстовое поле называется "ключевые слова", а моя таблица - "final_tia_data".

    Private Sub Toggle7_Click()

    addboxsql = "UPDATE final_tiu_data.newreporttext, 
    Replace([gender],me.keywords,'<b>'&me.keywords&'</b>') FROM 
    final_tiu_data;"

    DoCmd.RunSQL addboxsql

    End Sub

Я ценю любую помощь в этом.Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 июня 2019

Есть несколько проблем с вашим текущим кодом -

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

Вместо этого вы должны объявить переменные, которые вы намереваетесь определить, используя операторы Dim, и убедиться, что Option Explicit включен в ваш модуль VBA для предотвращения использования необъявленных переменных.

Основные проблемы связаны с самой инструкцией SQL -

В MS Access запрос UPDATE имеет формат:

UPDATE table SET newvalue WHERE criteria;

И вы не сможете использовать ключевое слово VBA Me в коде SQL, поскольку оно не имеет смысла в этом контексте.

Быстрое исправление может быть -

Private Sub Toggle7_Click()
    Dim strSQL As String
    strSQL = "update final_tiu_data set newreporttext = replace([gender], """ & Me.keywords & """, ""<b>" & Me.keywords & "</b>"")"
    DoCmd.RunSQL strSQL
End Sub

Однако этот подход все еще подвержен внедрению SQL, поэтому вы можете рассмотреть возможность параметризации запроса или ссылки на элементы управления формы с помощью сохраненного запроса.

1 голос
/ 14 июня 2019

Вам не хватает Option Explicit (если вы на самом деле не хотели вызывать вашу переменную двумя разными именами)

...