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

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

11.05.2016, 06:46. Показов 5334. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru