Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 102

Вставка и редактирование записей таблицы

18.11.2019, 00:53. Показов 1997. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть таблица с полями id surname firstname lastname department
Поля Фамилия Имя Отчество - текстовые, берутся из dbediteh
Поле Отдел - числовое: добавляю в запрос для dbcomboboxeh1
Delphi
1
 ADOQuery1.Parameters.ParamByName(‘Department’).Value:=Integer(DBComboBoxEh1.Items.Objects[i]);
Но все равно в таблицу ничего не пишет в это поле.

Есть форма для редактирования, добавления записи с настроенными datasource и datafield
В обработчике нажатия button следующий код:
Delphi
1
If ADOQuey1.Modifed Then ADOQuery1.Post
Поля Фамилия, Имя, Отчество вставляются и изменяются без проблем
Вопрос: как добавлять/изменять поле Отдел (необходимо в поле писать ID этого отдела)?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.11.2019, 00:53
Ответы с готовыми решениями:

Редактирование записей из таблицы
Доброго времени суток, форумчане, возникла следующая проблема при написании приложения на MVC. В общем суть в том, чтобы отредактировать...

Редактирование записей таблицы SQL
Здравствуйте! В общем такая проблема не могу отредактировать записи в таблице, код написан правильно, ошибок нет, не могу понять в чём...

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

32
Модератор
 Аватар для D1973
9944 / 6479 / 2460
Регистрация: 21.01.2014
Сообщений: 27,461
Записей в блоге: 3
18.11.2019, 16:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от mosczar Посмотреть сообщение
скажи как правильно использовать
Говорю... Не надо никогда использовать компоненты DB... Хоть они Ех, хоть не Ех... Только стандартные компоненты, на основе их формировать SQL-запрос и его выполнять. Только так...
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 102
18.11.2019, 17:00  [ТС]
Почему? Если DB компоненты предоставляют возможность писать данные в базу без допкода
0
231 / 163 / 54
Регистрация: 26.10.2014
Сообщений: 928
18.11.2019, 17:09
mosczar, много получилось у тебя без доп кода?))
0
 Аватар для Мудрый Ижик
32 / 26 / 7
Регистрация: 18.10.2019
Сообщений: 187
18.11.2019, 17:09
Потому-что вы столкнетесь с проблемой совместимости версий, когда захотите перейти на более свежую версию Дельфи, потому-что нет никакой гарантии совместимости этих компонент с другими сторонними, а то и с родными. Потому-что решать проблему неправильной работы этого компонента вам придется самому, т.к. качать и захламлять свою IDE чем-то нафик не нужным, не каждый захочет. Есть еще масса почему, на которые вы еще не успели наступить.
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 102
18.11.2019, 17:44  [ТС]
С переходом на новую версию понятно. Кто то может по теме написать как записать is combobox в базу по нажатию на кнопку
0
Модератор
 Аватар для D1973
9944 / 6479 / 2460
Регистрация: 21.01.2014
Сообщений: 27,461
Записей в блоге: 3
19.11.2019, 04:57
Цитата Сообщение от mosczar Посмотреть сообщение
Кто то может по теме написать как записать
Вот кто бы знал еще, как там это у Вас все выглядит... У Вас айтемы комбобокса - это номера отделов? Тогда так...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
begin
  with ADOQuery1 do
    begin
      Close;
      SQL.Text := 'INSERT INTO My_Table(Surname, Name, Patr, Dep) VALUES(:p1, :p2, :p3, :p4)';
      Parameters.ParamByName('p1').Value := Edit1.Text;
      Parameters.ParamByName('p2').Value := Edit2.Text;
      Parameters.ParamByName('p3').Value := Edit3.Text;
      Parameters.ParamByName('p4').Value := ComboBox1.Items[ComboBox1.ItemIndex];
      ExecSQL;
    end;
end;
В таблицу My_Table добавляются фамилия, имя, отчество из Эдитов и номер отдела, выбранный в комбобокс...

Если же в КомбоБоксе отделы написаны нормальным человеческим языком, а их индексы соответствуют ID отделов в таблице БД, измените строку присвоения значения параметру р4 на такую
Delphi
1
Parameters.ParamByName('p4').Value := ComboBox1.ItemIndex;
Если же Вы вообще все по уму делали, в айтемы добавляли нормельное наименование, а ID привязывали к айтему методом AddObject - то сначала получите этот ID и присваивайте полученное значение параметру р4 запроса...
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 102
19.11.2019, 16:13  [ТС]
D1973, спасибо что подробно расписали, по поводу
Code
1
 то сначала получите этот ID
в этом то наверно проблема, у меня все данные изменяются/ добавляются кроме dbcomboboxeh
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
19.11.2019, 18:46
Вам тут толкуют-толкуют, а Вы всё упираетесь.
Delphi
1
ADOQuery1.Parameters.ParamByName(‘Department’).Value := DBComboBoxEh1.ItemIndex;
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 102
19.11.2019, 18:50  [ТС]
Интересует
Code
1
  в айтемы добавляли нормельное наименование, а ID привязывали к айтему методом AddObject - то сначала получите этот ID
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
19.11.2019, 19:17
Так должно забирать ID.
Delphi
1
ADOQuery1.Parameters.ParamByName(‘Department’).Value := Integer(DBComboBoxEh1.Items.Objects[DBComboBoxEh1.ItemIndex]);
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 102
19.11.2019, 19:51  [ТС]
Пишет parameters department not found

Добавлено через 20 минут
Если у меня одна форма для редактирования и для новой записи, мне необходимо при открытии формы добавлении писать?
Delphi
1
if ADOQuery.Insert then...
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
19.11.2019, 20:42
Delphi
1
ADOQuery1.Parameters.ParamByName('Department').Value := Integer(DBComboBoxEh1.Items.Objects[DBComboBoxEh1.ItemIndex]);
Я просто первую часть взял из Вашего первого поста, а там ковычки левые.
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
19.11.2019, 21:03
Вы просто заведите переменную в форме, которая будет отвечать за операцию примерно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
Q: TAdoQuery;
...
if frmEdit.EditMode 
then begin
       Q.SQL.Text := 'update AnyTable set AnyField=:AnyField where ID=:ID'
       Q.Parameters.ParamValues['AnyField']  := frmEdit.Edit1.Text;
       Q.Parameters.ParamValues['ID']  := AdoQuery['ID'];
       end
else  begin
       Q.SQL.Text := 'insert AnyTable (AnyField) values(:AnyField)'
       Q.Parameters.ParamValues['AnyField']  := frmEdit.Edit1.Text;
       end;
Q.ExecSQL;
ну а если
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2019, 21:03

Вставка фиксированных записей одной таблицы в другую
Помогите, пожалуйста! Суть проблемы такова: Есть таблица_1 в которой поля: Фамилия, Имя, Отчество, номер_удостоверения(Primary_key) и...

Вставка записей в две таблицы с дублированием Key_field
Есть две таблицы, связанных ключевым полем Key_field (datatype: autoincrement counter). Есть внешний файл, из которого происходит импорт...

Вставка всех записей одного столбца из одной таблицы в другую
Есть 2 таблицы Таблица 1. Поле ID. Поле значение. Таблица 2. Поле_1 Поле_2

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

Вывод числа записей одной таблицы для соответствующих записей другой
Доброго времени суток. Возможно, я не правильно сформулировал заголовок, но как по другому это назвать, я не знаю. Гугл ответ не дал,...


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru