2014-11-30 2 views
0

Просто начала экспериментировать с предложением JOIN, чтобы я мог отображать данные из нескольких таблиц в gridview. Тем не менее, я не могу для жизни меня понять, что моя ошибка здесь. Я попытался переключить порядок имен таблиц, называемых столбцами, и это не имеет успеха. Это, я думаю, ближе всего к работе, я могу получить утверждение. Это в основном прямая копия предположительно рабочего заявления, но все же не работает.SQL - Синтаксическая ошибка в FROM FROM (JOIN)

Любая помощь приветствуется. (Я использую VB.Net для кодирования, Access '13 как базу данных (которая может быть частью проблемы, я читал ее очень тонко о синтаксисе) и разрабатывал с VS 2013.)

@tim : в соответствии с запросом, вот полный подпункт.

Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click 
    If cbSearchType.Text = "Guest Surname" Then 

     Dim searchSQL As String = "SELECT bookings.bookingStartDate, bookings.bookingEndDate, guests.guestFirstName, guests.guestSurname, locations.locationName FROM bookings JOIN guests ON guests.guestID = bookings.guestID JOIN locations ON locations.locationID = bookings.locationID WHERE guests.guestSurname = @guestSurname" 

     Dim searchCommand = New OleDbCommand(searchSQL, globalVariables.objConnection) 
     Dim searchAdapter As New OleDbDataAdapter(searchSQL, globalVariables.objConnection) 
     Dim searchDataTable As New DataTable 

     searchCommand.Parameters.AddWithValue("guestSurname", tbSearchTextBox.Text) 
     searchAdapter.SelectCommand = searchCommand 
     searchAdapter.Fill(searchDataTable) 

     globalVariables.objConnection.Open() 
     searchAdapter.Fill(searchDataTable) 
     gvSearchResults.DataSource = searchDataTable 
     globalVariables.objConnection.Close() 

    ElseIf cbSearchType.Text = "Location" Then 

    ElseIf cbSearchType.Text = "Booking Start Date" Then 

    ElseIf cbSearchType.Text = "Booking End Date" Then 

    End If 
End Sub 

End Class

+0

"Синтаксическая ошибка в предложении FROM" – tvellalott

+0

Может быть '» ... WHERE guests.guestSurnmae = «» + @guestSurname + "'" - то есть, если 'guestSurname' является char или varchar, вам нужно указать его одинарными кавычками '' '. Другое дело, чтобы проверить, что у вас есть пробелы между ключевыми словами ('FROM',' WHERE' и т. Д.). Можете ли вы опубликовать фактический код VB.NET, который вы используете? – Tim

+0

Не работайте с Access гораздо больше, но вы, вероятно, захотите использовать '' @guestSurname '' вместо '' guestSurname '' в своем 'Parameters.AddWithValue'. Не 100% уверен, что Access также поддерживает именованные параметры. Попробуйте пройти через отладчик и посмотреть, что текст «OleDbCommand» после добавления параметра - должен показать вам, правильно это или нет. – Tim

ответ

1

В Access, необходимо указать INNER JOIN. Вам также нужны скобки, когда есть несколько объединений. Я хотел бы написать это как:

SELECT b.bookingStartDate, b.bookingEndDate, g.guestFirstName, g.guestSurname, l.locationName 
FROM (bookings as b INNER JOIN 
     guests as g 
     ON g.guestID = b.guestID) INNER JOIN 
    locations as l 
    ON l.locationID = b.locationID 
WHERE g.guestSurname = @guestSurname; 
+0

Это работает отлично, за исключением того, что мой gridview по какой-то причине показывает дубликаты результатов. – tvellalott

+0

Ух, имел поискAdapter.Fill (searchDataTable) дважды. – tvellalott

Смежные вопросы