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

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

14.12.2010, 00:48. Показов 1458. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru