Неожиданный результат от Query Run из VBA - PullRequest
0 голосов
/ 27 августа 2009

У меня проблема в следующем коде:

Set con = Application.CurrentProject.Connection
    Set rs = CreateObject("ADODB.Recordset")
    stSql = "SELECT * FROM [SB Items] "
    stSql = stSql & "WHERE [SBID]=" & Me![SBID] & " AND [ItemNumber]=" & intBtn
    rs.Open stSql, con, 1    ' 1 = adOpenKeyset

    ' If no item matches, report the error and exit the function.
    If (rs.EOF) Then
        MsgBox "There was an error reading the SB Items table."
        rs.Close
        Set rs = Nothing
        Set con = Nothing
        Exit Function
    End If

Так как, когда я выполняю вышеуказанную команду sql внутри stSql , что приводит только к ОДНОЙ строке

Элемент управления переходит к блоку ошибок

и всплывающее окно с сообщением «Произошла ошибка при чтении таблицы SB Items»

Ответы [ 3 ]

1 голос
/ 27 августа 2009

Используйте этот код, чтобы увидеть, сколько записей вы получите.

if rs.Supports(adApproxPosition)=true then
  i=rs.RecordCount
  MsgBox "The number of records is: " & i
end if
'
' If no item matches, report the error and exit the function.
If (rs.EOF) Then
'and on as you have it

Кроме того, для получения дополнительной информации сообщите об ошибке err.desc.

Наконец, убедитесь, что Con подключен к базе данных, которую, по вашему мнению, вы используете!

0 голосов
/ 27 августа 2009

У вас нет блока ошибок, у вас есть проверка на rs.eof.

Я предпочитаю проверять нулевые строки с

if (rs.eof) and (rs.bof)..

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

Вы уверены, что код не выполняет в точности то, для чего он предназначен, и показывает сообщение, когда строк нет?

Попробуйте stug debug.print, чтобы получить фактический выполняемый запрос, и попробуйте запустить его непосредственно для базы данных. Это подтвердит две вещи:

  1. Запрос формируется так, как вы ожидаете, включая значения, которые вы выводите из формы
  2. Данные в таблице фактически содержат строку, которая должна была быть перехвачена.
0 голосов
/ 27 августа 2009

2 вещи:

  1. Я заметил, что вы устанавливаете stSQL дважды, я полагаю, по причине разрыва строки. Более простой способ сделать это - использовать «_» (пробел, за которым следует подчеркивание). Это позволяет перенести команду на следующую строку.

  2. Измените ошибку Msgbox с:
    MsgBox "Произошла ошибка при чтении таблицы SB Items."
    чтобы:
    Msgbox "Ошибка:" & err.desc

Редактировать: err.desc дает вам точный сгенерированный код ошибки. Это не всегда полезно, но это лучшее, что вы можете получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...