Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928

Добавление записей в БД

20.03.2018, 22:45. Показов 1997. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добавляю записи в таблицу через хранимую процедуру
SQL
1
2
3
4
5
ALTER PROC [dbo].[Insert_customers]
@name VARCHAR(40), @adres VARCHAR(40), @DATA VARCHAR(50), @phone VARCHAR(40)
AS
INSERT INTO Customers( fio, adres, data_birthday, telephone)
VALUES(@name,@adres,@DATA,@phone)
вот код delphi
Delphi
1
2
3
4
5
6
ADoQuery3.SQL.Text:='exec insert_customers @name=:n, @adres=:a, @date=:d, @phone=:p';
ADOQuery3.Parameters.ParamByName('n').Value:=sEdit3.Text;
ADOQuery3.Parameters.ParamByName('a').Value:=sEdit2.Text;
ADOQuery3.Parameters.ParamByName('d').Value:=sEdit1.Text;
ADOQuery3.Parameters.ParamByName('p').Value:=sMaskEdit1.Text;
ADOQuery3.Active:=true;
когда нажимаю кнопку добавить выскакивает ошибка что процедура insert_customers ожидает параметр @data который не был указан. Хотя я вроде указал его. В чем ошибка?

Добавлено через 2 минуты
Ошибку понял неправильно написал параметр. Моя невнимательность меня погубит)

Добавлено через 45 минут
еще вопросик после нажатия на кнопку выскочила ошибка
project raised exception class EDatabaseError with message 'Adoquery :CommandText does not return a result set'
Но запись в базу добавилась, тогда из за чего ошибка?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2018, 22:45
Ответы с готовыми решениями:

База данных на основе массива записей: добавление, удаление, поиск записей
Комрады, учусь асму, а некоторые моменты не осиливаю :( задача в реализовании некой базы данных с записями "фамилия",...

Добавление записей невозможно: ключ связи таблицы не входит в набор записей
Люди помогите пожалуйста. Есть база данных с 4 таблицами. Есть форма, на ней располагается подчиненная форма с полями и полем со...

Добавление записей невозможно: ключ связи таблицы не входит в набор записей
Здравствуйте! Возникла проблема при заполнении формы основанной на запросе. Как можно исправить? Читал уже другие темы с...

47
554 / 484 / 191
Регистрация: 11.12.2013
Сообщений: 2,507
24.03.2018, 21:39
Студворк — интернет-сервис помощи студентам
так не могу сказать, надо смотреть в режиме отладки, но у меня не установлен MSSQL и нет желания его устанавливать(даже Express)
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 15:43  [ТС]
Может кто посмотреть проект что не так с покупкой билетов(добавление записей в бд). БД MS SQL Server
Вложения
Тип файла: rar Курсач БД.rar (2.54 Мб, 1 просмотров)
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 17:30  [ТС]
Скажите что не так в этой строке
Delphi
1
ADOQuery3.Parameters.ParamByName('newW').Value:=sEdit5.Text;
в таблице это поле varchar(50).
Бьет ошибку
Миниатюры
Добавление записей в БД  
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
27.03.2018, 18:25
Цитата Сообщение от 6elka1703 Посмотреть сообщение
Скажите что не так в этой строке
полностью с запросом выкладывай
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 18:31  [ТС]
qwertehok,
Delphi
1
2
3
4
5
6
7
8
9
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('INSERT INTO buy(id_customer,data_buy, id_session,cost_all_tickets, number_buy_tickets)');
ADOQuery3.SQL.Add('values(:newF,:newW,:newL,:newm,:newk)');
ADOQuery3.Parameters.ParamByName('newF').Value:='select id_customer from Customers where name=@name';
ADOQuery3.Parameters.ParamByName('newW').Value:=sEdit5.Text;
ADOQuery3.Parameters.ParamByName('newL').Value:=StrToInt(sEdit6.Text);
ADOQuery3.Parameters.ParamByName('newm').Value:=sEdit7.Text;
ADOQuery3.Parameters.ParamByName('newk').Value:=StrToInt(sEdit4.Text);
ADOQuery3.ExecSQL;
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
27.03.2018, 18:34
Оригинально

вторая колонка у тебя даже называется очень интересно - data_buy
а ты пихаешь туда sEdit5.Text

ЗЫ
а это как так?
Цитата Сообщение от 6elka1703 Посмотреть сообщение
Value:='select id_customer from Customers where name=@name';
@name это переменная в MSSQL, как ты ее тут используешь?
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 18:37  [ТС]
qwertehok, data_buy сделал текстовым, а вот с @name я не знаю как сделать думал так прокатит.
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
27.03.2018, 18:38
Цитата Сообщение от 6elka1703 Посмотреть сообщение
а вот с @name я не знаю как сделать думал так прокатит.
не прокатит
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 18:45  [ТС]
qwertehok, так а что с data_buy не так?
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
27.03.2018, 18:47
если у вас в Edit5 - дата в правильном формате, то прокатит
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 18:50  [ТС]
qwertehok, так поле в бд текстовое так что должно быть все равно
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
27.03.2018, 18:54
тогда еще раз приведи
1. сам запрос
2. скрин ошибки с выделенной строкой в делфи
3. скрин с типами данных в таблице
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 19:02  [ТС]
qwertehok,
Delphi
1
2
3
4
5
6
7
8
9
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('INSERT INTO buy(id_customer,data_buy, id_session,cost_all_tickets, number_buy_tickets)');
ADOQuery3.SQL.Add('values(:newF,:newW,:newL,:newm,:newk)');
ADOQuery3.Parameters.ParamByName('newF').Value:='select id_customer from Customers where name=@name';
ADOQuery3.Parameters.ParamByName('newW').Value:=sEdit5.Text;
ADOQuery3.Parameters.ParamByName('newL').Value:=StrToInt(sEdit6.Text);
ADOQuery3.Parameters.ParamByName('newm').Value:=sEdit7.Text;
ADOQuery3.Parameters.ParamByName('newk').Value:=StrToInt(sEdit4.Text);
ADOQuery3.ExecSQL;
строка с ошибкой
Delphi
1
ADOQuery3.Parameters.ParamByName('newW').Value:=sEdit5.Text;
сама ошибка
Миниатюры
Добавление записей в БД   Добавление записей в БД  
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
27.03.2018, 19:04
в четвертой строке напиши
Delphi
1
ADOQuery3.Parameters.ParamByName('newF').Value:=random(100)
и попробуй выполнить
1
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 19:09  [ТС]
qwertehok, вот ошибка скорее всего из-за того что там нет такого айдишника. Попробую просто свое число вставить
Миниатюры
Добавление записей в БД  
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
27.03.2018, 19:12  [ТС]
qwertehok, нормально сработало. Это было из за того что запрос не правильный был с первым параметром?
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
27.03.2018, 19:16
Цитата Сообщение от 6elka1703 Посмотреть сообщение
Это было из за того что запрос не правильный был с первым параметром?
из-за того что тут
Delphi
1
ADOQuery3.Parameters.ParamByName('newF').Value:='select id_customer from Customers where name=@name';
ты присваиваешь в VALUE текст
1
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
28.03.2018, 17:10  [ТС]
qwertehok, ясно,спасибо за помощь

Добавлено через 21 час 53 минуты
qwertehok, подскажите как правильно написать запрос с параметром.
Я пишу так
Вот весь запрос на добавление
Delphi
1
2
3
4
5
6
7
8
9
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('INSERT INTO buy(id_customer,data_buy, id_session,cost_all_tickets, number_buy_tickets)');
ADOQuery3.SQL.Add('values(:newF,:newW,:newL,:newm,:newk)');
ADOQuery3.Parameters.ParamByName('newF').Value:='select id_customer from Customers where name='''+'%'+'''+'''+sedit3.text+'''+'''+'%'+'''';
ADOQuery3.Parameters.ParamByName('newW').Value:=DateToStr(Date);
ADOQuery3.Parameters.ParamByName('newL').Value:=sDBGrid2.DataSource.DataSet.Fields[3].asString;
ADOQuery3.Parameters.ParamByName('newm').Value:=StrToInt(sEdit4.Text);
ADOQuery3.Parameters.ParamByName('newk').Value:=StrToInt(sEdit4.Text);
ADOQuery3.ExecSQL;
проблема в этой строке. Как правильно написать этот запрос
Delphi
1
ADOQuery3.Parameters.ParamByName('newF').Value:='select id_customer from Customers where name='''+'%'+'''+'''+sedit3.text+'''+'''+'%'+'''';
0
5999 / 4574 / 1096
Регистрация: 29.08.2013
Сообщений: 28,250
Записей в блоге: 3
28.03.2018, 17:18
Цитата Сообщение от 6elka1703 Посмотреть сообщение
Как правильно написать этот запрос
1. когда пишешь NAME= не надо указывать %, они не для этого
2. запрос это просто текст, что бы получить результат - запрос надо выполнить
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
28.03.2018, 17:46  [ТС]
qwertehok, сделал так но выскакивает ошибка
[DELPHI]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
ADOQuery3.SQL.Clear;
id:=ADOQuery3.SQL.Add('select id_customer from Customers where name=''''''+'''+sedit3.text+'''+''''''');
ADOQuery3.ExecSQL;
 
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.Add('INSERT INTO buy(id_customer,data_buy, id_session,cost_all_tickets, number_buy_tickets)');
ADOQuery3.SQL.Add('values(:newF,:newW,:newL,:newm,:newk)');
ADOQuery3.Parameters.ParamByName('newF').Value:=id;
ADOQuery3.Parameters.ParamByName('newW').Value:=DateToStr(Date);
ADOQuery3.Parameters.ParamByName('newL').Value:=sDBGrid2.DataSource.DataSet.Fields[3].asString;
ADOQuery3.Parameters.ParamByName('newm').Value:=StrToInt(sEdit4.Text);
ADOQuery3.Parameters.ParamByName('newk').Value:=StrToInt(sEdit4.Text);
ADOQuery3.ExecSQL;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2018, 17:46

Добавление новых записей невозможно, ключ связи таблицы не входит в набор записей
Не могу добавить данные в поля, выводит такое сообщение: Добавление новых записей невозможно,ключ связи таблицы ЧЕК не входит не входит в...

Формы: добавление новых записей и удаление записей
у меня следующая форма (приложение) добавила кнопки добавление новых записей, удаление записей, вроде работает, нужно ли для них писать...

Удаление всех записей из DataGridView и добавление записей
Всем доброго времени суток. Столкнулся со следующей проблемой: написал код на удаление строк DataGridView. Строки удаляет но не все, а...

простая база с одним полем (оно же ключ), но много записей. как максимально быстро организовать проверку и добавление пакета новых записей?
есть простейшая БД (с одним полем), состоящая из уникальных строковых ключей, типа: SDPT234ddfs4545FFqsdfs TXB2ZQ5d ...

Добавление записей
Здравствуйте, пытаюсь добавить строчку, но постоянно выдает ошибку Required field(s) is missing" в файле db_config находится...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru