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

SQL запрос не выполняется

09.03.2013, 15:33. Показов 1378. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, пишу в С++ Builder XE2 .
Была задача в Edit dropапть имя и фамилию из списка treeview ,а из Edit разбивать текст в 2 переменные str1 и str2.
После чего ADOQuery ищет данные по этим двум переменным , а именно находит людей по имени и фамилии из базы данных MS Access.


Код ,выполняющийся по нажатию кнопки:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       AnsiString str1 = Edit_name->Text.SubString(0 , Edit_name->Text.Pos(" "));
       AnsiString str2 = Edit_name->Text.SubString(Edit_name->Text.Pos(" ") , Edit_name->Text.Length());
 
    Form_Module->ADOQuery_View3->Close();
 
            if(!Form_Module->ADOQuery_View3->Prepared)
 
    Form_Module->ADOQuery_View3->Parameters->ParamByName("1st_name")->Value=str1;
    Form_Module->ADOQuery_View3->Parameters->ParamByName("2nd_name")->Value=str2;
    Form_Module->ADOQuery_View3->Open();
            if(Form_Module->ADOQuery_View3->Eof)
        {
            ShowMessage("Cant find information for request = " + Edit_name->Text);
            return;
        }
        Form_FullInformation->ShowModal();
SQL запрос:
(Взят из Access)
SQL
1
2
3
       SELECT item.lot_number, item.information, item.cost, humans.firs_name, humans.last_name
       FROM humans INNER JOIN item ON humans.id_human = item.id_human
       WHERE (((humans.firs_name)=:1st_name) AND ((humans.last_name)=:2nd_name));

Вроде бы все правильно,а вот SQL запрос не выполняется почему то, просто не находит информацию(выполняется условие 2-ого if )
Если видите ошибку или знаете другие варианты , подскажите.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2013, 15:33
Ответы с готовыми решениями:

Не выполняется SQL-запрос
При нажатии на кнопку должно происходить обновление данных в БД. Однако оно не происходит, пусть значения и высчитываются. В чём проблема? ...

SQL Почему не выполняется такой запрос в Builder C++
Почему не выполняется такой запрос в Builder C++ ? (этот запрос ищет по имени строка где есть "1"+любая последовательность букв)...

Подскажите как вывести сообщение пользователю что SQL-запрос выполняется
Подскажите пожалуйста как вывести сообщение пользователю что SQL-запрос выполняется если этот запрос выполняется больше 1 минуты например

15
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.03.2013, 15:54
Поясни вот это?Что это означает?
Цитата Сообщение от CrissAnger Посмотреть сообщение
dropапть
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
09.03.2013, 16:14  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Поясни вот это?Что это означает?
Видимо я не так выразился.
Перемещение элемента по средствам Drag-and-drop.
В данном случае есть TreeView -> Items , я захватываю этот элемент и перетаскиваю его в Edit_name.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.03.2013, 17:28
Цитата Сообщение от CrissAnger Посмотреть сообщение
if(Form_Module->ADOQuery_View3->Eof)
* * * * {
* * * * * * ShowMessage("Cant find information for request = " + Edit_name->Text);
* * * * * * return;
* * * * }
В этом куске кода я не вижу где ты спускаешься по строкам?
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
09.03.2013, 17:42  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
В этом куске кода я не вижу где ты спускаешься по строкам?
Смотри,сначала подготавливаются данные для запроса(В ms access он работает,в билдере он работал только с 1 переменной) После чего запрос запускается (sql код который ниже описан) он же и проверяет, а если ничего не находит , то выдает сообщение.
Сначала у меня была проблема разделения текста из Edit , когда я с ней справился думал все заработает,так как я всего лишь добавил 1 переменную, а из-за этого он перестал искать,при чем он все делает правильно ( записывает в переменные str1 и str2 , проходит по всем частям кода) , но вот запрос ни в какую*
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.03.2013, 17:55
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от CrissAnger Посмотреть сообщение
а если ничего не находит , то выдает сообщение.
Запрос сообщение никое не выводит, выводишь сообщение ты, если запрос ничё не нашёл.
Попробуй поработать с самим запросом вместо переменных поставь конкретное имя и фамилию и посмотри найдёт он в базе или нет?
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
09.03.2013, 18:04  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Запрос сообщение никое не выводит, выводишь сообщение ты, если запрос ничё не нашёл.
Опять не так выразился*

Цитата Сообщение от Sasha Посмотреть сообщение
Попробуй поработать с самим запросом вместо переменных поставь конкретное имя и фамилию и посмотри найдёт он в базе или нет?
Да все работает.
что то не то с переменными. Вот только что.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.03.2013, 18:13
Выложи код обработчика где записано это всё есчё раз
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
09.03.2013, 18:20  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Выложи код обработчика где записано это всё есчё раз
Ты об этом?
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
void __fastcall TForm_SimpleInformationAboutVendors::Button_searchClick(TObject *Sender)
 
{   
   AnsiString str1 = Edit_name->Text.SubString(0 , Edit_name->Text.Pos(" "));
   AnsiString str2 = Edit_name->Text.SubString(Edit_name->Text.Pos(" ") , Edit_name->Text.Length());
   Label1->Caption = str1;
   Label2->Caption = str2;
 
 
    //--CCHR
    
 
    Form_Module->ADOQuery_View3->Close();
 
            if(!Form_Module->ADOQuery_View3->Prepared)
    Form_Module->ADOQuery_View3->Parameters->ParamByName("1st_name")->Value=str1;
    Form_Module->ADOQuery_View3->Parameters->ParamByName("2nd_name")->Value=str2;
    Form_Module->ADOQuery_View3->Open();
            if(Form_Module->ADOQuery_View3->Eof)
        {
            ShowMessage("Cant find information for request = " + Edit_name->Text);
            return;
        }
        Form_FullInformation->ShowModal();
}
Вот SQL запрос :

SQL
1
2
3
SELECT item.lot_number, item.information, item.cost, humans.firs_name, humans.last_name
FROM humans INNER JOIN item ON humans.id_human = item.id_human
WHERE humans.firs_name=:1st_name AND humans.last_name=:2nd_name;
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.03.2013, 18:23
Цитата Сообщение от CrissAnger Посмотреть сообщение
SELECT item.lot_number, item.information, item.cost, humans.firs_name, humans.last_name
FROM humans INNER JOIN item ON humans.id_human = item.id_human
WHERE humans.firs_name=:1st_name AND humans.last_name=:2nd_name;
А где у тебя этот SQL-запрос написан?
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
09.03.2013, 18:28  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
А где у тебя этот SQL-запрос написан?
Тут.
Form_Module->ADOQuery_View3
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.03.2013, 18:42
Пробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AnsiString str1 = Edit_name->Text.SubString(0 , Edit_name->Text.Pos(" "));
AnsiString str2 = Edit_name->Text.SubString(Edit_name->Text.Pos(" ") , Edit_name->Text.Length());
Form_Module->ADOQuery_View3->Close();
Form_Module->ADOQuery_View3->SQL->Clear();
Form_Module->ADOQuery_View3->SQL->Add("SELECT item.lot_number, item.information, item.cost, humans.firs_name, humans.last_name FROM humans INNER JOIN item ON humans.id_human = item.id_human WHERE ((humans.firs_name=:1st_name) AND (humans.last_name=:2nd_name))"); 
Form_Module->ADOQuery_View3->Parameters->ParamByName("1st_name")->Value=str1;
Form_Module->ADOQuery_View3->Parameters->ParamByName("2nd_name")->Value=str2;
Form_Module->ADOQuery_View3->Open();
if(!Form_Module->ADOQuery_View3->RecordCount)
{
  ShowMessage("Cant find information for request = " + Edit_name->Text); 
}
else
{
  ShowMessge("Есть совпадения")
}
Form_FullInformation->ShowModal();
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
09.03.2013, 18:49  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Пробуй так
неа
все тоже самое(
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
09.03.2013, 18:52
Всё тоже самое, что?
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
09.03.2013, 18:54  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
Всё тоже самое, что?
Не находит информацию , Такое ощущение,что в переменные не то записывает, хотя если выводить их в Label , то там все верно*
надо с переменными поиграть.
0
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 9
12.03.2013, 13:45  [ТС]
Все нашер проблему.
Глупая ошибка : в переменную записывался пробел.
Вот решение проблемы:
C++
1
2
       AnsiString str1 = Edit_name->Text.SubString(0 , Edit_name->Text.Pos(" ")-1);
       AnsiString str2 = Edit_name->Text.SubString(Edit_name->Text.Pos(" ")+1 , Edit_name->Text.Length());
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.03.2013, 13:45
Помогаю со студенческими работами здесь

Не выполняется запрос с INSERT INTO
Мне нужно, чтобы данные из 3 столбцов выбранной строки DBGrid при нажатии кнопки вставлялись в DBGrid на другой форме. Пишу такой код: ...

Не выполняется запрос TADOQuery
Есть код: void __fastcall TForm1::Button3Click(TObject *Sender) { AnsiString bd_L = BD_login->Text; // login AnsiString bd_P =...

Не выполняется запрос Insert into
Здраствуйте. Мне нужно создать кнопку, которая делает тоже самое, что и Insert на DBNavigator, но с исользованием SQL. Пишу такой код: ...

Не выполняется SQL-запрос
Подскажите, не выполняется sql зарос по кнопке. procedure TMainForm.Button1Click(Sender: TObject); begin ADOQuery1.SQL.Clear;...

Не выполняется SQL запрос
Есть обработчик события нажатия кнопки, в котором выполняется следующий код: protected void btn_save_work_time_Click(object sender,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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