Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизВыбор значений с помощью ADOQuery Найти похожие ветки
← →
nirvana © (2006-02-21 20:48) [0]На форме есть ADJConnection, ADOQuery и 3 comboboxa. В каждом комбобоксе есть список опр. значений (items) (по 3 значения в каждом). Задача следующая: выбрать с помощью Query из опр таблицы Table1 поля, соответствующие всем значениям combobox`ов. Например select * from table1 where t1 = combobox1.text and t2 = combobox2.text and t3 = combobox3.text. Так всё хорошо, но может быть такое что значения выбраны только например в перовм и третьем comboboxe и тогда надо уже писать Select для двух комбобоксов. Неужели надо для каждого варианта создавать query? нет ли методов заполнения запроса динамически?
← →
API (2006-02-21 20:59) [1]Как-то так:
function CreateSQL: string;
var
sCondition: string;
begin
Result := "SELECT * FROM table1 ";
sCondition := "";
if (ComboBox1.ItemIndex > -1) then
sCondition := "WHERE (t1=""" + ComboBox1.Text + """)";
if (ComboBox2.ItemIndex > -1) then
begin
if (Length(sCondition) > 0) then
sCondition := sCondition + " AND "
else
sCondition := "WHERE ";
sCondition := sCondition + "(t2=""" + ComboBox2.Text + """)";
end;
if (ComboBox3.ItemIndex > -1) then
begin
if (Length(sCondition) > 0) then
sCondition := sCondition + " AND "
else
sCondition := "WHERE ";
sCondition := sCondition + "(t3=""" + ComboBox3.Text + """)";
end;
Result := Result + sCondition;
end;
← →
nirvana © (2006-02-21 21:06) [2]А никаких специальных компонентов или функций нет для этого. А если у меня 100 комбобоксов? Интересно как это делается в Enterprise manager? там просто галочкой отметил что нужно и он сам формирует sql код
← →
API (2006-02-21 21:18) [3]А если у меня 100 комбобоксов
Тогда у каждого из них должно быть свойство наподобие FieldName, за которое он отвечает, и все они должны быть каким-то образом зарегистрированы.
Например:type
TFieldComboBox = class(TComboBox)
...
property FieldName: string;
end;
function CreateSQL: string;
var
sCondition: string;
i: integer;
begin
Result := "SELECT * FROM table1 ";
sCondition := "";
for i := 0 to FieldComboBoxCount - 1 do
if (FieldComboBox[i].ItemIndex > -1) then
begin
if (Length(sCondition) > 0) then
sCondition := sCondition + " AND "
else
sCondition := "WHERE ";
sCondition := sCondition + "([" + FieldComboBox[i].FieldName + "]=""" + FieldComboBox[i].Text + """)";
end;
Result := Result + sCondition;
end;
где
FieldComboBoxCount - количество комбобоксов,
FieldComboBox - коллекция или массив комбобоксов [0...FieldComboBoxCount - 1],
На самом деле - надо смотреть по конкретной задаче.
как это делается в Enterprise manager? там просто галочкой
Смею Вас заверить - не так уж и просто...
← →
nirvana © (2006-02-21 21:58) [4]А может на мыло вам скинуть проект, маленький с поставленной задачей и вы подскажите? очень надо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c