Access 2010 Сбой при выполнении запроса - PullRequest
0 голосов
/ 11 января 2019

В Windows 10 и MS Access 2010 я запускаю функцию vba, которая выполняет SQL-запрос, извлекая записи из связанной таблицы, связанной с Outlook. Запрос выглядит так:

select * from  where LinkedTable.Field1 like '*string1*' and (LinkedTable.Field2 like 'string2*' OR LinkedTable.Field2 like 'string3*' OR LinkedTable.Field2 like 'string4*' OR LinkedTable.Field2 like 'string5*' OR LinkedTable.Field2 like 'string6*' OR LinkedTable.Field2 like string7*')

Перед выполнением запроса я обновляю ссылку на таблицу.

При запуске функции происходит сбой доступа. Отладка приводит к определению точки выполнения запроса, когда происходит сбой Access: Set rs2 = db.OpenRecordset(strQ)

Вот код:

    Sub xyz()
    Dim db As DAO.Database
    Dim rs2 As DAO.Recordset 'this the sql query table
    dim rs1 as DAO.Recordset
set rs1=db.openrecordset("anothertable")
rs1.movefirst
do while not rs1.eof 

    strQ ="select * from  LinkedTable where LinkedTable.Field1 like '*string1*' and (LinkedTable.Field2 like 'string2*' OR LinkedTable.Field2 like 'string3*' OR LinkedTable.Field2 like 'string4*' OR LinkedTable.Field2 like 'string5*' OR LinkedTable.Field2 like 'string6*' OR LinkedTable.Field2 like string7*')"

    db.TableDefs(LinkedTable).RefreshLink
    Set rs2 = db.OpenRecordset(strQ)
    .

rs2.close
set rs2=nothing
rs1.movenext
loop
    .
    .
    En

d sub

Я заметил, что использование памяти увеличивается с каждым разом Установите rs2 = db.OpenRecordset (strQ)

выполняется, хотя я убираюсь. Это не выпущено после очистки. Какую потенциальную утечку памяти может вызвать это утверждение?

Спасибо.

1 Ответ

0 голосов
/ 11 января 2019

Возможно, проблема в том, что ваш оператор SQL заключен в «умные кавычки» или символы Unicode 0x201C & 0x201D :

”select * from ... string7*')”

В отличие от стандартной двойной кавычки, которая является символом Unicode / ASCII 0x0022 :

"select * from ... string7*')"

Вам также не хватает источника данных для запроса select:

select * from ??? where ...
...