Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 08.12.2010
Сообщений: 6

Как в DBGrid отобразить два одинаковых sql запроса

14.12.2010, 00:48. Показов 1439. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста.
Программа работы со штрих кодами.
Когда я считываю в Memo одинаковые штрих коды, программа выводит только одну запись в DBGrid, а должна выводить несколько одинаковых (хотя в БД одна запись с такими данными).?
Мой код:
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
unsigned pos;
for(int y=0;y<Memo1->Lines->Count;y++)
{
 pos = Memo1->Lines->Strings[y].Pos(".");
 Memo2->Lines->Add(Memo1->Lines->Strings[y].SubString(1, pos - 1));
 
}
 
 
for(int y=0;y<Memo1->Lines->Count;y++)
{
unsigned pos;
 pos = Memo1->Lines->Strings[y].Pos(".");
Memo3->Lines->Add(Memo1->Lines->Strings[y].SubString(pos + 1, Memo1->Text.Length() - pos));
}
 
 
 
for(int y=0;y<Memo1->Lines->Count;y++)
{
 pos = Memo3->Lines->Strings[y].Pos("-");
 Memo4->Lines->Add(Memo3->Lines->Strings[y].SubString(1, pos - 1));
}
 
 
 //  Memo2->Lines->Delete(2);
//Memo4->Lines->Delete(2);
  //   Memo2->Lines->Delete(Memo2->Lines->Count-1);
   //    Memo4->Lines->Delete(Memo4->Lines->Count-1);
    //  Memo1->Lines->Delete(Memo1->Lines->Count-1);
 
            for(int y=0;y<Memo2->Lines->Count;y++)
 if(Memo2->Lines->Strings[y]=="")   //Åñëè ñòðîêà ïóñòàÿ
 Memo2->Lines->Delete(y); //Óäàëÿåì ýòó ñòðîêó
 
 
            for(int y=0;y<Memo3->Lines->Count;y++)
 if(Memo3->Lines->Strings[y]=="")   //Åñëè ñòðîêà ïóñòàÿ
 Memo3->Lines->Delete(y); //Óäàëÿåì ýòó ñòðîêó
 
            for(int y=0;y<Memo4->Lines->Count;y++)
 if(Memo4->Lines->Strings[y]=="")   //Åñëè ñòðîêà ïóñòàÿ
 Memo4->Lines->Delete(y); //Óäàëÿåì ýòó ñòðîêó
 
 
TStringList* sl = new TStringList;
sl->AddStrings(Memo4->Lines);
 
TStringList* s2 = new TStringList;
s2->AddStrings(Memo2->Lines);
 
 
Query1->SQL->Clear();
for(int i = 0, b = 0; i < sl->Count, b < s2->Count; i++, b++){
  if(i < sl->Count - 1)
    Query1->SQL->Add("SELECT distinct BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID union");
  else
    Query1->SQL->Add("SELECT distinct BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID");
}
Query1->Open();
 
 
 //Query1->RecordCount;
 
QRListForm->QRLabel11->Caption=Form1->Query1->RecordCount;
 
Memo2->Lines->Clear();
Memo3->Lines->Clear();
Memo4->Lines->Clear();
Memo1->SetFocus();
Код sql запроса в Query:
SQL
1
2
3
4
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2010, 00:48
Ответы с готовыми решениями:

Как получить доступ к ячейкам DBGrid после SQL-запроса ADOQuery
Здравствуйте! Я на C++ Builder-е программирую давно но с Базами данных столкнулся впервые, т.к. решаю моделирую математические модели. ...

Как отобразить результат SQL запроса в dataGridView
ла ла ла ла лла аллала ............... SqlDataAdapter dataAdapter = new SqlDataAdapter(); SqlConnection Connection...

Как занести результат SQL запроса в dbgrid?
Подскажите пожалуйста, как занести результат SQL запроса в dbgrid? Мне нужно в БД найти товар по его коду и занести в таблицу название и...

8
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.12.2010, 01:08
prustypa, мне кажется или у вас 4 одинаковых запроса юнионом объединены? зачем?
0
0 / 0 / 0
Регистрация: 08.12.2010
Сообщений: 6
14.12.2010, 01:27  [ТС]
Lord_Voodoo, Щоб циклом запит працював. Як зробити щоб він не раз виводив в Grid результат, а декілька однакових ? Дякую за відповідь.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.12.2010, 09:11
prustypa, ну если вам так сильно хочется дублирования, тогда добавьте в запрос такое:
SQL
1
2
3
4
SELECT DISTINCT 1,  ... UNION
SELECT DISTINCT 2,  ... UNION
SELECT DISTINCT 3, ... UNION
SELECT DISTINCT 4, ...
0
0 / 0 / 0
Регистрация: 08.12.2010
Сообщений: 6
14.12.2010, 19:51  [ТС]
Lord_Voodoo, Пробував вставляв SQL запит то дублює, як мені в самому циклу програми зробити так щоб однакові запити виводило в Grid не один раз, а стільки скільки ми їх запросили та щоб не однакові запити теж працювали.
Ось коли такий запит (Два різних запита) працює добре, виводить в Grid результат двох запитів :
SQL
1
2
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =2 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID
Коли другий такий запит (Два однакових та один різний) працює погано тому що виводить в Grid результат двох запитів, а я хочу щоб виводив три запита , два однакових і однин різний :
SQL
1
2
3
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =2 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT DISTINCT BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID
Я більше не маю в кого запитати , підскажіть будь-ласка.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.12.2010, 21:23
prustypa, уберите distinct и добавьте псевдополе, как я вам показал... а в дбгриде просто скройте его, в чем проблема-то?
0
0 / 0 / 0
Регистрация: 08.12.2010
Сообщений: 6
14.12.2010, 21:38  [ТС]
Lord_Voodoo, Як добавити псевдо поле в мій C++ код (формування запиту) ? :
C++
1
2
3
4
5
6
7
8
Query1->SQL->Clear();
for(int i = 0, b = 0; i < sl->Count, b < s2->Count; i++, b++){
  if(i < sl->Count - 1)
    Query1->SQL->Add("SELECT distinct BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID union");
  else
    Query1->SQL->Add("SELECT distinct BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID");
}
Query1->Open();
Я так розумію якось треба зробити щоб псевдо поле автоматично ставилося до sql запитів які повторюються.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.12.2010, 23:56
вот так:
C++
1
2
3
4
5
Query1->SQL->Add("SELECT " + IntToStr(i) + " as f1, BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,
POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 
FROM BW_AUFTR_POS,BW_AUFTR_KOPF 
WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" 
AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID union");
но только для обоих случаев, понятное дело

и еще - пишите на русском, потому что вас тут 99% людей просто не понимают, поэтому и не помогают
0
0 / 0 / 0
Регистрация: 08.12.2010
Сообщений: 6
15.12.2010, 00:52  [ТС]
Lord_Voodoo, Помилка коли я даю йому дані в мемо для формування більше одного запиту. 'Key violation'.
C++
1
2
3
4
5
6
7
8
Query1->SQL->Clear();
for(int i = 0, b = 0; i < sl->Count, b < s2->Count; i++, b++){
  if(i < sl->Count - 1)
    Query1->SQL->Add("SELECT " + IntToStr(i) + " as f1, BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID union");
  else
    Query1->SQL->Add("SELECT " + IntToStr(i) + " as f1, BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID");
}
Query1->Open();
SQL
1
2
3
SELECT 0 AS f1, BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT 2 AS f1, BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID UNION
SELECT 3 AS f1, BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID IN(19861) AND POS_NR =5 AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID
Можливо потрібно добавити чистку SQL запита у Query1 ?
В чому проблема ?

Добавлено через 28 минут
Робить !!!
Трішки код підправив.
C++
1
2
3
4
5
6
7
8
Query1->SQL->Clear();
for(int i = 0, b = 0; i < sl->Count, b < s2->Count; i++, b++){
  if(i < sl->Count - 1)
    Query1->SQL->Add("SELECT " + IntToStr(i) + " , BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID union");
  else
    Query1->SQL->Add("SELECT " + IntToStr(i) + " , BW_AUFTR_KOPF.ID,AH_NAME1,POS_NR,PP_MENGE,PP_BREITE,PP_HOEHE,POS_KOMMISSION,PROD_BEZ2,DATUM_PROD1 FROM BW_AUFTR_POS,BW_AUFTR_KOPF WHERE BW_AUFTR_POS.ID in("+s2->Strings[b]+") and POS_NR ="+sl->Strings[i]+" AND BW_AUFTR_POS.ID = BW_AUFTR_KOPF.ID");
}
Query1->Open();
Добавлено через 1 минуту
Lord_Voodoo, Велика дякую, в котрий раз допомагаєте , дякую.

Добавлено через 14 секунд
Lord_Voodoo, Велика дякую, в котрий раз допомагаєте , дякую.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2010, 00:52
Помогаю со студенческими работами здесь

Отобразить результат выполнения запроса в DbGrid
Здравствуйте, подскажите пожалуйста, как сделать, чтобы в DBGrid отобразил результаты выполнения запроса..

Как при клике по чекбоксам в DataGridView (разных строк) отобразить в Label их key (из SQL запроса)
Привет, данные в datagridview из mssql, 2 столбца key(скрытый) и name подключаю DataGridViewCheckBoxColumn() первым столбцом(он к таблице...

Как объединить два SQL запроса?
Всем привет) Есть задание: Вывести список акционеров, которые владеют акциями обоих выпусков - 08-1-412о и 08-1-412п...

Как объединить два SQL запроса в один?
Хочу,чтобы при добавлении договора в COMBOBOX отображались заявки,поступившие от администрации. Вот код: максКодЗаявки =...

Два одинаковых запроса,
появилься такой вопрос. Есть два почти одинаковых запроса: seo оптимизация seo продвижение По обоим запросам сайт в топе. (почти...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru