Неверно подсчитано количество записей в запросе

#sql #count

#sql #подсчет

Вопрос:

Я пытаюсь просмотреть три значения из трех запросов. Если какой-либо запрос выдает количество записей, равное одному или выше, я бы отобразил основную форму. Что у меня есть прямо сейчас, так это три запроса и оператор if, оценивающий их.

Проблема в том, что все операторы if возвращаются true. Даже когда я ЗНАЮ, что третий неверен.

Я использую функцию подсчета в окне запроса Access build.

 Private Sub testCount_Click()
Dim strSQL1
Dim strSQL2
Dim strSQL3
Dim NoData

NoData = "False"

strSQL1 = "SELECT DISTINCT Count(GRP4100Deltas.[TCTO Number]) AS [CountOfTCTO Number], Aircraft.FullTailNo, StatusCode.TCTOStatus " _
amp; "FROM StatusCode INNER JOIN (Aircraft INNER JOIN GRP4100Deltas ON Aircraft.[Serial Number] = GRP4100Deltas.[Serial Number]) ON StatusCode.StatusCode = GRP4100Deltas.[TCTO Status Code] " _
amp; "GROUP BY Aircraft.FullTailNo, StatusCode.TCTOStatus " _
amp; "HAVING (((StatusCode.TCTOStatus)='Completed'));"


strSQL2 = "SELECT DISTINCT Count(GRP4100Deltas.[TCTO Number]) AS [CountOfTCTO Number], Aircraft.FullTailNo, StatusCode.TCTOStatus " _
amp; "FROM StatusCode INNER JOIN (Aircraft INNER JOIN GRP4100Deltas ON Aircraft.[Serial Number] = GRP4100Deltas.[Serial Number]) ON StatusCode.StatusCode = GRP4100Deltas.[TCTO Status Code] " _
amp; "GROUP BY Aircraft.FullTailNo, StatusCode.TCTOStatus " _
amp; "HAVING (((StatusCode.TCTOStatus)='Not Completed'));"


strSQL3 = "SELECT DISTINCT Count(GRP4100Deltas.[TCTO Number]) AS [CountOfTCTO Number], Aircraft.FullTailNo " _
amp; "FROM StatusCode INNER JOIN (Aircraft INNER JOIN GRP4100Deltas ON Aircraft.[Serial Number] = GRP4100Deltas.[Serial Number]) ON StatusCode.StatusCode = GRP4100Deltas.[TCTO Status Code] " _
amp; "GROUP BY Aircraft.FullTailNo, StatusCode.TCTOStatus " _
amp; "HAVING (((StatusCode.TCTOStatus)='Not Applicable'));"

If (strSQL1 = 0) Then
    NoData = "True1"
    MsgBox ("1 has no data")
Else
    NoData = "False"
    MsgBox ("1 has data False")
End If

If (strSQL2 = 0) Then
    NoData = "False"
    MsgBox ("2 has no data")
Else
    NoData = "True"
    MsgBox ("2 has data")
End If

If (strSQL3 = 0) Then
    NoData = "False"
    MsgBox ("3 has no data")
Else
    NoData = "True"
    MsgBox ("3 has data")
End If

MsgBox ("There were SQL without entries NoData = " amp; NoData)
  

Спасибо за помощь.
Я работаю над получением некоторых тестовых данных для вас.
Максин

Комментарии:

1. Что со всеми этими скобками?

2. Возможно, я упускаю что-то очевидное, но вы, похоже, не выполняете эти инструкции sql… Это VBA? Для какой СУБД написаны эти запросы. Вы действительно выполняете их, но не делитесь этим кодом? И если это так, вы используете те же переменные для хранения ваших строковых литералов sql для хранения результатов? Здесь что-то не так.

3. SQL — это просто язык, используемый несколькими поставщиками СУБД. Пометьте правильно, добавив соответствующие теги.

4. Вот как они находятся в области SQL Access. Но я думаю, что, возможно, я нашел свою проблему. Мне не хватает команды run SQL. Надеюсь, это исправит это. Добавлены инструкции execute, но они не принимают SQL

5. После запуска этого sql вы получите обратно набор результатов. Для вашего третьего SQL (например) вы получите обратно много записей, по одной для каждой уникальной Aircraft.FullTailNo, StatusCode.TCTOStatus комбинации. Как вы планируете сравнивать все эти возвращенные записи с целым числом 0 ? Я думаю, у вас есть еще несколько точек для подключения здесь.

Ответ №1:

Я применил другой подход к этой проблеме. Поскольку все, о чем я беспокоился, это о том, имел ли какой-либо из трех запросов одно или несколько значений. Я изменил запросы, чтобы обновить таблицу countRecs. Затем были запущены три отдельных запроса на добавление, заполняющих таблицу. Затем я использовал функцию DCount, чтобы подсчитать, сколько записей там было. ЕСЛИ бы у меня было более одной новой записи, я бы отобразил форму.

Спасибо всем за помощь. Максин