|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.12.2019, 14:07 | #1 |
Новичок
Джуниор
Регистрация: 17.05.2014
Сообщений: 3
|
Добавление записи в БД (Access) без кнопки
Всем привет. Делаю коннект с БД через компоненты ADO. На форме есть ADOtable, ADOconnection, DataSource. Таблицу из БД вывожу на DBGrid. Изначально для добавления/удаления записей добавил DBNavigator, но теперь хочется реализовать добавление новой записи без нажатия кнопки, т.е. вводишь в поле какую-либо запись (в самом dbgrid), нажал допустим enter или переключился на новое поле и запись добавилась в БД. http://prntscr.com/qb24rc
|
15.12.2019, 14:26 | #2 |
Новичок
Джуниор
Регистрация: 17.05.2014
Сообщений: 3
|
ПРобовал создавать событие AfterInsert у ADOTable и добавлять код adotable1.insert; Но работает странно. Добавил запись в dbgrid, нажал enter, в таком случае ничего не сохранится. Если после нажатия на enter я переключусь на какое-либо другое поле, то запись сохраняется
|
16.12.2019, 00:21 | #3 |
Участник клуба
Регистрация: 10.08.2010
Сообщений: 1,389
|
Код покажите
E_MAIL: rijgvina7@yahoo.com
|
16.12.2019, 21:25 | #4 |
Новичок
Джуниор
Регистрация: 17.05.2014
Сообщений: 3
|
Сейчас вообще убрал все обработчики событий и добавление в БД работает точно таким же образом, что я описал выше. Т.е. оно и без кода работает, но не совсем тем образом, как мне надо. Т.е. сохранение в БД происходит только после того, как я в Dbgrid заполню поле и после кликну на любое другое поле. Если на другое поле не кликнуть и просто заполнить данные, то они не сохранятся
Последний раз редактировалось theMaZaReX; 16.12.2019 в 21:57. |
27.12.2019, 09:46 | #5 |
Форумчанин
Регистрация: 27.04.2012
Сообщений: 219
|
Если у Вас этой утилитой будет пользоваться более 1 человека - не рекомендую такой подход. (Ваш датасет(ADOTable) через Dbgrid открыт для редакции и выполняет POST автоматически? через AdoConnection1 производиться авто подтверждение транзакции). Если вашей утилитой при таком подходе будет пользоваться не 1 человек, могут начаться проблемы. Изменение, удаление, вставку сущностей в БД рекомендую прописывать руками с контролем транзакций. И вообще иной реализацией.
Ваша текущая проблема в режиме монопользователя следующая: вы пытаетесь вставить новую строку, и вынуждены вставать на последнюю строчку грида, нажать клавишу "вниз", заполнить хотя бы одно поле и далее кликнуть в другое поле из другой строки. После этого происходит POST, пока вы этого не сделаете, не будет подтверждения окончания ввода, не будет транзакции(подтверждения). А значит и данные не сохранятся. Решение: Вы должны обозначить окончание заполнение когда Вам это нужно. Например отловить нажатие Enter в событии OnKeyUP и подтвердить окончание заполнения/редакции. Например: ADOTable.Post. Иными словами, Вы должны обозначить событие после которого необходимо выполнить сохранение. Будь это нажатие на Enter, отслеживание хлопока в ладошки через микрофон, нажатие комбинации клавиш. В общем, определитесь с событием которое будет инициировать подтверждение окончания заполнения - транзакцию - сохранение сущности в БД. Пример(без кода): Если Enter нажат уже в существующей строке и таблица не в режиме редактирования или вставки (ADOTable1.State in [dsEdit, dsInsert] = False ) - переводим ее в режим редакции - ADOTable.Edit иначе ADOTabl.Post. Если пользователь нажал Ctrl + Enter переводим таблицу в режим вставки ADOTable.insert В примере автотранзакция может быть включена или выключена. Разница для выключенной автотранзакции - после метода ADOTable.Post выполняется ADOConnection1.CommitTrans. При таком подходе, в случае ошибки, транзакции можно отменять , указывать пользователю на его ошибки и.т.д. Утилита становится более правильной для мультипользования. И вы перед применением или в случаях ошибки транзакции всегда сможете отследить, не навводил ли вам юзер бреда в поля и не занята ли эта сущность другим пользователем. Это оооооОООчень абстрактный пример. Вообще Dbgrid используется строго для отображения данных, для управления данными/сущностями пишется свой интерфейс программы(не путать с интерфейсами среды разработки), в котором через формы и SQL реализуется управление. P;S: Это если по простому и без кучи терминов. Сущность - это грубо запись/строка в таблице.
Пишу много и развернуто
Последний раз редактировалось Heneken87; 27.12.2019 в 10:37. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Добавление записи в таблицу из формы (MS Access) | Mihanches | Microsoft Office Access | 7 | 09.05.2017 23:21 |
Добавление записи из одного DBGrid в другой DBGrid c помощью кнопки, а также удаление записи | Evgen7 | БД в Delphi | 20 | 16.02.2014 17:05 |
Access 2010 форма на добавление записи | DSFIN | Помощь студентам | 0 | 13.06.2012 19:24 |
Добавление записи в бд access | Elementig | Помощь студентам | 1 | 07.04.2011 16:51 |
Добавление записи через список в связанную таблицу(при связи с Access) | megaten | БД в Delphi | 5 | 17.05.2009 15:57 |