Нужна помощь с проблемой, с которой я сталкиваюсь. Это код:Проблема с SELECT WHERE NOT IS/EXISTS Подзапрос (VB.NET, Access)
Private Sub dtpStartDate_ValueChanged(sender As Object, e As EventArgs) Handles dtpStartDate.ValueChanged
startDateChanged = 1
If endDateChanged = 1 Then
cbLocation.Enabled = True
cbLocation.Items.Clear()
cbLocation.Items.Add(New ListViewItem(""))
Dim unbookedLocationsSQL As String = "SELECT locationID FROM Locations WHERE NOT EXISTS (Select LocationID FROM Bookings WHERE @startDate <= bookingEndDate AND bookingStartDate <= @endDate)"
Dim unbookedLocationsCommand = New OleDbCommand(unbookedLocationsSQL, globalVariables.objConnection)
Dim unbookedLocationsAdapter As New OleDbDataAdapter(unbookedLocationsSQL, globalVariables.objConnection)
Dim unbookedLocationsDataSet As New DataSet
unbookedLocationsCommand.Parameters.AddWithValue("startDate", dtpStartDate.Value)
unbookedLocationsCommand.Parameters.AddWithValue("endDate", dtpEndDate.Value)
unbookedLocationsAdapter.Fill(unbookedLocationsDataSet, "Locations")
With cbLocation
.DataSource = unbookedLocationsDataSet.Tables("Locations")
.DisplayMember = "locationID"
.ValueMember = "locationID"
End With
End If
End Sub
Первые вещи сначала, если изменить SQL заявление «SELECT * из мест» в поле со списком только отображаются все места.
То, что я пытаюсь достичь, это; когда кто-то меняет дату выбора времени, поле со списком включено и заполняется списком мест, которые не забронированы между этими двумя датами, что определяется таблицей бронирования. Я знаю, что заявление SQL неверно. Я пробовал различные комбинации вещей и пытался изолировать бит и куски, но я не могу получить какой-либо подзапрос, чтобы делать то, что я хочу.
Любая помощь будет оценена по достоинству.
вы пытались изолировать этот запрос? 'Выберите LocationID FROM Bookings WHERE @startDate <= bookingEndDate AND bookingStartDate <= @endDate)" ' – Codemunkeee