Вверх ↑
Ответов: 59
Рейтинг: 0
#1: 2022-02-05 14:14:30 ЛС | профиль | цитата
Всем доброго времени суток.
Делаю небольшую программу для чтения одной таблицы (запрос с подключением связанных таблиц) из БД. Для удобного отображения таблицы нужны фильтры (не сортировка по столбцам). Сложностью возникло формирование запроса, т.е. чтобы в нужное место вставлялось WHERE и AND (если условий несколько).
Add(MainForm,2953706,21,105)
{
Width=704
Height=358
Position=1
}
Add(Label,7714648,161,28)
{
Left=10
Top=15
Width=44
Height=17
Caption="Фильтр"
}
Add(Label,3700171,266,63)
{
Left=85
Top=15
Width=59
Height=17
Caption="Поле name"
}
Add(ComboBox,5901007,455,112)
{
@Hint=#4:name|
Left=145
Top=10
Width=145
Height=21
Strings=#7:1|Антон|9:2|Аркадий|7:3|Борис|11:4|Екатерина|
DataType=1
link(onClick,4332866:doSplit,[(499,125)(499,153)(450,153)(450,181)])
AddHint(59,44,41,13,@Hint)
}
Add(Label,4363080,266,105)
{
Left=75
Top=40
Width=49
Height=17
Caption="Поле city"
}
Add(ComboBox,12873306,462,301)
{
@Hint=#4:city|
Left=145
Top=40
Width=145
Height=21
Strings=#8:1|Лондон|7:2|Париж|8:3|Берлин|9:4|Варшава|8:5|Багота|
DataType=1
link(onClick,7301653:doClear,[(506,314)(506,342)(457,342)(457,370)])
AddHint(58,35,31,13,@Hint)
}
Add(ChildPanel,9402115,826,350)
{
link(onEvent1,6686024:doString,[])
}
BEGIN_SDK
Add(EditMulti,15276896,21,21)
{
EventCount=1
WorkCount=1
Width=377
Height=298
}
Add(Panel,16524363,35,105)
{
Left=70
Top=80
Width=339
Height=37
}
Add(RadioButton,14210090,154,56)
{
Left=89
Top=9
Caption="Студент"
link(onSelect,5574395:doData,[])
}
Add(RadioButton,6630222,154,105)
{
Left=164
Top=9
Width=80
Caption="Пенсионер"
link(onSelect,1916104:doData,[])
}
Add(RadioButton,16052579,154,154)
{
Left=259
Top=9
Width=65
Caption="Рабочий"
link(onSelect,6900170:doData,[])
}
Add(Label,7977922,441,14)
{
Left=9
Top=9
Width=61
Height=17
Caption="Поле status"
}
Add(DoData,5574395,210,56)
{
Data=Integer(1)
link(onEventData,11635415:doEvent1,[(264,62)(264,104)])
}
Add(DoData,1916104,210,105)
{
Data=Integer(2)
link(onEventData,11635415:doEvent2,[])
}
Add(DoData,6900170,210,154)
{
Data=Integer(3)
link(onEventData,11635415:doEvent3,[(264,160)(264,118)])
}
Add(Hub,11635415,287,98)
{
InCount=3
OutCount=1
link(onEvent1,9354654:doValue,[])
}
Add(GlobalVar,9354654,322,98)
{
Name="status"
link(onValue,15276896:onEvent1,[(384,104)(384,27)])
}
END_SDK
Add(ChildPanel,13935565,679,357)
{
link(onEvent1,7779045:doString,[])
}
BEGIN_SDK
Add(EditMulti,15392110,21,21)
{
EventCount=1
Width=342
}
Add(Panel,15961416,35,105)
{
Left=70
Top=130
Width=339
Height=37
}
Add(RadioButton,10780047,133,49)
{
Left=89
Top=9
Caption="Женский"
link(onSelect,3727406:doData,[])
}
Add(RadioButton,5948420,133,98)
{
Left=164
Top=9
Width=80
Caption="Мужской"
link(onSelect,6171461:doData,[])
}
Add(RadioButton,11558322,133,147)
{
Left=259
Top=9
Width=65
Caption="Неизвестно"
link(onSelect,7296171:doData,[])
}
Add(Label,15928589,462,63)
{
Left=9
Top=9
Width=47
Height=17
Caption="Поле pol"
}
Add(DoData,3727406,196,49)
{
Data=Integer(1)
link(onEventData,14183791:doEvent1,[(247,55)(247,97)])
}
Add(DoData,6171461,196,98)
{
Data=Integer(2)
link(onEventData,14183791:doEvent2,[])
}
Add(DoData,7296171,196,147)
{
Data=Integer(3)
link(onEventData,14183791:doEvent3,[(247,153)(247,111)])
}
Add(Hub,14183791,266,91)
{
InCount=3
OutCount=1
link(onEvent1,9531103:doValue,[])
}
Add(GlobalVar,9531103,301,91)
{
Name="pol"
link(onValue,15392110:onEvent1,[(349,97)(349,27)])
}
END_SDK
Add(Label,504982,7,182)
{
Left=10
Top=185
Width=93
Height=17
Caption="Основной запрос"
}
Add(Edit,12595222,875,532)
{
Left=180
Top=185
Width=475
Height=25
Text="SELECT * FROM schema.tb_table;"
}
Add(Label,5371579,7,231)
{
Left=10
Top=230
Width=159
Height=17
Caption="Запрос с фильтром(условием)"
}
Add(Edit,2505127,924,665)
{
Left=180
Top=225
Width=475
Height=25
}
Add(Edit,3489991,1239,196)
{
Left=175
Top=270
Width=490
}
Add(MultiStrPart,4332866,462,175)
{
Char="|"
link(onSplit,3672907:doData,[(506,181)(506,205)(450,205)(450,230)])
link(Str,5901007:String,[])
}
Add(DoData,3672907,462,224)
{
link(Data,4332866:Part1,[])
}
Add(MultiStrPart,7301653,469,357)
{
Char="|"
link(onSplit,2043254:doData,[(513,363)(513,387)(457,387)(457,412)])
link(Str,12873306:String,[])
}
Add(DoData,2043254,469,406)
{
link(Data,7301653:Part1,[])
}
Add(FormatStr,14836428,875,665)
{
@Hint=#6:SELECT|
DataCount=3
Mask="SELECT * FROM schema.tb_table%2%3;"
link(onFString,2505127:doText,[])
link(Str1,12595222:Text,[])
link(Str2,6441863:FString,[(888,604)(986,604)])
AddHint(9,54,56,13,@Hint)
}
Add(Button,7915804,784,665)
{
Left=455
Top=100
link(onClick,14836428:doString,[])
}
Add(GlobalVar,11017452,889,322)
{
Name="status"
}
Add(FormatStr,6686024,882,350)
{
@Hint=#6:status|
Mask="status = %2"
Point(FString)
link(Str2,11017452:Var,[])
AddHint(114,10,43,13,@Hint)
}
Add(DoData,1055286,1239,133)
{
}
Add(Button,6151415,798,168)
{
Left=335
Top=15
Width=110
Caption="Сброс фильтра"
link(onClick,16284357:doReset,[(846,174)(846,153)])
}
Add(FormatStr,6441863,980,511)
{
@Hint=#5:WHERE|
Mask=" WHERE %2"
Point(FString)
link(Str2,6686024:FString,[(993,401)(888,401)])
AddHint(13,46,56,13,@Hint)
}
Add(FormatStr,16560601,980,112)
{
@Hint=#3:AND|
Mask=" AND %2"
Point(FString)
AddHint(17,48,38,13,@Hint)
}
Add(CounterEx,16284357,861,140)
{
Point(doReset)
link(onNext,2729480:doCompare,[])
}
Add(If_else,2729480,910,140)
{
Type=2
Op2=Integer(1)
link(onTrue,16560601:doString,[(961,146)(961,118)])
link(onFalse,6441863:doString,[(965,153)(965,517)])
}
Add(GlobalVar,3073591,749,322)
{
Name="pol"
}
Add(FormatStr,7779045,742,357)
{
@Hint=#3:pol|
Mask=" pol = %2"
Point(FString)
link(Str2,3073591:Var,[])
AddHint(-73,56,29,13,@Hint)
}
Add(Button,6150670,798,119)
{
Left=465
Top=15
Caption="+1"
link(onClick,16284357:doNext,[(846,125)(846,146)])
}
Add(StrCat,4569894,1239,266)
{
}
Add(IndexToChanel,1100930,1197,392)
{
}
Add(Case,384739,1204,497)
{
}
Если фильтр выбран по одному полю, то нужно только WHERE, а если по нескольким, то после каждого условия нужно AND
Запрос без условий
SELECT * FROM schema.tb_table;
Запрос с одним условием
SELECT * FROM schema.tb_table WHERE name = 1;
Запрос двумя условиями
SELECT * FROM schema.tb_table WHERE name = 1 AND status = 2;
Кто-то сможет помочь с этим?
карма: 0

0
Редактировалось 3 раз(а), последний 2022-02-05 14:16:04