С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70

Поиск по Базе данных

14.05.2011, 14:23. Показов 4233. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
 
{
if (Edit1->Text!="")
    {
        ADOQuery1->Close();
        ADOQuery1->SQL->Clear();
        ADOQuery1->SQL->Add("SELECT * FROM Блузки, Брюки, Купальники, Куртки, Платья, Футболки, Шорты, Юбки WHERE Код_товара=:t");
        ADOQuery1->Parameters->ParamByName("t")->Value=StrToInt(Edit1->Text);
        ADOQuery1->Open();
    }
        else
        {
            ADOQuery1->Close();
            ADOQuery1->SQL->Clear();
            ADOQuery1->SQL->Add("SELECT * FROM Блузки, Брюки, Купальники, Куртки, Платья, Футболки, Шорты, Юбки");
        }
    ADOQuery1->Open();
}
Как его можно оптимизировать (сейчас выдает ошибку) База подключается по принципу: Выбор таблицы в зависимости от Текста ComboBox
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2011, 14:23
Ответы с готовыми решениями:

Поиск в базе данных
Здравствуйте! Подскажите пожалуйста, как сделать поиск по всем колонкам не выбирая определенное поле? void __fastcall...

Поиск в базе данных
ребята подскажите пожалуйста. использую вот такой код для поиска по фамилии... ADODataSet1->Close(); AnsiString F; ...

Поиск по базе данных
есть база данных, в ней с помощью SQL запросов находим слово за время t. необходимо построить хороший индекс, и поэтому индексу с помощью...

31
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
14.05.2011, 17:25
Судя про коду, у Вас для каждого фасона одежды своя таблица (конгениально, как сказал бы О.Бендер). Если надо вытянуть содержимое всех в одном запросе, то Вам нужен Union. А то, что Вы написали - бред и головная боль для сервера, если найдется такой, который возьмется его выполнить
Пример объединения
SQL
1
2
3
4
5
6
SELECT * FROM [Платья]
UNION
SELECT * FROM [Штаны]
UNION
SELECT * FROM [Трусы]
 ...
При этом структуры всех объединеннх в запросе таблиц должны быть одинаковы (иначе вместо '*' надо перечислить список выводимых полей, причем одинаковый во всех селектах)
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
15.05.2011, 13:28  [ТС]
А если поподется новый вид (трусов, штанов и прочего)? так что думаю сделать это более динамическим

Добавлено через 16 часов 55 минут
Кстати возник вопрос с добавлением в базу новых таблиц... помогите разобраться:
C++
1
2
3
4
5
6
7
void __fastcall TForm5::BitBtn1Click(TObject *Sender)
{
           ADOQuery2->Close();
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Text = "SELECT * FROM " + ComboBox1->Text(Invent_Number int  PRIMARY KEY,Number_in_Lan varchar(50),Department varchar(50),Processor varchar(50),Memory varchar(50),HDD varchar(50),Room varchar(50),Windows_98 varchar(50),Windows_2000 varchar(50),Windows_XP varchar(50),Serial_Number varchar(50),Other varchar(50))";
ADOQuery2->ExecSQL();
}
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
16.05.2011, 00:08
C++
1
2
3
4
5
6
7
8
9
10
11
int Index;
TStringList *SL = new TStringList;
ADOConnection1->GetTableNames(SL, false);
 
   if (!SL->Find("Recycled", Index))
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text = "CREATE TABLE Recycled (Invent_Number int  PRIMARY KEY,Number_in_Lan varchar(50),Department varchar(50),Processor varchar(50),Memory varchar(50),HDD varchar(50),Room varchar(50))";
ADOQuery1->ExecSQL();
}
1
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
17.05.2011, 17:11  [ТС]
может кто знает, как сделать поиск (сложность в том что нельзя указать все таблицы (они могут появляться в ходе программы))
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
17.05.2011, 18:23
Динамический запрос по такой "рыбе":

C++
1
2
3
4
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text = "Select * from '+<Имя таблицы>+' where '+<условие>
ADOQuery1->Open();
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
17.05.2011, 20:07  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Динамический запрос по такой "рыбе":
ADOQuery1->SQL->Text = "Select * from '+<Имя таблицы>+' where '+<условие>
вопрос что писать после From?

Добавлено через 1 минуту
ADOQuery1->SQL->Text="SELECT * FROM '+<Имя таблицы>+' WHERE Код_товара='"+Edit1->Text+"'";

Добавлено через 1 минуту
Есть ли возможность чтоб во всех таблицах искал?

Добавлено через 7 минут
названия всех таблиц есть в отдельной таблице, можно ли от туда вытащить значения и указать их как Имя таблицы?

Добавлено через 1 час 27 минут
Помогите найти ошибку
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
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if (Edit1->Text=="")
    {
        ShowMessage("Введите код товара");
    }
    else
        {
             ADOQuery1->Close();
             ADOQuery1->SQL->Text="SELECT * FROM "+ADOQuery2->Fields->FieldByName("Наименование")->Text+" WHERE Код_товара="+Edit1->Text;
   //            ADOQuery1->SQL->Text="SELECT * FROM "+ADOQuery2->Fields->FieldByName("Наименование")->Text+" WHERE Код_товара="Edit1->Text;
             ADOQuery1->ExecSQL();
             ADOQuery1->Open();
        }
 
        DBGrid1->Columns->Items[0]->Width = 40;
        DBGrid1->Columns->Items[0]->Title->Alignment=taCenter;
        DBGrid1->Columns->Items[1]->Width = 100;
        DBGrid1->Columns->Items[1]->Title->Alignment=taCenter;
        DBGrid1->Columns->Items[2]->Width = 100;
        DBGrid1->Columns->Items[2]->Title->Alignment=taCenter;
        DBGrid1->Columns->Items[3]->Width = 100;
        DBGrid1->Columns->Items[3]->Title->Alignment=taCenter;
        DBGrid1->Columns->Items[4]->Width = 150;
        DBGrid1->Columns->Items[4]->Title->Alignment=taCenter;
        DBGrid1->Columns->Items[5]->Width = 100;
        DBGrid1->Columns->Items[5]->Title->Alignment=taCenter;
        ADOQuery1->Next();
        Edit1->Clear();
 
}
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.05.2011, 20:11
Вот это лишнее
Цитата Сообщение от Sidi Посмотреть сообщение
ADOQuery1->ExecSQL();
Добавлено через 1 минуту
На мой взгляд запрос не верно составлен
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
17.05.2011, 21:46  [ТС]
Какие есть предложения? убрать вообще?

Добавлено через 1 минуту
Пишет что параметр "что вожу в Эдит" не имеет значения по умолчанию
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.05.2011, 22:03
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
f (Edit1->Text=="")
        {
                ShowMessage("Введите код товара");
        }
        else
                {
                         ADOQuery1->Close();
                         ADOQuery1->SQL->Clear();
                         ADOQuery1->SQL->Text="SELECT * FROM имя_таблицы WHERE Код_товара LIKE '"+ComboBox1->Text+"'";
                         ADOQuery1->Open();
                }
 
                DBGrid1->Columns->Items[0]->Width = 40;
                DBGrid1->Columns->Items[0]->Title->Alignment=taCenter;
                DBGrid1->Columns->Items[1]->Width = 100;
                DBGrid1->Columns->Items[1]->Title->Alignment=taCenter;
                DBGrid1->Columns->Items[2]->Width = 100;
                DBGrid1->Columns->Items[2]->Title->Alignment=taCenter;
                DBGrid1->Columns->Items[3]->Width = 100;
                DBGrid1->Columns->Items[3]->Title->Alignment=taCenter;
                DBGrid1->Columns->Items[4]->Width = 150;
                DBGrid1->Columns->Items[4]->Title->Alignment=taCenter;
                DBGrid1->Columns->Items[5]->Width = 100;
                DBGrid1->Columns->Items[5]->Title->Alignment=taCenter;
                Edit1->Clear();
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
17.05.2011, 22:09  [ТС]
проблема вся в том, что таблиц много, у них есть схожие параметры и столбцы, в ADOQuery2, они все перечислены, и пополняются список пополняется, сразу как создается новая таблица. так что я не могу забить названия статически
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.05.2011, 22:18
Тогда забивай через СomboBox
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
17.05.2011, 22:20  [ТС]
делал так, но проблема в том, что он ищет лишь, активную таблицу в данный момент, а мне желательно во всех, 2-ой день голову ломаю) может быть есть SQL запрос позволяющий произвести поиск во всех таблицах?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
17.05.2011, 22:27
Цитата Сообщение от Sidi Посмотреть сообщение
может быть есть SQL запрос позволяющий произвести поиск во всех таблицах?
Тебе подсказали про UNION, но так как я таблицы добавляються то он тебе здесь не подойдёт.

Ща подумаю
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
17.05.2011, 22:33  [ТС]
заранее спасибо) если что мое мыло Sidi_246@mail.ru Если проблема решается - оставляю тут) людям в помощь)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.05.2011, 09:23
C++
1
2
TStringList *SL = new TStringList;
ADOConnection1->GetTableNames(SL, false);
Тебе нужно текст из объекта SL вставить в твой запрос
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
18.05.2011, 09:26  [ТС]
куда это вставить?

Добавлено через 2 минуты
Если не сложно на моем примере)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.05.2011, 09:33
вот сюда
C++
1
2
3
4
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text="SELECT * FROM SL->Text WHERE Код_товара = чему-то";
ADOQuery1->Open();
0
1 / 1 / 0
Регистрация: 31.03.2010
Сообщений: 70
18.05.2011, 09:35  [ТС]
т.е. создать объект ADOConnection1 и после этой строчки?
ADOQuery1->SQL->Clear();
я что то совсем запутался...
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
18.05.2011, 09:37
У тебя база через, что подключается?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.05.2011, 09:37
Помогаю со студенческими работами здесь

Поиск по базе данных (id)
У меня есть база данных, вот скрин: Подскажите, пожалуйста, как в C++ Builder 6 реализовать, чтобы, если: Пользователь в...

Поиск по базе данных
А как сделать так чтобы поиск показывал все совпадения а не останавливался на первом? На этом форуме нашёл код но он показывает только 1...

Поиск в базе данных
Делаю окно авторизации пользователей через базы данных postgresql. Таблица состоит из двух столбцов login и pass. При компиляции никаких...

Поиск по базе данных
Программа через определенное время сохраняет имя аудио файла в каталог и в базу данных с увеличением имени на 1. Как сделать так чтоб при...

Поиск по базе данных
имеется: база данных - &quot;ENG&quot; EditBox - &quot;Edit1&quot; как сделать так чтобы при нажатии на кнопку 'w' в Edit1 появлялась нечто вроде...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru