У меня есть временная таблица, созданная из запроса. Из этой таблицы я выбираю элементы и размещаю их в определенном порядке для отображения в списке. Все отлично работает, пока я не попытаюсь добавить предложение 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.
Можете ли вы Debug.Print свою переменную strQuery? Возможно, что-то не так с оператором SQL, который вы пытаетесь выполнить. В запросе может быть зарезервированное слово или пунктуация. Какое значение имеет переменная currentTime?
Как называются все столбцы таблицы? А вы хотите 0 только в столбце CVT?
@ Луис Я попробовал Debug.Print daoQueryResult.RecordCount, и он возвращает 0.
@ Eedz, если я запускаю запрос без предложения «WHERE CVT <= 1», он работает нормально.
@forpas имена столбцов: «CVT», «CVY», «CVW» и «AdjusterName». Столбец CVT — единственный, для которого нужен ноль. У меня есть эта проблема только тогда, когда CVT равен нулю, и я использую предложение «WHERE CVT <= 1». Если я запускаю его без этого предложения Where, он работает нормально, даже если результаты равны 0.


После этой строки:
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), а затем просто нули рядом с их именами, если нет текущих записей.
Попробуйте этот запрос:
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)" И это отлично сработало
привет, вы пробовали dao Query Result.recordcount, чтобы получить количество возвращенных строк?