Нет результатов в наборе рекордов

У меня есть временная таблица, созданная из запроса. Из этой таблицы я выбираю элементы и размещаю их в определенном порядке для отображения в списке. Все отлично работает, пока я не попытаюсь добавить предложение where в свой оператор select.

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

Я попытался сделать оператор if, который просто делает мою переменную «0», но я все равно получаю ту же ошибку «Нет текущей записи».

Приведенный ниже запрос работает нормально;

  strQuery = "SELECT * FROM " & currentTime & " Order By CVT, CVY, CVW, 
  AdjusterName"

Но когда я добавляю предложение where <= 1, я получаю сообщение об ошибке «Нет текущей записи». Второй запрос;

  strQuery = "SELECT * FROM " & currentTime & " WHERE CVT <=1 Order By 
  CVT, CVY, CVW, AdjusterName"

Когда я запускаю этот второй запрос, я получаю ошибку «Нет текущей записи». Здесь я бы хотел, чтобы вместо этого отображался ноль.

На всякий случай, вот вся функция;

    If ClaimTypeCB = "MO" Then
        strQuery = "SELECT * FROM " & currentTime & " WHERE CVT <=1 Order 
        By CVT, CVY, CVW, AdjusterName"
    Else
        strQuery = "SELECT * FROM " & currentTime & " Order By CVT, CVY, 
        CVW, AdjusterName"
    End If
        Set daoQueryResult = db.OpenRecordset(strQuery)

        daoQueryResult.MoveLast
        intRecordCount = daoQueryResult.RecordCount
        daoQueryResult.MoveFirst

    If intRecordCount = 0 Then
        intCVT = 0
    End If

(Вышеуказанный оператор If — это место, где я пытался вставить оператор If, но он не сработал, и я все еще получаю сообщение об ошибке «Нет текущей записи».)

    If intRecordCount <> 0 Then
        With daoQueryResult
            Do While Not .EOF

                If IsNull(!CVT) Then
                    intCVT = 0
                Else
                    intCVT = !CVT
                End If

                If IsNull(!CVY) Then
                    intCVY = 0
                Else
                    intCVY = !CVY
                End If

                If IsNull(!CVW) Then
                    intCVW = 0
                Else
                    intCVW = (!CVW)
                End If

                AvailAdjList.AddItem !AdjusterName & "," & intCVT & "," & intCVY & "," & intCVW
                .MoveNext
            Loop
        End With
    End If

Я действительно просто хочу, чтобы CVT возвращался как ноль, если он равен 0 или 1.

привет, вы пробовали dao Query Result.recordcount, чтобы получить количество возвращенных строк?

Luis Curado 28.05.2019 17:05

Можете ли вы Debug.Print свою переменную strQuery? Возможно, что-то не так с оператором SQL, который вы пытаетесь выполнить. В запросе может быть зарезервированное слово или пунктуация. Какое значение имеет переменная currentTime?

Eedz 28.05.2019 18:02

Как называются все столбцы таблицы? А вы хотите 0 только в столбце CVT?

forpas 28.05.2019 18:11

@ Луис Я попробовал Debug.Print daoQueryResult.RecordCount, и он возвращает 0.

David Cady 28.05.2019 19:35

@ Eedz, если я запускаю запрос без предложения «WHERE CVT <= 1», он работает нормально.

David Cady 28.05.2019 19:36

@forpas имена столбцов: «CVT», «CVY», «CVW» и «AdjusterName». Столбец CVT — единственный, для которого нужен ноль. У меня есть эта проблема только тогда, когда CVT равен нулю, и я использую предложение «WHERE CVT <= 1». Если я запускаю его без этого предложения Where, он работает нормально, даже если результаты равны 0.

David Cady 28.05.2019 19:37
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
6
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После этой строки:

Set daoQueryResult = db.OpenRecordset(strQuery)

вам нужно проверить Recordset.EOF

With daoQueryResult
    If .EOF Then
        intRecordCount = 0
    Else
        .MoveLast
        intRecordCount = .RecordCount
        .MoveFirst
    End If
End With

Хотя из вашего кода вам, похоже, это не нужно RecordCount.

Вы можете просто начать с Do While Not .EOF

Это исправило ошибку, но теперь результаты вообще не отображаются. Мне нужно, чтобы он отображал имя пользователя (AdjusterName), а затем просто нули рядом с их именами, если нет текущих записей.

David Cady 28.05.2019 19:33
Ответ принят как подходящий

Попробуйте этот запрос:

strQuery = "SELECT CVT, CVY, CVW, AdjusterName FROM " & currentTime & " WHERE CVT <= 1 Order By CVT, CVY, CVW, AdjusterName" _
         & " UNION ALL " _
         & "SELECT DISTINCT 0, NULL, NULL, NULL FROM " & currentTime & " WHERE NOT EXISTS " _
         & "(SELECT 1 FROM " & currentTime & " WHERE CVT <= 1)"

Он использует UNION ALL, поэтому, если 1-й запрос не возвращает ни одной строки, 2-й запрос вернет строку со значениями: 0, NULL, NULL, NULL
Надеюсь, у меня нет опечаток.

Я немного изменил это на; strQuery = "SELECT CVT, CVY, CVW, AdjusterName FROM" & currentTime & " WHERE CVT <= 1 Order By CVT, CVY, CVW, AdjusterName" _ & "UNION ALL" _ & "SELECT DISTINCT 0, CVY, CVW, AdjusterName FROM " & currentTime & " WHERE NOT EXISTS " _ & "(SELECT 1 FROM " & currentTime & " WHERE CVT <= 1)" И это отлично сработало

David Cady 28.05.2019 19:56

Другие вопросы по теме