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

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

09.03.2013, 15:33. Показов 1401. Ответов 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
Ответ Создать тему
Новые блоги и статьи
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-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru