|
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
|
||||||
Как DataGridView синхронизировать с БД (dataGridView1 - Access)24.09.2018, 21:49. Показов 5202. Ответов 3
Проект находится в папке: c:\test\csharp\vs\prb\308\pr\rsh\GridAcc ess.sln
База данных находится в папке: c:\test\csharp\vs\prb\308\pr\rsh\db_Grid VAccess.accdb dataGridView1 размещаю на форме; dataGridView1. Меню "Выберите источник данных"; dataGridView1. Меню "Добавить источник данных проекта"; При подключении на вопрос "Копировать файл в проект и изменить подключение?" отвечаю "да" (см. скрин.) Делаю кнопку "save".
Запускаю приложение. Образуется две базы данных ..\rsh\rsh\db_GridVAccess.accdb ..\rsh\bin\Debug\db_GridVAccess.accdb Отрывается окно с таблицей. Вношу изменения. Нажимаю "сохранить" ("save") - Открываю базу данных (в Access) ..\rsh\bin\Debug\db_GridVAccess.accdb изменения сохранились - Открываю базу данных (в Access) ..\rsh\rsh\db_GridVAccess.accdb изменения не сохранились Закрываю приложение - Открываю базу данных(в Access) ..\rsh\bin\Debug\db_GridVAccess.accdb изменения сохранились - Открываю базу данных ..\rsh\rsh\db_GridVAccess.accdb изменения не сохранились Запускаю приложение Открывается таблица без изменений внесённых в предыдущем сеансе. Вопросы 1. Как сделать чтобы изменения внесённые в "dataGridView1" сохранялись в БД? 2. Есть ли способы подключения "dataGridView1", чтобы автоматически формировалась синхронизация с базой данных, а не требовалось создавать отдельную кнопку? 3. Где можно изменить путь к файлу базы данных? Я хотел бы сделать чтобы пользователь в окне прописал путь к базе данных и приложение работало с этой базой данных.
0
|
||||||
| 24.09.2018, 21:49 | |
|
Ответы с готовыми решениями:
3
Как из Excel синхронизировать базу Access Как занести данные с DataGridView в Access |
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
||
| 26.09.2018, 06:46 | ||
Сообщение было отмечено Soft17 как решение
РешениеЯ вам рекомендую не использовать мастеры Visual Studio, а делать всё вручную. Это сохранит за вами полный контроль за происходящим и сделает весь процесс работы с базой и контролом полностью прозрачным для вас. У контрола DataGridView (как и у всех остальных контролов в WinForms) есть свойство DataSource, в которое можно передать объект коллекции разных типов (BindingSource, BindingList, DataTable, DataSet, IEnumerable, IList). Используя рефлексию, DGV вытащит данные и визуализирует их. Источник этих данных роли не играет (контролу всё равно откуда и как вы данные получили).Так же, в зависимости от типа объекта переданного в DataSource, DGV может и редактировать (изменять, добавлять) строки. Я вам предлагаю вытащить данные из базы вручную (OleDbConnection, OleDbCommand) в удобном для работы виде (DataTable или типизированную коллекцию) и запихать в DGV. Когда придёт время сохранять данные, вы просто пройдётесь по коллекции и записи с ненулевым ID обновите, а остальные добавите. Если данных очень много и предусмотрена возможность удаления, то удобнее будет использовать DataTable, так как там отслеживается состояние строк.
1
|
||
|
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
|
|||||||
| 26.09.2018, 09:48 [ТС] | |||||||
|
Кликните здесь для просмотра всего текста
1. Если я правильно понял кнопка "button2" выполняет отправку нового "DataTable" в исходную таблицу базы данных. Т.е. отправляет: изменение значений ячейки, удаление записи, добавление записи. В выше при ведённом коде я не использую "BindingSource". Вопрос 1: Как сделать обновление исходной таблицы базы данных если использовать "BindingSource"? Я пытался разобраться, но что-то не работает. 2. С вопросом синхронизации типа: "dataGridView1"(1.изменили) -> БД.Таблица(2.обновили), более-менее понятно. А как быть, если изменения происходят в БД.Таблица. Т.е. схема: "dataGridView1"(2.обновили) <- БД.Таблица(1.изменили) Например: - БД.Таблица имеет большой размер - изменения внесены не из приложения где находится "dataGridView1"(приложение_1), а из другого приложения(приложение_2). или - изменения внесены из приложения где находится "dataGridView1"(приложение_1) из другой формы(приложение_1). Как в "dataGridView1" ("приложение_1") обновить только изменённые данные, а не выполнять заново подключение к БД.Таблица, что может занять некоторое время? Вопросы: 2. Как в "dataGridView1" обновить данные только те, которые были изменены в БД.Таблица? 3. Какие дополнительные решение вы бы порекомендовали изучить по данному вопросу? Подозреваю обновление данных в БД.Таблица должна отслеживать сама БД, а приложение должно эти данные забирать.
0
|
|||||||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
|
|||
| 26.09.2018, 10:09 | |||
Сообщение было отмечено Soft17 как решение
Решение![]() СУБД не умеют извещать клиентов о изменении данных. И "хуков" тоже не навешать на базу. Вроде бы у Oracle есть какой-то такой механизм, но это не ваш случай. Правильных решений тут два: А) работать с СУБД не напрямую, а через собственноручно написанный сервер, который такие вещи (запросы на обновление от клиентов) будет отслеживать. Как вы извещения реализуете уже будет зависеть от вашей фантазии. Б) пулить (Pull) таблицу в базе. Т.е. периодически опрашивать на наличие изменений. Это может быть сильно затратно. Поэтому в базе можно завести триггер или иной механизм, который при изменении данных в таблице может выставлять где-то метку (в другой таблице). Я рекомендую внимательно изучить само требование содержания DGV в синхронном состоянии с таблицей в базе. Практической пользы от такой вещи очень мало, а сложностей много. Действительно ли это нужно?
1
|
|||
| 26.09.2018, 10:09 | |
|
Помогаю со студенческими работами здесь
4
Перенос строки из одной dataGridView в другой dataGridView с Access Как заполнить DataGridView данными из таблицы MC Access Как удалить строку из БД Access через DataGridView? Как добавить определённые строки в datagridview из Access? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
|