Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Выбор значений с помощью 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
15-1140337476
unknown
2006-02-19 11:24
2006.03.12
Скоро на форумах будет опасно общаться...


15-1139983253
Ega23
2006-02-15 09:00
2006.03.12
С Днём рождения! 15 февраля


8-1128425545
Eugene_T
2005-10-04 15:32
2006.03.12
Конвертирование mp3 -> wav


15-1140406651
никак не получается
2006-02-20 06:37
2006.03.12
таблицы


2-1140444833
veb
2006-02-20 17:13
2006.03.12
Русские вопросики на не русских виндах