Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200

Добавление информации в базу данных через ADOQuery вводимый через Edit

11.05.2016, 06:46. Показов 5378. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается добавить информацию в таблицу, каждый Edit отвечает за отдельное поле в строке...
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
ADOQuery2->Close();
ADOQuery2->SQL->Clear();
ADOQuery2->SQL->Text = "INSERT INTO АРМ продавца книжного магазина ([Код поставщика, Автор(ы), Название, Год издания, Жанр/Область, Полка, Цена, Количество]) VALUES(:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)";
ADOQuery2->Parameters->ParamByName("Param1")->Value=Edit6->Text;
ADOQuery2->Parameters->ParamByName("Param2")->Value=edtAVTOR->Text;
ADOQuery2->Parameters->ParamByName("Param3")->Value=edtNAME->Text;
ADOQuery2->Parameters->ParamByName("Param4")->Value=Edit3->Text;
ADOQuery2->Parameters->ParamByName("Param5")->Value=Edit4->Text;
ADOQuery2->Parameters->ParamByName("Param6")->Value=Edit5->Text;
ADOQuery2->Parameters->ParamByName("Param7")->Value=Edit1->Text;
ADOQuery2->Parameters->ParamByName("Param8")->Value=Edit2->Text;
ADOQuery2->ExecSQL();
DBGrid1->DataSource=DataSource1;
Делал по примеру, так что не был уверен в работоспособности кода изначально... не совсем понял ([...]) в строчке:
C++
1
ADOQuery2->SQL->Text = "INSERT INTO АРМ продавца книжного магазина ([Код поставщика, Автор(ы), Название, Год издания, Жанр/Область, Полка, Цена, Количество]) VALUES(:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)";
Добавлено через 6 минут
Выскакивает ошибка: "Неправильно определён объект Parameter. Предоставлены несогласованные или неполные сведения.". Ошибка возникает при нажатии на кнопку "Добавить" при заполнении всех полей.

Добавлено через 1 час 31 минуту
Кому надо, могу программу скинуть, что бы понять суть...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.05.2016, 06:46
Ответы с готовыми решениями:

Добавление записи в базу данных через Edit
Здравствуйте есть база данных на c++ builder которая соединена с Interbase .DB grid подключил к базе данных , все сработало . Но сейчас...

Добавление данных через Edit
Всем здравствуйте, это снова я =) Имеется БД, соединил через АДО. Инфа выводится через Grid. Инфа стандартного типа: Фамилия, Имя,...

Добавление записи в базу данных через Edit
Здравствуйте есть база данных на c++ builder которая соединена с Interbase .DB grid подключил к базе данных , все сработало . Но сейчас...

24
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.05.2016, 08:29
1. перевести поля в базе на латинницу.
2. если поле имеет двойное название, то писать эти названия через нижнее подчёркивание или брать в скобки квадратные.

Добавлено через 10 минут
3. Имя таблицы тоже перевести на латинницу и сократить название самой таблицы
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
11.05.2016, 10:19  [ТС]
Sasha, а так, код сам по себе правильно написан?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.05.2016, 10:57
Код правильный. Только с названием полей накручено

Добавлено через 40 секунд
И название таблицы должно быть другое
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
11.05.2016, 11:27  [ТС]
Sasha, поменял, вот только я не совсем понял что там была за строчка?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.05.2016, 11:31
Цитата Сообщение от ITALIANO Посмотреть сообщение
вот только я не совсем понял что там была за строчка?
Какая строчка?
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
11.05.2016, 11:37  [ТС]
Выскочила ошибка:
ADOQuery1: Parameter 'Param1' not found.
Это после попытки добавить записи...

Добавлено через 32 секунды
Вот эта строчка:
C++
1
ADOQuery2->SQL->Text = "INSERT INTO АРМ продавца книжного магазина ([Код поставщика, Автор(ы), Название, Год издания, Жанр/Область, Полка, Цена, Количество]) VALUES(:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)";
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
11.05.2016, 12:46
Ещё раз говорю... В запросе поменяй названия таблицы и полей на латинницу. И такие же названия полей и таблицы сделай в базе
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
12.05.2016, 11:19  [ТС]
Sasha, я всё так и сделал, но почему-то не работает, вот скрины базы:
Миниатюры
Добавление информации в базу данных через ADOQuery вводимый через Edit  
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.05.2016, 11:21
А код запроса выложи
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
12.05.2016, 12:35  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TfrmMain::btnAddClick(TObject *Sender)
{
      ADOQuery1->Close();
      ADOQuery1->SQL->Clear();
      ADOQuery1->SQL->Text = "INSERT INTO ARM ([Kod_postavshika, Avtor(i), Nazvanie, God_izdaniya, Zhanr/Oblast', Polka, Cena, Kolichestvo]) VALUES(:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)";
      ADOQuery1->SQL->Add("VALUES (:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)");
      ADOQuery1->Parameters->ParamByName("Param1")->Value=Edit6->Text;
      ADOQuery1->Parameters->ParamByName("Param2")->Value=edtAVTOR->Text;
      ADOQuery1->Parameters->ParamByName("Param3")->Value=edtNAME->Text;
      ADOQuery1->Parameters->ParamByName("Param4")->Value=Edit3->Text;
      ADOQuery1->Parameters->ParamByName("Param5")->Value=Edit4->Text;
      ADOQuery1->Parameters->ParamByName("Param6")->Value=Edit5->Text;
      ADOQuery1->Parameters->ParamByName("Param7")->Value=Edit1->Text;
      ADOQuery1->Parameters->ParamByName("Param8")->Value=Edit2->Text;
      ADOQuery1->ExecSQL();
}
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.05.2016, 13:26
Autor(i) - заменить поле в базе и в запросе на Autor
Zhanr/Oblast - заменить поле в базе и в запросе Zhanr_Oblast

Цитата Сообщение от ITALIANO Посмотреть сообщение
ADOQuery1->SQL->Add("VALUES (:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)");
Вот эта строка здесь вообще лишняя потому что у тебя эта строка повторяется в части верхней строки

Добавлено через 1 минуту
Если у тебя есть связь между 2-мя таблицами, то ты должен указывать имя таблицы вместе с полем через точку
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
12.05.2016, 15:01  [ТС]
Sasha, А не подскажите как можно реализовать такую, функцию... У меня есть таблица на отдельной форме и она связанна с таблицей из главной формы, то есть у них общий Source, так вот... Мне нужно через Edit ввести нужное количество значений которое должно быть меньше чем значения находящиеся в поле "Kolichestvo", если значение будет больше, то появится сообщение примерно такого содержания (ну в смысле сообщение появится после нажатия кнопки "Продать книгу") "Введённое вами значение больше того значения которое указанно в таблице", а если значение будет равно то тогда удалится строка, где находится это значение. Когда вводится значение меньшее чем в таблице, то это значение отнимается от того, что находится в таблице... Как-то так...
Миниатюры
Добавление информации в базу данных через ADOQuery вводимый через Edit   Добавление информации в базу данных через ADOQuery вводимый через Edit  
0
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
12.05.2016, 15:04  [ТС]
Sasha, ну я в принципе и думал, что в них дело, поскольку ты указывал только подчёркивания и квадратные скобки...

Добавлено через 1 минуту
Скрины с предыдущей версии программы
0
1 / 1 / 1
Регистрация: 20.04.2015
Сообщений: 52
12.05.2016, 16:20
Код немного попроще чем твой
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
UnicodeString CL=L"INSERT INTO Chek (id_client, name_client, surname_client, id_worker,serialkey,id_detail,id_problem,check_id,price,data) values ('";
    CL+=DBLookup_client->Text.Trim();
    CL+="','";
    CL+=DBLookup_Name->Text.Trim();
     CL+="','";
    CL+=DBLookup_Surname->Text.Trim();
    CL+="','";
     CL+=DBLookup_Worker->Text.Trim();
     CL+="','";
      CL+=DBLookupSerial->Text.Trim();
     CL+="','";
     CL+=DBLookupDetail->Text.Trim();
     CL+="','";
     CL+=DBLookup_Problem->Text.Trim();
     CL+="','";
    CL+=Edit1->Text.Trim();
    CL+="','";
    CL+=Edit2->Text.Trim();
    CL+="','";
    CL+=FormatDateTime("yyyy-MM-dd",DateTime_oplata->Date);
    CL+="')";
 
 
    DataModule3->ADOQuery3->Active=false;
    DataModule3->ADOQuery3->SQL->Clear();
    DataModule3->ADOQuery3->SQL->Add(CL);
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
12.05.2016, 16:36
Цитата Сообщение от ITALIANO Посмотреть сообщение
Sasha, А не подскажите как можно реализовать такую, функцию... У меня есть таблица на отдельной форме и она связанна с таблицей из главной формы, то есть у них общий Source, так вот... Мне нужно через Edit ввести нужное количество значений которое должно быть меньше чем значения находящиеся в поле "Kolichestvo", если значение будет больше, то появится сообщение примерно такого содержания (ну в смысле сообщение появится после нажатия кнопки "Продать книгу") "Введённое вами значение больше того значения которое указанно в таблице", а если значение будет равно то тогда удалится строка, где находится это значение. Когда вводится значение меньшее чем в таблице, то это значение отнимается от того, что находится в таблице... Как-то так...
Найти максимальное значение по всему столбцу количество или значение столбца количество выделенной книги в DBGrid?

Цитата Сообщение от ITALIANO Посмотреть сообщение
Sasha, ну я в принципе и думал, что в них дело, поскольку ты указывал только подчёркивания и квадратные скобки...
Так данные добавляются в таблицу или нет?

Добавлено через 1 минуту
Цитата Сообщение от imbaTapac Посмотреть сообщение
Код немного попроще чем твой
imbaTapac, чем проще то?

Добавлено через 2 минуты
imbaTapac, есть параметризированные запросы, зачем изобретать велосипед?
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
12.05.2016, 21:06
Такой же вопрос возник, только данные планировалось добавлять/редактировать через отдельную форму.
С редактированием данных в отдельном окне нет, т.к. были заменены на компоненты DBEdit и т.п., а вот с добавлением нового через эту же форму не получается , т.к. походу поля связаны через DataSource. Вот как сделать так, чтобы по кнопке можно было добавить запись ? Использовать так же sql-й запрос ? Тогда как при открытии очищать эти DBEdit ?

Добавлено через 12 минут
Данные пытаюсь так добавить:
C++
1
2
MainForm->FDTable->Insert();
MainForm->FDTable->FieldByName("FIO")->AsString = DBLastName->Text;
Добавлено через 48 минут
Кажется дошло, нужно походу FDQuery вместо FDTable использовать

Добавлено через 10 минут
Но остался вопрос, как использовать DBEdit при создании новой записи ?

Добавлено через 25 минут
Походу можно обойтись и без DBEdit
1
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
12.05.2016, 23:53  [ТС]
Sasha, нет, данные не добавляются в таблицу...

Вот видоизменённый код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TfrmMain::btnAddClick(TObject *Sender)
{
      ADOQuery1->Close();
      ADOQuery1->SQL->Clear();
      ADOQuery1->SQL->Text = "INSERT INTO ARM ([Kod_postavshika, Avtor, Nazvanie, God_izdaniya, Zhanr_Oblast, Polka, Cena, Kolichestvo]) VALUES(:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)";
      ADOQuery1->SQL->Add("VALUES (:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)");
      ADOQuery1->Parameters->ParamByName("Param1")->Value=Edit6->Text;
      ADOQuery1->Parameters->ParamByName("Param2")->Value=edtAVTOR->Text;
      ADOQuery1->Parameters->ParamByName("Param3")->Value=edtNAME->Text;
      ADOQuery1->Parameters->ParamByName("Param4")->Value=Edit3->Text;
      ADOQuery1->Parameters->ParamByName("Param5")->Value=Edit4->Text;
      ADOQuery1->Parameters->ParamByName("Param6")->Value=Edit5->Text;
      ADOQuery1->Parameters->ParamByName("Param7")->Value=Edit1->Text;
      ADOQuery1->Parameters->ParamByName("Param8")->Value=Edit2->Text;
      ADOQuery1->ExecSQL();
}
Миниатюры
Добавление информации в базу данных через ADOQuery вводимый через Edit  
0
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
13.05.2016, 04:29  [ТС]
Опять выскакивает ошибка: "Неправильно определён объект Parameter. Предоставлены несогласованные или неполные сведения.". Ошибка возникает при нажатии на кнопку "Добавить" при заполнении всех полей.

Добавлено через 1 час 14 минут
Цитата Сообщение от Sasha Посмотреть сообщение
Найти максимальное значение по всему столбцу количество или значение столбца количество выделенной книги в DBGrid?
Я имел в виду, что мы из таблицы выбираем любую книгу и нажимаем на (не знаю то-ли строчку то-ли конкретное поле...) строчку, затем в Edit вводим значение книг которое собираемся купить... Если в БД написано 15 книг, то мы например вводим 7, то есть при покупке в столбце (поле) "Kolichestvo" у нас должно остаться 8 книг. Потом нажимаем на кнопку продать книгу и значение минусуется. Если вводимое, больше, чем то, что у нас есть в БД, то типа сообщение с ошибкой (поясняющее сообщение почему мы не можем купить книг больше чем у нас есть...). Еже-ли книг одинаково и в Edit и в таблице, то есть вводим такое же значение, то строка тупо удаляется, мол книг больше няма...
З.Ы. посмотри на второй скрин который я тебе кинул, может поймёшь...

Добавлено через 3 часа 18 минут
Только сейчас заметил, что у меня идёт повторное указание параметров:
C++
1
2
ADOQuery1->SQL->Text = "INSERT INTO ARM ([Kod_postavshika, Avtor, Nazvanie, God_izdaniya, Zhanr_Oblast, Polka, Cena, Kolichestvo]) VALUES(:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)";
      ADOQuery1->SQL->Add("VALUES (:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7, :Param8)");
Убрал строчку с add, после повторной попытки добавления выдало ошибку:"Не совпадает число значений запроса и число результирующих полей"

У меня так-то в базе 9 полей, то есть включая ключевой автоинкремент (ну счётчик), а заполнение, только на 8 полей.
0
1 / 1 / 4
Регистрация: 24.10.2014
Сообщений: 200
13.05.2016, 04:53  [ТС]
Вот программа, может быть кому поможет разобраться?
Вложения
Тип файла: rar Версия с Access.rar (4.14 Мб, 33 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2016, 04:53
Помогаю со студенческими работами здесь

Добавление записи через ADOQuery
Всем привет, помогите плиз, хочу добавить даныне с едитов в БД, но вылетает ошибка Form1->ADOQuery1->Close(); ...

Добавление записи в БД Acess через ADOQuery
Здравствуйте! Помогите пожалуйста, хочу добавить данные в базу следующим образом: ADOQuery2->Close(); ...

Добавление записи в таблицу через ADOQuery
Здравствуйте) В моей программе таблица базы данных подключена к компоненту ADOQuery, насколько я понимаю SQL в свойствах обязатльно для...

Добавление записи в таблицу через Edit
Всем привет. Знаю, что подобная тема не однократно рассматривалась, но пожалуйста помогите мне. У меня есть база данных Access и есть...

Добавление в базу через кнопку
Короче у меня есть аксесовская база с двумя таблицами: Преподы, Студенты. Я сделал добавление через кнопку на отдельной форме (в студентах...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru