2016-05-25 4 views
0

Во-первых, я прошу прощения за отсутствие знаний о SQL.Выбор результатов из таблицы на основе данных со списком

я в настоящее время есть два ComboBoxes на форме и окно списка, который выглядит как прикрепленного изображения

TroubleshootPage

Первый выпадающий ссылается на таблицу со списком производителей и затем второй «Модель» поле со списком обновления с номерами моделей, которые соответствуют первым данным combobox

В окне списка ниже должны отображаться данные из таблицы «Решения». ТОЛЬКО "SolutionText" COLUMN

Производитель, выбранный в «cboManfact», должен соответствовать «ManufacturerSolution» в таблице «Решения», а затем возвращать «SolutionText», если они совпадают. То же самое для «cboModel» и «ModelSolution».

Я не хочу, чтобы в списке отображался текст любого производителя или модели, только поле «SolutionText» при нажатии кнопки db_search.

Благодаря помощи @LiamH, я в настоящее время имею следующую SQL команду на RowSource моего списка

Это может произойти либо как пользователь выбирает опции в Наримере или при нажатии на зеленый значке поиска

Проблема, с которой я столкнулся, связана с SQL Query. Я в настоящее время это ниже происходит, когда пользователь нажимает на кнопку поиска

SELECT [SolutionText] FROM [Solutions] WHERE solutions.ManufacturerSolution like forms![Troubleshoot]!cboManfact & "*" AND solutions.ModelSolution like forms![Troubleshoot]!cboModel & "*" 

Он отображает значение SolutionText в ListBox, но по нажатию на кнопку «db_search», то ListBox становится пустым

Private Sub dbSearch_Click() me.listbox.requery end sub

Очень близко к получению этого сейчас, любые советы

ответ

0

Я предположил, что вы используете MS-Access, исправьте меня, если я ошибаюсь. Возможно, вы захотите использовать тег access-vba, если это верно.

В коде есть несколько ошибок. Во-первых, docmd.RunSQL не может использоваться в некоторых запросах. Этот (SELECT) не является запросом на действие, и эта команда зарезервирована только для запросов действий. например DELETE, UPDATE, ALTER, SELECT ... INTO.

Когда вы используете несколько слов, где используются слова AND вместо амперсанда. Вам не нужно объединять строки SQL вместе. Строковые значения, которые в запросе и связанные с значениями форм должны инкапсулирование в одинарных кавычках, например:

"...WHERE NAME='" & Me.name & "'"

Вы можете использовать debug.print strSQL или msgbox strSQL, чтобы увидеть, как SQL-запрос читает для каких-либо ошибок.

Так вот что я хотел бы сделать:

Измените RowSource из выпадающего списка на запрос:

SELECT [SolutionText] FROM [Solutions] WHERE solutions.ManufacturerSolution like forms![FORM_NAME]!cboManfact.Column(1) & "*" AND solutions.ModelSolution like forms![FORM_NAME]!cboModel.Column(1) & "*"

like ... & "*" означает, что если выпадающий пуст он покажет все.

Вам потребуется некоторое VBA на on_click мероприятия, которое будет:

Private Sub dbSearch_Click() 
    me.listbox.requery 
end sub 

Requery изменит элементы ListBox на основании записей, выбранных в полях со списком.

  • Я не знаю, каково ваше намерение при использовании [Solution Text]?

  • Возможно, вы требуете column(1), а не column(0)?

  • Я не уверен, что вы намеревались с strTableName?

+0

Вы сударь являются звездой. Я скорректирую код и вернусь к вам. большое вам спасибо за это :) – Batterdburrito

+0

[SolutionText] - это поле в таблице, в котором хранятся этапы устранения неполадок для выбранной конкретной модели/производителя. Это информация, которую мне нужно отобразить в списке. В столбце (1) хранится фактическое имя производителя, а не идентификатор в столбце (0), который мне нужен. strTableName является irelivant и удалено – Batterdburrito

+0

Извините за вопрос, но я не могу найти «Источник записи» в списке, только для управления и для источников строк? Любые идеи – Batterdburrito

0

Решил проблему, используя следующий код:

Private Sub dbSearch_Click() 

Dim ManfactQuery As String 
Dim ModelQuery As String 
Dim strSQL As String 

ManfactQuery = Me.cboManfact.Column(1) 
ModelQuery = Me.cboModel.Column(1) 

If Nz(ManfactQuery) = "" Then 

strSQL = "SELECT [Solutions].SolutionText FROM [Solutions] WHERE [Solutions].ModelSolution = '" & ModelQuery & "'" 

Else 

If Nz(ModelQuery) = "" Then 

strSQL = "SELECT [Solutions].SolutionText FROM [Solutions] WHERE [Solutions].ManufacturerSolution = '" & ManfactQuery & "'" 

Else 

strSQL = "SELECT [Solutions].SolutionText FROM [Solutions] WHERE [Solutions].ManufacturerSolution = " & ManfactQuery & " AND [Solutions].ModelSolution = " & ModelQuery & "" 

End If 

End If 

Me.lstSolution.RowSource = strSQL 

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