Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408

Чек боксы, запросы в базу, общий результат

01.09.2015, 13:56. Показов 2568. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте господа.
Вопрос насущный меня потревожил...
Для начала опишу программу.
Значит форма на ней
один DbGrid;
один DataSet;
один DataSource;
И два РАДИОбаттон

Код первого РАДИОбаттон содержит
C++
1
OracleDataSet1->SQL->Add("SELECT * FROM Табле1 where exmpl=1");
Код второго РАДИОбаттон содержит
C++
1
OracleDataSet1->SQL->Add("SELECT * FROM Табле1 where exmpl=2");
Количество полей которые выдают запросы одинаковое значение полей одинаковое выдают оба только цифры, то есть number (Count(*))
Так вот у меня вопрос по отдельности при выборе "РАДИОбаттон" в DbGrid выдаётся правильная информация что у первого что у второго разница только в номинале цифр.
Задача такая: сделать не Радиобаттон, а два чек бокса чтобы можно было выбирать два запроса одновременно и в DbGrid выводился результат от этих двух запросов тупо переписать на чек боксы не побывал потому, что думаю, что не всё так просто +))
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.09.2015, 13:56
Ответы с готовыми решениями:

Запросы на чек и чистую прибыль
БД Автосалона. Проблема заключается, в том, что Запросы Чек и Чистая прибыль работают некорректно. В случае с чеком, при вводе кода продажи...

Нужно доделать базу. Групповые запросы и запросы на изменение данных
Есть база, нужно доделать кое что Групповые запросы: 1) С использование функции count 2) С использованием функции sum 3)...

Как вообще сделать эту базу данных онлайн.Чтобы я мог отправлять запросы из приложения в базу
Например база где нибудь строит . А приложение на компах пользователей. Пока только делаю шаги в онлайн. Знаю только что нужен...

39
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
03.09.2015, 08:21
Студворк — интернет-сервис помощи студентам
Можно и так, если тебе что-то мешает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
String __fastcall TForm1::GetWhereSQL(void)
{
  String WhereSQL = "";
  for (int i = 0; i < CheckListBox1->Items->Count; i++)
    if (CheckListBox1->Checked[i])
       WhereSQL += "(exmpl = " + IntToStr(i + 1) + ") OR ";
  if (!WhereSQL.IsEmpty()) 
    WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 4) + ")";
  return WhereSQL;
}
// тут твое заполенение
OracleDataSet1->SQL->Add("SELECT * FROM");
/*...*/
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=2 group by t.id)" + GetWhereSQL()+ "  group by id))");
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 08:42  [ТС]
Bit_Man, Сейчас попробую, но для меня это пока магия ))
Попробовал
[C++ Error] Unit5.cpp(1189): E2090 Qualifier 'FOTCHET_SPISOK_TEH' is not a class or namespace name
так у меня форма называется FOTCHET_SPISOK_TEH (name)
И
[C++ Error] Unit5.cpp(1189): E2040 Declaration terminated incorrectly
Похоже мне как маленькому разжевать надо ~_~
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
03.09.2015, 08:44
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 08:57  [ТС]
Bit_Man,

Добавлено через 2 минуты
Не догадываюсь куда это вставлять конечно в самом верху после инклудов стоит
C++
1
2
3
4
5
__fastcall TFOTCHET_SPISOK_TEH::TFOTCHET_SPISOK_TEH(TComponent* Owner)
: TForm(Owner)
{
 
}
Но оно там с самого создания формы +)) это я так понимаю для того чтобы при создание формы происходило, а значит не то что вы мне написали там у вас String в начале )))

Добавлено через 7 минут
Так ладно допустим я допустил ошибку и забыл букву T в начале названия формы
НЕ FOTCHET_SPISOK_TEH
А TFOTCHET_SPISOK_TEH
Но теперь выдаёт.
[C++ Error] Unit5.cpp(1190): E2316 '_fastcall TFOTCHET_SPISOK_TEH::GetWhereSQL()' is not a member of 'TFOTCHET_SPISOK_TEH'
0
Модератор
 Аватар для D1973
9957 / 6493 / 2461
Регистрация: 21.01.2014
Сообщений: 27,501
Записей в блоге: 3
03.09.2015, 09:04
Раз у тебя БД на Oracle - не правильней ли вынести всю эту громазду запроса на сервер, в какую-то хранимую процедуру, в которую передавть лишь необходимый параметр?
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 09:06  [ТС]
Ну до чего же меня беси моя тупость и невежество вот вы вроде написали уже всё ответы дали, а я ими не могу воспользоваться простите меня =(
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
03.09.2015, 09:08
TForm1 на TFOTCHET_SPISOK_TEH
в h файле объявил функцию?

Добавлено через 34 секунды
C++
1
String __fastcall GetWhereSQL(void)
0
Модератор
 Аватар для D1973
9957 / 6493 / 2461
Регистрация: 21.01.2014
Сообщений: 27,501
Записей в блоге: 3
03.09.2015, 09:09
Так, пока писал, тема уже обновилась... Ясно, вопрос со StoredProcedure с повестки дня снимается. Делай по простому
1. Заполняй свой запрос, только последний WHERE не включай, ну и там дальше ORDER BY ID был, его тоже не надо.
2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String _sql = OracleDataSet1->SQL->Text;
  String WhereSQL = "";
  for (int i = 0; i < CheckListBox1->Items->Count; i++)
    if (CheckListBox1->Checked[i])
      i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(status = " + IntToStr(i + 1) + ") AND " : WhereSQL += "(status = " + IntToStr(i) + ") AND";
  if (!WhereSQL.IsEmpty()) 
   {WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 5) + ")";
    _sql += WhereSQL;
   }
  _sql += "  group by id))";
  OracleDataSet1->SQL->Text = _sql;
}
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 09:20  [ТС]
Продолжим )))

Добавлено через 6 минут
Цитата Сообщение от D1973 Посмотреть сообщение
ну и там дальше ORDER BY ID был
Не order by а group by у меня в каждом селекте его я так понял убрать, а order by 1 это в самом конце один раз.

Добавлено через 57 секунд
Пока, что пробую

Добавлено через 46 секунд
Пока пробовал возник вопрос а где тут DbGrid участвует?
0
Модератор
 Аватар для D1973
9957 / 6493 / 2461
Регистрация: 21.01.2014
Сообщений: 27,501
Записей в блоге: 3
03.09.2015, 09:22
Цитата Сообщение от StalkerIQ Посмотреть сообщение
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=2 group by t.id)where "+Ch1+" "+twoA+" "+Ch2+" "+threeA+" "+Ch3+" "+fourA+" "+Ch4+" "+fiveA+" "+Ch5+" "+sixA+" "+Ch6+" "+sevenA+" "+Ch7+" "+eightA+" "+Ch8+" *group by id))");
То что синее - оставить, то, что красное - убрать
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 09:23  [ТС]
Я правильно сдел.
Кусок кода?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
String _sql = OracleDataSet1->SQL->Text;
  String WhereSQL = "";
  for (int i = 0; i < CheckListBox1->Items->Count; i++)
    if (CheckListBox1->Checked[i])
      i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(status = " + IntToStr(i + 1) + ") AND " : WhereSQL += "(status = " + IntToStr(i) + ") AND";
  if (!WhereSQL.IsEmpty())
   {WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 5) + ")";
    _sql += WhereSQL;
   }
  _sql += "  group by id))";
 
OracleDataSet1->SQL->Text = _sql;
 
OracleDataSet1->SQL->Add("SELECT * FROM");
OracleDataSet1->SQL->Add("(SELECT");
OracleDataSet1->SQL->Add("EXTRACT (YEAR FROM d.p_year) \"Год\", (SELECT COUNT(*) FROM Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=2 group by t.id)"+_sql+" ))");
В самом конце этот "+_sql+" параметр в запрос передаю так да?
0
Модератор
 Аватар для D1973
9957 / 6493 / 2461
Регистрация: 21.01.2014
Сообщений: 27,501
Записей в блоге: 3
03.09.2015, 09:23
Цитата Сообщение от StalkerIQ Посмотреть сообщение
Пока пробовал возник вопрос а где тут DbGrid участвует?
Здрас-сте! Приехали! А это-то еще откуда? Про него вообще вопроса не было
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 09:24  [ТС]
Ок сейчас запилю проверим ))

Добавлено через 1 минуту
Мой первый пост тут...
Цитата Сообщение от StalkerIQ Посмотреть сообщение
Здравствуйте господа.
Вопрос насущный меня потревожил...
Для начала опишу программу.
Значит форма на ней
один DbGrid;
один DataSet;
один DataSource;
И два РАДИОбаттон
Здрасте, а инфа то гуда выводится )))
Явно написано "один DbGrid"
0
Модератор
 Аватар для D1973
9957 / 6493 / 2461
Регистрация: 21.01.2014
Сообщений: 27,501
Записей в блоге: 3
03.09.2015, 09:29
Цитата Сообщение от StalkerIQ Посмотреть сообщение
String _sql = OracleDataSet1->SQL->Text;
String WhereSQL = "";
for (int i = 0; i < CheckListBox1->Items->Count; i++)
if (CheckListBox1->Checked[i])
i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(status = " + IntToStr(i + 1) + ") AND " : WhereSQL += "(status = " + IntToStr(i) + ") AND";
if (!WhereSQL.IsEmpty())
{WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 5) + ")";
_sql += WhereSQL;
}
_sql += " group by id))";
OracleDataSet1->SQL->Text = _sql;

OracleDataSet1->SQL->Add("SELECT * FROM");
OracleDataSet1->SQL->Add("(SELECT");
OracleDataSet1->SQL->Add("EXTRACT (YEAR FROM d.p_year) \"Год\", (SELECT COUNT(*) FROM Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=2 group by t.id")
+_sql+" ))");
То, что красное - убрать, что зеленое - то ниже синего

Добавлено через 1 минуту
Цитата Сообщение от StalkerIQ Посмотреть сообщение
Явно написано "один DbGrid"
Ну дак задай этому гриду в качестве датасета свой OracleDataSet1 - и все
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 09:54  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Ну дак задай этому гриду в качестве датасета свой OracleDataSet1 - и все
А ну так это уже сделано давно ))) значит всё окай по дбгриду.

Добавлено через 4 минуты
У меня в начале { и в конце всего этого }
он ставит курсор на последний } и пишет мне
[C++ Warning] Unit5.cpp(1283): W8070 Function should return a value

И да поменял местами синенькое и зелёненькое ))
Это нормально.

Добавлено через 14 минут
В конце добавил
OracleDataSet1->Active=False;
OracleDataSet1->Active=True;
Но что-то не работает тыкаю на эти чек боксы ни ошибок ни инфы.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 String __fastcall TFOTCHET_SPISOK_TEH::GetWhereSQL(void)
{
 
String f="\'";
 
OracleDataSet1->SQL->Add("SELECT * FROM");
OracleDataSet1->SQL->Add("(SELECT");
OracleDataSet1->SQL->Add("EXTRACT (YEAR FROM d.p_year) \"Год\", (SELECT COUNT(*) FROM Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=2 group by t.id)))");
 
OracleDataSet1->SQL->Add(")AS \"Системный блок\",(SELECT COUNT(*) FROM ups t1 LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad");
OracleDataSet1->SQL->Add("WHERE id_vid_u=7 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=7 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"ИБП\",(SELECT COUNT(*)FROM monitor t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=1 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date))=EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=1 group by t.id) ))");
 
OracleDataSet1->SQL->Add(")AS \"Монитор\",(SELECT COUNT(*)FROM copir t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=8 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date)) = EXTRACT (YEAR FROM d.p_year)and t1.id in ");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=8 group by t.id) ))");
 
OracleDataSet1->SQL->Add(")AS \"Копир\",(SELECT COUNT(*)FROM notebook t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=5 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT(YEAR FROM nvl(t1.data_n, t2.min_date))=EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=5 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"Ноутбук\",(SELECT COUNT(*)FROM printer t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=6 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=6 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"Принтер\",(SELECT COUNT(*) FROM spec_term t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=3 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date))= EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=3 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"Спец.терминал\" FROM (SELECT add_months( to_date('"+f+"'01011980'"+f+"','"+f+"'ddmmyyyy'"+f+"'),12*(level-1)) p_year FROM dual");
OracleDataSet1->SQL->Add("CONNECT BY level<=120) d) WHERE ");
OracleDataSet1->SQL->Add("\"Спец.терминал\" > 0 OR");
OracleDataSet1->SQL->Add("\"Принтер\" > 0 OR");
OracleDataSet1->SQL->Add("\"Ноутбук\" > 0 OR");
OracleDataSet1->SQL->Add("\"Копир\" > 0 OR");
OracleDataSet1->SQL->Add("\"Монитор\" > 0 OR");
OracleDataSet1->SQL->Add("\"ИБП\" >0 OR");
OracleDataSet1->SQL->Add("\"Системный блок\" >0");
OracleDataSet1->SQL->Add("UNION ALL");
OracleDataSet1->SQL->Add("SELECT NULL pp_year, ");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)");
OracleDataSet1->SQL->Add("FROM ");
OracleDataSet1->SQL->Add("Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS System_block,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*) FROM ups t1 LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=7");
OracleDataSet1->SQL->Add("GROUP BY sklad.id) t2 ON (t1.id = t2.id) WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS IBP,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)FROM monitor t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=1 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS Monitor,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)FROM copir t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=8 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS Kopir, ( SELECT COUNT(*)FROM notebook t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=5 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS notebook,");
OracleDataSet1->SQL->Add("( SELECT COUNT(*)FROM printer t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=6 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS printer,( SELECT COUNT(*) FROM spec_term t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=3 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS specterm FROM dual order by 1");
 
String _sql = OracleDataSet1->SQL->Text;
String WhereSQL = "";
for (int i = 0; i < CheckListBox1->Items->Count; i++)
if (CheckListBox1->Checked[i])
i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(status = " + IntToStr(i + 1) + ") AND " : WhereSQL += "(status = " + IntToStr(i) + ") AND";
if (!WhereSQL.IsEmpty())
{WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 5) + ")";
_sql += WhereSQL;
}
_sql += " group by id))";
OracleDataSet1->SQL->Text = _sql;
OracleDataSet1->Active=False;
OracleDataSet1->Active=True;
 
  }
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
03.09.2015, 10:21
Лучший ответ Сообщение было отмечено StalkerIQ как решение

Решение

AND на OR

Добавлено через 1 минуту
String __fastcall на void __fastcall
Ты же ничего не возвращаешь

Добавлено через 1 минуту
или весь код на кнопку повешать

Добавлено через 1 минуту
Цитата Сообщение от StalkerIQ Посмотреть сообщение
String _sql = OracleDataSet1->SQL->Text;
ни к чему
Цитата Сообщение от StalkerIQ Посмотреть сообщение
_sql += " group by id))";
OracleDataSet1->SQL->Text = _sql;
заменить на
C++
1
OracleDataSet1->SQL->Text = OracleDataSet1->SQL->Text + WhereSQL + " group by id))";
Добавлено через 2 минуты
перед
Цитата Сообщение от StalkerIQ Посмотреть сообщение
OracleDataSet1->SQL->Add("SELECT * FROM");
поставить
C++
1
2
if (OracleDataSet1->Active) OracleDataSet1->Close();
OracleDataSet1->SQL->Text = "";
Цитата Сообщение от StalkerIQ Посмотреть сообщение
OracleDataSet1->Active=False;
OracleDataSet1->Active=True;
заменить на
C++
1
OracleDataSet1->Open();
Добавлено через 3 минуты
Опять че-то намудрил. на 1 стр. условия запросов другие

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
String __fastcall TFOTCHET_SPISOK_TEH::GetWhereSQL(void)
{
  String WhereSQL = "";
  for (int i = 0; i < CheckListBox1->Items->Count; i++)
    if (CheckListBox1->Checked[i])
       i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(status = " + IntToStr(i + 1) + ") AND " : WhereSQL += "(status = " + IntToStr(i) + ") OR ";
  if (!WhereSQL.IsEmpty()) 
    WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 4) + ")";
  return WhereSQL;
}
 
void __fastcall TFOTCHET_SPISOK_TEH::Button2Click(TObject *Sender)
{
String WhereSQL = GetWhereSQL();
if (OracleDataSet1->Active) OracleDataSet1->Close();
OracleDataSet1->SQL->Clear();
 
OracleDataSet1->SQL->Add("SELECT * FROM");
OracleDataSet1->SQL->Add("(SELECT");
OracleDataSet1->SQL->Add("EXTRACT (YEAR FROM d.p_year) \"Год\", (SELECT COUNT(*) FROM Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=2 group by t.id) " + WhereSQL + "  group by id))");
 
OracleDataSet1->SQL->Add(")AS \"Системный блок\",(SELECT COUNT(*) FROM ups t1 LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad");
OracleDataSet1->SQL->Add("WHERE id_vid_u=7 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=7 group by t.id)" + WhereSQL + "  group by id))");
 
OracleDataSet1->SQL->Add(") AS \"ИБП\",(SELECT COUNT(*)FROM monitor t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=1 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date))=EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=1 group by t.id) " + WhereSQL + "  group by id))");
 
OracleDataSet1->SQL->Add(")AS \"Монитор\",(SELECT COUNT(*)FROM copir t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=8 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date)) = EXTRACT (YEAR FROM d.p_year)and t1.id in ");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=8 group by t.id) " + WhereSQL + "  group by id))");
 
OracleDataSet1->SQL->Add(")AS \"Копир\",(SELECT COUNT(*)FROM notebook t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=5 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT(YEAR FROM nvl(t1.data_n, t2.min_date))=EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=5 group by t.id) " + WhereSQL +"  group by id))");
 
OracleDataSet1->SQL->Add(") AS \"Ноутбук\",(SELECT COUNT(*)FROM printer t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=6 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=6 group by t.id)" + WhereSQL + "  group by id))");
 
OracleDataSet1->SQL->Add(") AS \"Принтер\",(SELECT COUNT(*) FROM spec_term t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=3 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date))= EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=3 group by t.id) " + WhereSQL +"  group by id))");
 
OracleDataSet1->SQL->Add(") AS \"Спец.терминал\" FROM (SELECT add_months( to_date('"+f+"'01011980'"+f+"','"+f+"'ddmmyyyy'"+f+"'),12*(level-1)) p_year FROM dual");
OracleDataSet1->SQL->Add("CONNECT BY level<=120) d) WHERE ");
OracleDataSet1->SQL->Add("\"Спец.терминал\" > 0 OR");
OracleDataSet1->SQL->Add("\"Принтер\" > 0 OR");
OracleDataSet1->SQL->Add("\"Ноутбук\" > 0 OR");
OracleDataSet1->SQL->Add("\"Копир\" > 0 OR");
OracleDataSet1->SQL->Add("\"Монитор\" > 0 OR");
OracleDataSet1->SQL->Add("\"ИБП\" >0 OR");
OracleDataSet1->SQL->Add("\"Системный блок\" >0");
OracleDataSet1->SQL->Add("UNION ALL");
OracleDataSet1->SQL->Add("SELECT NULL pp_year, ");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)");
OracleDataSet1->SQL->Add("FROM ");
OracleDataSet1->SQL->Add("Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS System_block,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*) FROM ups t1 LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=7");
OracleDataSet1->SQL->Add("GROUP BY sklad.id) t2 ON (t1.id = t2.id) WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS IBP,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)FROM monitor t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=1 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS Monitor,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)FROM copir t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=8 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS Kopir, ( SELECT COUNT(*)FROM notebook t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=5 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS notebook,");
OracleDataSet1->SQL->Add("( SELECT COUNT(*)FROM printer t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=6 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS printer,( SELECT COUNT(*) FROM spec_term t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=3 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS specterm FROM dual order by 1");
OracleDataSet1->Open();
}
1
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
03.09.2015, 12:28  [ТС]
Объясните что вот это возвращает
C++
1
2
3
4
if (CheckListBox1->Checked[i])
i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(status = " + IntToStr(i + 1) + ") or " : WhereSQL += "(status = " + IntToStr(i) + ") or";
if (!WhereSQL.IsEmpty())
{WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 5) + ")";
чему равно WhereSQL и что такое +=

_______________________________
Вот он на кнопке и выдаёт Ora 00933 команд нот проперли ендед.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
void __fastcall TFOTCHET_SPISOK_TEH::Button3Click(TObject *Sender)
{
String f="\'";
 
OracleDataSet1->SQL->Add("SELECT * FROM");
OracleDataSet1->SQL->Add("(SELECT");
OracleDataSet1->SQL->Add("EXTRACT (YEAR FROM d.p_year) \"Год\", (SELECT COUNT(*) FROM Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=2 group by t.id)))");
 
OracleDataSet1->SQL->Add(")AS \"Системный блок\",(SELECT COUNT(*) FROM ups t1 LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad");
OracleDataSet1->SQL->Add("WHERE id_vid_u=7 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=7 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"ИБП\",(SELECT COUNT(*)FROM monitor t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=1 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date))=EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=1 group by t.id) ))");
 
OracleDataSet1->SQL->Add(")AS \"Монитор\",(SELECT COUNT(*)FROM copir t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=8 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date)) = EXTRACT (YEAR FROM d.p_year)and t1.id in ");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=8 group by t.id) ))");
 
OracleDataSet1->SQL->Add(")AS \"Копир\",(SELECT COUNT(*)FROM notebook t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=5 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT(YEAR FROM nvl(t1.data_n, t2.min_date))=EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=5 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"Ноутбук\",(SELECT COUNT(*)FROM printer t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=6 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date) ) = EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=6 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"Принтер\",(SELECT COUNT(*) FROM spec_term t1");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=3 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE EXTRACT (YEAR FROM nvl(t1.data_n, t2.min_date))= EXTRACT (YEAR FROM d.p_year)and t1.id in");
OracleDataSet1->SQL->Add("(select id from (select max(stat),id from (select max(status) as stat,max(t.data) as dat,t.id from");
OracleDataSet1->SQL->Add("sklad_dvig t where id_vid_u=3 group by t.id) ))");
 
OracleDataSet1->SQL->Add(") AS \"Спец.терминал\" FROM (SELECT add_months( to_date('"+f+"'01011980'"+f+"','"+f+"'ddmmyyyy'"+f+"'),12*(level-1)) p_year FROM dual");
OracleDataSet1->SQL->Add("CONNECT BY level<=120) d) WHERE ");
OracleDataSet1->SQL->Add("\"Спец.терминал\" > 0 OR");
OracleDataSet1->SQL->Add("\"Принтер\" > 0 OR");
OracleDataSet1->SQL->Add("\"Ноутбук\" > 0 OR");
OracleDataSet1->SQL->Add("\"Копир\" > 0 OR");
OracleDataSet1->SQL->Add("\"Монитор\" > 0 OR");
OracleDataSet1->SQL->Add("\"ИБП\" >0 OR");
OracleDataSet1->SQL->Add("\"Системный блок\" >0");
OracleDataSet1->SQL->Add("UNION ALL");
OracleDataSet1->SQL->Add("SELECT NULL pp_year, ");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)");
OracleDataSet1->SQL->Add("FROM ");
OracleDataSet1->SQL->Add("Block t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=2 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS System_block,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*) FROM ups t1 LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=7");
OracleDataSet1->SQL->Add("GROUP BY sklad.id) t2 ON (t1.id = t2.id) WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS IBP,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)FROM monitor t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=1 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS Monitor,");
OracleDataSet1->SQL->Add("(SELECT COUNT(*)FROM copir t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=8 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS Kopir, ( SELECT COUNT(*)FROM notebook t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=5 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS notebook,");
OracleDataSet1->SQL->Add("( SELECT COUNT(*)FROM printer t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=6 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS printer,( SELECT COUNT(*) FROM spec_term t1 ");
OracleDataSet1->SQL->Add("LEFT JOIN (SELECT id, MIN(data_post) min_date FROM sklad WHERE id_vid_u=3 GROUP BY sklad.id) t2 ON (t1.id = t2.id)");
OracleDataSet1->SQL->Add("WHERE nvl(t1.data_n, t2.min_date) IS NULL ) AS specterm FROM dual order by 1");
 
String _sql = OracleDataSet1->SQL->Text;
String WhereSQL = "";
for (int i = 0; i < CheckListBox1->Items->Count; i++)
if (CheckListBox1->Checked[i])
i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(status = " + IntToStr(i + 1) + ") or " : WhereSQL += "(status = " + IntToStr(i) + ") or";
if (!WhereSQL.IsEmpty())
{WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 5) + ")";
_sql += WhereSQL;
}
 
OracleDataSet1->SQL->Text = OracleDataSet1->SQL->Text + WhereSQL + " group by id))";
OracleDataSet1->Active=False;
OracleDataSet1->Active=True;        
}
Добавлено через 15 минут
Так ну что-то заработало по сравнению с моим прошлым запросам и этим выдает разные результаты ((((
поэтому точно объясните что вот это выдаёт
C++
1
2
3
4
5
for (int i = 0; i < CheckListBox1->Items->Count; i++)
    if (CheckListBox1->Checked[i])
       i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(stat = " + IntToStr(i + 1) + ") and " : WhereSQL += "(stat = " + IntToStr(i) + ") OR ";
  if (!WhereSQL.IsEmpty())
    WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 4) + ")";
С примером пожалуйста ато я даже проверить не могу правильно ли он работает. =)))

Добавлено через 16 минут
Bit_Man, Я нашел в чём причина =)
Так вот...
Когда вот этот вот код возвращает 7 то есть stat=7
C++
1
2
3
4
5
6
7
for (int i = 0; i < CheckListBox1->Items->Count; i++)
    if (CheckListBox1->Checked[i])
 
       i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(stat = " + IntToStr(i + 1) + ") or " : WhereSQL += "(stat = " + IntToStr(i) + ") OR ";
  if (!WhereSQL.IsEmpty())
    WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 4) + ")";
  return WhereSQL;
мне надо эту stat=7 заменить на stat=8

Добавлено через 11 минут
Не для меня сложно понять ну значит так
Эта штука я понял она обрезает если закончилось WhereSQL
C++
1
2
if (!WhereSQL.IsEmpty())
    WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 4) + ")";
Эта штука для меня немного загадка
C++
1
i == CheckListBox1->Items->Count - 1 ? WhereSQL += "(stat = " + IntToStr(i + 1) + ") or " : WhereSQL += "(stat = " + IntToStr(i) + ") OR ";
Где мне написать
C++
1
2
3
4
if (CheckListBox1->Checked[i]==7)
{
CheckListBox1->Checked[i]==8 
}
вот что мне надо )))

Добавлено через 5 минут
Ну помогите в последний раз какая-то малость осталась )))

Добавлено через 1 час 13 минут
Всё нормально так

C++
1
2
3
4
5
6
7
8
9
10
11
String WhereSQL = "";
  for (int i = 0; i < CheckListBox1->Items->Count; i++)
     if (CheckListBox1->Checked[i])
 
       if((i == 7))
       { WhereSQL += "(stat = " + IntToStr(i+1) + ") And ";}
       else
       { WhereSQL += "(stat = " + IntToStr(i) + ") OR "; }
  if (!WhereSQL.IsEmpty())
    WhereSQL = " WHERE (" + WhereSQL.SubString(1, WhereSQL.Length() - 4) + ")";
  return WhereSQL;
Плюсом я в компоненте с items намудрил там был лишний Enter и как оказалось я забыл один items добавить отсюда и проблема.
Всем спасибо пока все свободны
0
Модератор
 Аватар для D1973
9957 / 6493 / 2461
Регистрация: 21.01.2014
Сообщений: 27,501
Записей в блоге: 3
03.09.2015, 13:40
Цитата Сообщение от StalkerIQ Посмотреть сообщение
Эта штука для меня немного загадка
Обыкновенная тернарная операция
Делает как раз то, что ты сделал через if...else только жестко не привязана к количеству айтемов (у тебя строго: if(i == 7), ну а если еще критерии отбора добавятся, тогда что, код менять?)
Цитата Сообщение от StalkerIQ Посмотреть сообщение
я в компоненте с items намудрил там был лишний Enter
ну вот сам себе и ответил
Цитата Сообщение от Bit_Man Посмотреть сообщение
AND на OR
Да, Bit_Man прав, тут именно OR везде, а не AND. Сам тупанул
0
22 / 20 / 3
Регистрация: 21.05.2013
Сообщений: 408
07.09.2015, 07:29  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
(у тебя строго: if(i == 7), ну а если еще критерии отбора добавятся, тогда что, код менять?)
Тут дело вот в чём 7 это количество записей в таблице статусов и уж если соберутся вводить новую графу статусов то я первый об этом узнаю так как я её и буду заводить ^^
И вот пока в БД никто не меняет эту таблицу всё будет работать.
Да я знаю что там везде OR в SQL у меня знаний хватает чтобы понять это.
На счет тернарной операции да не знал что можно в таком виде записывать.
0
Модератор
 Аватар для D1973
9957 / 6493 / 2461
Регистрация: 21.01.2014
Сообщений: 27,501
Записей в блоге: 3
07.09.2015, 13:48
Цитата Сообщение от StalkerIQ Посмотреть сообщение
И вот пока в БД никто не меняет эту таблицу всё будет работать.
По хорошему, все это должно работать, даже если кто-то меняет таблицу, но не напрямую, залезая в БД, а в программе; необходимо предусмотреть такой функционал: добавление нового статуса. При старте программа считывает данные из таблицы статусов и заполняет CheckListBox. Значение индекса элемента CheckListBox-а должно совпадать с ID записи в таблице статусов БД. Вот такое мое видение задачи...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2015, 13:48

Запросы в базу данных
Добрый день. Есть программа, которая работает с базой данных. Программа делает несколько запросов в базу данных. Но они происходят всегда в...

Ajax запросы php в базу
здраствуйте чтото на чат похожее... на странице есть форма с кнопкой отправки и вывод значений с базы(сообщений) запросы идут с...

Запросы и добавление материала в базу
Привет форумчани, вообщем такая проблема. С начало у меня открывается форма где нужно ввести только номер картриджа, а дальше если такой...

Создать базу данных и запросы
Прошу помощи в создании базы данных и запросов. Задание: Есть некий прокат кинофильмов, о каждом фильме известно след: название,...

Пользователь сайта и запросы в базу данных
Уважаемые форумчане! Требуется ваша помощь! Подскажите, как правильно? вариант 1) Пользователь заходит на сайт. Заходит на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru