2016-07-21 3 views
0

У меня есть 2 таблицы: 1. проекты, 2. Article_Weights. Таблица Проекты подключен к первому DBLookUpCombobox DBLkpCbo_Projects. Он имеет одну колонку Проект который содержит четырехзначные числа. (1001, 1004, 1008, ...)Как соединить два DBLookUpComboboxes, которые могут быть использованы в качестве фильтра в Lazarus

Таблица Article_Weights, содержащие столбцы Project, Article_Number, Article_Weights т.д. Эта таблица связана с DBLookUpCombobox DBLkpCbo_Articles.

Что я хочу достичь, когда я выбираю из первого комбобокса какой-то проект, второй combobox покажет только номера статей, принадлежащие этим проектам. После этого, когда я выберу номер статьи из второго списка со списком, информация об этой статье будет показана в DBGrid.

Фильтрация работает. Я застрял в последней точке. Когда я выбираю какой номер статьи я получаю ошибку «Типы данных не совпадают в критериях экспрессии»

Это мой код:

procedure TMainForm.DBLkpCbo_ProjectSelect(Sender: TObject); 
begin 
    if DBLkpCbo_Project.ItemIndex <> -1 then begin 
    SQLQuery2.Active:=true; 
    //SQLQuery1.ApplyUpdates(); 
    SQLTransaction1.Commit(); 
    SQLQuery2.Close; 
    SQLQuery2.SQL.Text:='SELECT Article_Number FROM Article_Weights WHERE Project = '+DBLkpCbo_Project.Text+''; 
    SQLQuery2.Open; 
    end; 
end; 


procedure TMainForm.DBLkpCbo_ArticleChange(Sender: TObject); 
begin 
    if DBLkpCbo_Article.ItemIndex <> -1 then begin 
    //DBGrid1.Enabled:=true; 
    SQLQuery3.Active:=true; 
    //SQLQuery1.ApplyUpdates(); 
    SQLTransaction1.Commit(); 
    SQLQuery3.Close; 
    SQLQuery3.SQL.Text:='SELECT Article_Number FROM Article_Weights WHERE Article_Number='+DBLkpCbo_Article.Text+''; 
    SQLQuery3.Open; 
    end; 
end; 

Спасибо за любой ответ

ответ

0

ли Article_Number текстовое поле или (как следует из названия) числового поля? Если это число, то DBLkpCbo_Article.Text действительно числовое (т. Е. Строка, содержащая действительный номер)? Если, как я подозреваю, Article_Number это текстовое поле, вы опустили кавычки:

SQLQuery3.SQL.Text:='SELECT Article_Number FROM Article_Weights WHERE Article_Number='''+DBLkpCbo_Article.Text+''''; 
+0

Article_Number установлен в MS Access в качестве краткого текста и примера выглядит следующим образом: 1004.001.0020. Я попробовал ваше предложение, но появляется сообщение об ошибке: «Убедитесь, что не содержит недопустимых символов или знаков препинания». Когда я попытался переименовать его в «10040010020», я получил ошибку «Слишком мало параметров». – Revan31

+0

Извините - я использовал двойные кавычки вместо одного - было некоторое время, так как я использовал SQL. Исправлено сейчас. – Dsm

+0

Его действительно работает! :) Я потратил столько времени на решение этой проблемы. Большое спасибо. – Revan31