Vvmebel.com

Новости с мира ПК
13 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Access обновить форму

Обновление данных в формах и элементах управления

Последняя группа макрокоманд в рассматриваемой категории связана с обновлением данных в активных формах, таблицах и запросах. Если несколько человек в сети одновременно изменяют данные, то формы и таблицы у конкретного пользователя могут не отражать актуальных данных. Для того чтобы отображаемые данные соответствовали текущему состоянию базы данных, их необходимо обновить с помощью команды Записи, Обновить (Record, Refresh) (см. разд.Работа с записями гл. 2).

Похожая ситуация возникает даже в однопользовательском режиме, если в форме используется поле со списком, источником данных для которого является таблица или запрос. Если в исходную таблицу были добавлены записи, то в поле со списком они автоматически не появятся — нужно повторно выполнить запрос. Кроме полей со списком, к элементам управления, требующим обновления отображаемых данных, относятся также списки и элементы управления подчиненной формы, объекты OLE и вычисляемые элементы управления, содержащие статистические функции по подмножеству записей, такие как DLookUp () или DSum ().

Для того чтобы выполнить обновление записей в формах, таблицах или элементах управления, используются макрокоманды Обновление(Requery), ПоказатьВсеЗаписи(ShowAllRecords) И ОбновитьОбъект(RepaintObject).

Макрокоманда Обновление (Requery) обновляет данные в объекте базы данных путем повторного просмотра источника данных. Макрокоманда имеет один аргумент, содержащий имя объекта, который следует обновить. Если обновляется активный объект, например форма, то поле аргумента следует оставить пустым. При этом макрокоманда будет повторно выполнять запрос, указанный в свойстве Источник данных (RecordSource) этой формы.

Рассмотрим пример использования макроса для обновления данных. В форме «Клиенты» (Customers) есть поле со списком «Страна» (Country). Источником данных для этого поля является запрос, который выбирает значения из поля «Страна» (Country) таблицы «Клиенты» (Customers):

Если при вводе клиента в таблицу добавляется новое название страны, то в списке эта страна не появится, поскольку запрос будет выполнен повторно только при следующем открытии формы. Чтобы провести обновление списка стран раньше, следует назначить событию После обновления (After Update) формы макрос Клиенты.Обновление списка стран, который состоит из одной макрокоманды Обновление (Requery) со значением аргумента «Страна» (Country) (рис. 11.18).

Рис. 11.18. Назначение макроса событию формы После обновления

Замечание

Макрокоманда Обновление (Requery) обновляет только один объект, поэтому если в форме существуют элементы управления, требующие обновления отображаемых данных, и в макросе, назначенном этой форме, используется макрокоманда Обновление (Requery) с пустым значением аргумента, то обновляться будут только записи в форме. Для каждого такого элемента управления нужно использовать отдельную макрокоманду. Если эта макрокоманда в качестве аргумента содержит имя элемента управления, то при ее выполнении обновляется только данный элемент. Записи в самой форме не обновляются.

С помощью макрокоманды Обновление (Requery) можно обновлять данные и в неактивной форме, точнее, не в той форме, которой назначен макрос. Однако в этом случае сначала необходимо выполнить макрокоманду ВыделитьОбъект(SelectObject), которая перенесет фокус на нужную форму, чтобы ее активизировать (потом фокус можно вернуть обратно).

Макрокоманда ПоказатьВсеЗаписи (ShowAllRecords), как уже отмечалось, отменяет действие фильтра и повторно просматривает источник записей. Ее часто используют для обновления данных в подчиненной форме.

Макрокоманда ОбновитьОбъект (RepaintObject) применяется только к объекту базы данных (к таблице, запросу, форме, отчету, странице, макросу и модулю) и не применяется к элементу управления. Она выполняет немедленное обновление указанного открытого объекта (если имя объекта не задано, обновляется активный объект), хотя при этом не производится повторное выполнение запроса к источнику данных. Обновление объекта не влияет на. отображение новых и удаленных записей, как это происходит при выполнении макрокоманды Обновление (Requery). Обычно макрокоманду ОбновитьОбъект (RepaintObject) применяют для отображения результатов изменения данных с помощью макрокоманд ЗадатьЗначение (SetValue), а также для повторного вычисления значений выражений в вычисляемых элементах управления.

Access обновить форму

Не использовать VBA, тоже самое, что писать сайт на html.

На событие после обновления поля Стадия пишем обработчик события. В нем:

Я бы так в нормально проекте не делал. Гораздо красивее на подчиненной форме объявить событие. И обработать его, на главной форме. Но раз вы VBA учить не хотите.

Профиль
Группа: Участник
Сообщений: 9
Регистрация: 20.5.2008

Репутация: нет
Всего: нет

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21

Профиль
Группа: Участник
Сообщений: 9
Регистрация: 20.5.2008

Репутация: нет
Всего: нет

Спасибо, но не работает.

Друзья! Я упрощаю задачу до примитивности!
Во вложении — база без мусора. В ней таблица «Table1», в которой одно из полей — типа списка — «list». Также имеется форма — «Form1», в ней еще две формы — «подчиненная форма eklmn_query» и «подчиненная форма eprst_query». Данные подчиненные формы черпают данные из запросов: «eklmn_query» и «eprst_query», соответственно. Запросы представляют собой ни что инное, как фильтры по значению поля «list».

Итак собственно задача формулируется сл.обр.: нужно примитивно, с помощью макросов (безо всякого ВБА) реализовать сохранение в таблице выбранного в имеющейся записи в поле «list» в форме «Form1» нового значения и обновление формы с выполнением вышеуказанных запросов.

А теперь собственно проблема: я определяю макрос «save_and_update», состоящий из двух макрокоманд — «Сохранить» и «Обновление»; назначаю его событию «Внесены изменения» каждой из двух вышеуказанных подчиненных форм. Получаю такой вот результат — дуля с маком!

Собственно месидж (вопрос) к спецам по Акцессу: это глюк Акцессовского обновления или я что-то не так делаю?

Присоединённый файл ( Кол-во скачиваний: 8 )
autoupdate.rar 43,38 Kb

12.5 Работа с формами Access из VBA (объект Form )

Объект Access.Form, работа с формами Access средствами VBA, открытие формы Access, работа с элементами управления на форме Access

Один из важнейших элементов Access, который широко используется в приложениях — это формы. Формы Access предназначены для того же, для чего и обычные формы VBA — это прежде всего контейнеры для графических элементов управления. Но устройство форм Access, их функциональные возможности, приемы работы с ними и даже наборы элементов управления, которые на них можно размещать, сильно отличаются от привычных нам форм VBA, которые можно использовать в Word и Excel.

Формы Access используются:

  • Для редактирования записей в таблицах базы данных Access и внешних источников данных. Для того, чтобы создать такие формы, вообще не нужно никакого программирования — достаточно создать форму в режиме конструктора или воспользоваться мастером создания форм. Подключиться к внешнему источнику данных (например, базе данных SQL Server или Oracle) можно, воспользовавшись в Access меню Файл ->Внешние данные ->Связь с таблицами.
  • Как панели управления вашего приложения. Очень часто в приложении на основе Access создается начальная форма, которая открывается при запуске этого приложения. На этой формы предусмотрены кнопки и другие элементы управления для вызова других форм, отчетов, макросов, выхода из приложения и выполнения прочих операций. После закрытия других форм управления опять передается начальной форме.
  • Просто для предоставления пользователю возможности выполнения любых действий. Например, форму можно использовать для выбора пользователем параметров отчета, выгрузки данных во внешнее приложение (например, Excel) и т.п.
Читать еще:  Access не равно

Как работать с формами Access из VBA?

Первое, что необходимо сказать — для работы с формами во многих ситуациях нам придется использовать общий объект AccessObject, который представляет в Access не только формы, но и таблицы, макросы, модули, отчеты и множество других элементов. Поскольку этот объект — универсальный, то, конечно, большой помощи от Intellisense — подсказки в редакторе VBA у нас не будет. Обратиться к объекту формы можно через коллекцию AllForms, которая доступна через объекты CodeProject и CurrentProject. Например, получить информацию о всех формах в базе данных Access можно так:

Dim oA As AccessObject

For Each oA In CurrentProject.AllForms

Если вы будете обращаться к формам в коллекции AllForms по индексу, обратите внимание, что нумерация форм в этой коллекции начинается с 0. Обращаться к элементам в этой коллекции можно и по имени:

Специальное свойство IsLoaded определяет, открыта ли эта форма (то есть загружена ли она в оперативную память).

Программным образом формы можно найти и другим способом. Все открытые формы Access автоматически помещаются в коллекцию Application.Forms и представляются в виде объекта Form. Это — уже нормальный объект, свойства которого соответствуют свойствам формы, доступным через графический интерфейс. Например, если форма Форма1 открыта, получить информацию о ее ширине можно так:

Debug.Print Application.Forms(«Форма 1»).Width

Это свойство можно использовать и для изменения ширины формы, но для этой цели рекомендуется использовать метод DoCmd.MoveSize(), который изменяет размеры активного объекта (например, нашей формы, если она активна):

DoCmd.MoveSize Width :=10000

Еще одна возможность: если вы работаете с кодом самой формы или ее элементов управления (например, события Click кнопки, которая расположена на форме), то обратиться к объекту самой этой формы можно совсем просто. Для этого используется ключевое слово Form.

Как можно открыть форму?

Первое, что нужно сказать — если в Word или Excel нам обязательно потребуется открыть форму программным способом, то в Access это совсем необязательно. Можно открыть форму и вручную из окна базы данных (см. рис. 12.1). Из этого же окна обычно производится создание новых форм или изменение существующих.

Рис. 12.1 Окно для работы с формами в Access

Еще один часто используемый способ — просто запускать форму при открытии базы данных Access. Для этого в меню Сервис нужно выбрать Параметры запуска и выбрать нужную форму в списке Вывод формы/страницы. Если при этом вы уберете все остальные флажки, то приложение при открытии приложение может выглядеть так, как показано на рис. 12.2:

Рис. 12.2 Все лишние возможности Access спрятаны от пользователя

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

Если все-таки нужно открыть форму программным способом (например, из другой формы), то для этой цели можно использовать метод DoCmd.OpenForm(). В самом простом варианте этот метод просто принимает параметр с именем формы:

Если же форма уже открыта, то этот метод, конечно, не открывает форму заново, а просто активизирует ее. Метод DoCmd.OpenForm() принимает также несколько необязательных параметров, при помощи которых вы можете настроить фильтр на отображение записей в форме, режим открытия формы (например, модальность) и т.п. Закрытие формы производится при помощи метода DoCmd.Close(). Если же вам нужно просто спрятать форму, чтобы сохранить введенные на ней пользователем значения и отобразить их при следующем показе, можно просто сделать форму невидимой, назначив ее свойству Visible значение False.

Форма нам обычно нужна не сама по себе, а как контейнер для расположенных на ней элементов управления. Обычно элементы управления программным способом создавать не требуется — намного проще и удобнее поместить их на форму в режиме конструктора для формы. В наборе элементов управления для формы предусмотрены как знакомые нам элементы управления — текстовые поля, надписи, кнопки, флажки и переключатели, так и новые элементы — свободная и присоединенная рамки объектов, разрывы страниц, подчиненные формы/отчеты и т.п. В верхнем правом углу Toolbox в конструкторе формы Microsoft Access находится специальная кнопка Мастера. Если она нажата, то добавление на форму привычных элементов управления (например, кнопки) приведет к появлению окна мастера, который попытается помочь вам автоматически сгенерировать нужный код VBA для этого элемента управления (см. рис. 12.3)

Рис. 12.3 Мастер создания кнопок

Можно использовать генерируемый мастером код как заменитель макрорекордера (которого в Access нет), чтобы понять, как можно выполнить те или иные действия.

Для чего используются нестандартные (по отношению к обычным формам VBA) элементы управления:

  • Свободная рамка объекта — возможность разместить на форме OLE-объект (например, документ Word, лист Excel, презентация PowerPoint, рисунок, звукозапись или видеоклип), который может быть встроен в базу данных Access (но не помещен в таблицу!) или находиться во внешнем по отношению к базе данных Access файлу.
  • Присоединенная рамка объекта — то же самое, за исключением того, что он применяется для работы с объектами OLE, которые хранятся в таблицах внутри баз данных Access или внешнего источника данных. Это — самый удобный способ генерации отчетов в Word.

Например, предположим, что в нашей базе данных Access находится таблица с тремя столбцами, как показано на рис. 12.4.

Рис. 12.4 Таблица для хранения шаблонов Word

В столбце File у нас хранятся шаблоны Word, которые используются для генерации отчетов. Мы помещаем на форму элемент управления Присоединенная рамка объекта с именем WordTemplate. После этого все, что нужно для создания файла Word на основе шаблона из базы данных, у нас уже есть. Для кнопки, по нажатию на которой будет формироваться отчет, можно использовать следующий код:

‘Получаем ссылку oFrame на объект присоединенной рамки на форме

Dim oFrame As BoundObjectFrame

Set oFrame = oForm.Controls(«WordTemplate»)

‘При помощи метода DLookup () скачиваем в него значение столбца File из таблицы

‘Templates, где номер строки (значение столбца Num ) равно 1

oFrame = Application.DLookup(«[File]», «Templates», «[Num] = 1»)

‘Открываем объект в отдельном окне приложения — то есть создаем

‘документ Word на основе шаблон, загруженного в рамку объекта на форме

‘Активизируем объект приложения

‘Получаем ссылку на Word в переменную oWord

Читать еще:  Access sql функции

Dim oWord As Word.Application

Set oWord = GetObject(, «Word.Application»)

‘Получаем ссылку на созданный нами документ

Dim oDoc As Word.Document

Set oDoc = oWord.ActiveDocument

‘Дальше работаем средствами Word, например, вставляем нужный текст

‘в места, отмеченные закладками

Конечно же, правильнее будет при этом сделать эту присоединенную рамку объекта на форме изначально невидимой — чтобы пользователь не мог этот объект активизировать по собственной инициативе.

  • Элемент управления Разрыв страницы — определяет начало нового экрана формы.
  • Подчиненная форма/отчет — используется для размещения на форме подчиненных форм, таблиц или отчетов.

Как уже говорилось, программным способом элементы управления в форме Access приходится создавать редко. Если на форме вам нужен переменный набор элементов управления, то правильнее будет с самого начала создать все нужные элементы управления и по необходимости делать их то видимыми, то невидимыми. Тем не менее создать программным способом элементы управления на форме тоже можно. Эта операция выполняется при помощи метода Application.CreateControl(), который принимает множество параметров — имя формы, на которой создается элемент управления, тип элемента управления, его месторасположение на форме и т.п.

Обращение к значениям элементов управления на форме производится через коллекцию Controls, которая умеет работать с именами элементов управления:

Access обновить подчиненную форму

Макрокоманда Обновление для баз данных Access позволяет обновлять данные в указанном элементе управления активного объекта путем отправки запроса к его источнику. Если элемент управления не указан, макрокоманда отправляет запрос к источнику самого объекта. С помощью этой макрокоманды можно обеспечить отображение актуальных данных в активном объекте или элементе управления.

Настройка

Макрокоманда Обновление имеет следующие аргументы:

Имя элемента управления, который требуется обновить. Имя вводится в окне конструктора макросов в поле Имя элемента. Следует указать только имя элемента, а не полный идентификатор (такой как Forms! ИмяФормы! ИмяЭлемента). Чтобы отправить повторный запрос к источнику данных активного объекта, оставьте это поле пустым. Если активным объектом является таблица или результирующий набор, значение этого аргумента нужно оставить пустым.

Примечания

Макрокоманда Обновление выполняет одно из следующих действий:

Повторно выполняет запрос, на котором основан элемент управления или объект.

Отображает добавление, изменение и удаление записей в таблице, на которой основан элемент управления или объект.

Примечание: Выполнение макрокоманды Обновление не влияет на положение указателя записей.

К элементам управления, основанным на запросе или таблице, относятся:

списки и поля со списком;

элементы управления подчиненной формы;

объекты OLE, например диаграммы;

элементы управления с агрегатными функциями домена, например БД СУММ.

Если указанный элемент управления не основан на запросе или таблице, данная макрокоманда выполняет принудительный пересчет этого элемента управления.

Если поле Имя элемента не заполнено, выполнение макрокоманды Обновление имеет тот же эффект, что и нажатие клавиш SHIFT+F9 при установленном на объекте фокусе. Если фокус находится на элементе управления подчиненной формы, макрокоманда отправляет повторный запрос только к источнику данных этой подчиненной формы (как при нажатии клавиш SHIFT+F9).

Примечание: Макрокоманда Обновление отправляет запрос к источнику элемента управления или объекта. С другой стороны, макрокоманда ОбновитьОбъект обновляет элементы управления в указанном объекте, но не отправляет повторный запрос к базе данных и не отображает новые записи. Макрокоманда ПоказатьВсеЗаписи не только отправляет повторный запрос для активного объекта, но также удаляет все примененные фильтры, чего не делает макрокоманда Обновление.

Метод Requery обновляет базовые данные указанной подчиненной формы, перезапрашивая источник данных для подчиненной формы. The Requery method updates the data underlying a specified subform by requerying the source of data for the subform.

Синтаксис Syntax

Expression. Повторный запрос expression.Requery

Expression (выражение ) Переменная, представляющая объект подчиненНой формы . expression A variable that represents a SubForm object.

Примечания Remarks

Этот метод можно использовать для того, чтобы форма или элемент управления отображали самые последние данные. You can use this method to ensure that a form or control displays the most recent data.

Метод Requery выполняет одно из следующих действий: The Requery method does one of the following:

  • Повторно выполняет запрос, на котором основана форма или элемент управления. Reruns the query on which the form or control is based.
  • Отображает новые или измененные записи или удаляет удаленные записи из таблицы, на которой основана форма или элемент управления. Displays any new or changed records or removes deleted records from the table on which the form or control is based.
  • Обновляет записи в соответствии с изменениями свойства Filter формы. Updates records displayed based on any changes to the Filter property of the form.

Элементы управления, основанные на запросе или таблице, включают: Controls based on a query or table include:

  • Списки и поля со списками. List boxes and combo boxes.
  • Элементы управления подчиненной формы. Subform controls.
  • Объекты OLE, например диаграммы. OLE objects, such as charts.
  • Элементы управления, для которых Настройка свойства ControlSource включает статистические функции по подмножеству или статистические функции SQL. Controls for which the ControlSource property setting includes domain aggregate functions or SQL aggregate functions.

Если указать любой другой тип элемента управления для объекта, указанного выражением __, будет повторно запрошен источник записей для формы. If you specify any other type of control for the object specified by expression, the record source for the form is requeried.

Если объект, указанный в выражении , не связан с полем в таблице или запросе, метод recalculation вызывает перерасчет элемента управления. If the object specified by expression isn’t bound to a field in a table or query, the Requery method forces a recalculation of the control.

Если опустить объект, указанный выражением __, метод requeries повторно запрашивает базовый источник данных для формы или элемента управления, имеющего фокус. **** If you omit the object specified by expression, the Requery method requeries the underlying data source for the form or control that has the focus. Если элемент управления, имеющий фокус, имеет источник записей или источник строк, он будет передаваться в запрос; в противном случае данные элемента управления будут просто обновлены. If the control that has the focus has a record source or row source, it will be requeried; otherwise, the control’s data will simply be refreshed.

Если фокус находится на элементе управления подчиненной формы, этот метод повторно запрашивает источник записи для подчиненной формы, а не для родительской формы. If a subform control has the focus, this method only requeries the record source for the subform, not the parent form.

  • Метод Requery обновляет данные, содержащиеся в форме или элементе управления, чтобы отобразить записи, которые были обновлены или удалены из источника записей с момента последнего запроса. The Requery method updates the data underlying a form or control to reflect records that are new to or deleted from the record source since it was last queried. Метод Refresh показывает только изменения, внесенные в текущий набор записей; Он не отражает новые или удаленные записи в источнике записей. The Refresh method shows only changes that have been made to the current set of records; it doesn’t reflect new or deleted records in the record source. Метод repain просто перерисовывает указанную форму и ее элементы управления. The Repaint method simply repaints the specified form and its controls.
  • Метод Requery не передает управление операционной системе, позволяя Windows продолжить обработку сообщений. The Requery method doesn’t pass control to the operating system to allow Windows to continue processing messages. Используйте функцию DoEvents , если необходимо переделать временное управление операционной системе. Use the DoEvents function if you need to relinquish temporary control to the operating system.
  • Метод Requery выполняется быстрее, чем действие Requery. The Requery method is faster than the Requery action. При использовании макрокоманды «обновление» Microsoft Access закрывает запрос и перезагружает его из базы данных. When you use the Requery action, Microsoft Access closes the query and reloads it from the database. При использовании метода Reload Access повторно выполнят запрос, не закрывая и не перегружая его. When you use the Requery method, Access reruns the query without closing and reloading it.
Читать еще:  Как поставить фон на презентацию powerpoint

Пример Example

В следующем примере используется метод Requery для запроса данных из списка Емплойилист в форме Employees. **** The following example uses the Requery method to requery the data from the EmployeeList list box on an Employees form.

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

348 просмотра

2 ответа

1 Репутация автора

У меня возникают проблемы при обновлении подчиненной формы после добавления записи в другой форме в Access 2007-2010. Кажется, это может быть очень просто, но я не уверен, где я терплю неудачу.

У меня есть три формы:

  • Тот, который является основной формой пользователя с именем main_user,
  • еще один, где пользователь создает требования к закупкам под названием tb_requirements
  • и еще один, связанный с tb_requirements, который называется tb_records.

Основная идея этой системы заключается в том, что пользователь создает общие требования к закупкам с вложениями в tb_requirements, а затем добавляет некоторые подробные требования в общую форму требований (tb_records).

Эта функция уже работает, но когда я пытаюсь обновить / вернуться к главному пользовательскому экрану (main_user) со всеми открытыми и новыми требованиями, она не работает. Основная форма пользователя использует подчиненную форму таблицы tb_requirements. Итак, в VBA main_user я написал следующий код:

Я также попытался с .Refresh и .Recalc и он не работает. Не могли бы вы помочь?

Ответы (2)

плюса

3018 Репутация автора

Активировать может быть то, что вам нужно. это как вернуть фокус (IIRC) на основную форму.

Другой подход заключается в открытии «вторичных» форм в диалоговом режиме. псевдокод:

Вы можете сделать это в 2 строки.

между 1 и 2 вы работаете в требованиях к покупке.

Автор: wazz Размещён: 17.05.2017 10:23

плюса

1 Репутация автора

Привет ребята! Я уже понял это. Чего мне не хватало, так это закрытия формы и таблицы после добавления новой записи.

После этого .Requery мог работать, в противном случае он оставался с теми же данными. Большое спасибо за ваше время и советы, очень ценю.

Обновление записей в таблице базы данных MS Access в Visual Basic

Одно из основных четырех действий над данными в БД (Select, Insert, Update и Delete) является модификация (Update, обновление) данных. Автор поставил задачу написать маленькую программу для обновления записей в таблице базы данных MS Access, но с большим удобством (гибкостью) управления программным кодом.

Рассматриваемая в данном примере программа имеет форму, сетку данных DataGridView, в которую из базы данных читается таблица при нажатии кнопки Читать из БД. Пользователь имеет возможность редактировать данные в этой таблице, после чего, нажав кнопку Сохранить в БД, данные в базе данных будут модифицированы, т. е. заменены новыми.

Для написания этой программы запускаем VB2010, заказываем новый проект New Project шаблона Windows Forms Application. Из панели Toolbox добавляем в форму элемент управления DataGridView и две командные кнопки. Программный код программы представлен ниже:

Обновление записей в таблице базы данных MS Access

[code]‘ Программа обновляет записи (Update) в таблице базы данных MS Access
Imports System.Data.OleDb
PublicClass Form1
Private DS As DataSet
Private DA As OleDb.OleDbDataAdapter
Private CO AsNew OleDb.OleDbConnection(«Data Source=»»C:vic.mdb»»;User ID=Admin;Provider=»»Microsoft.Jet.OLEDB.4.0″»;»)
Private CB As OleDb.OleDbCommandBuilder
‘ Dim COMMAND As OleDbCommand = New OleDbCommand или
Dim COMMAND = NewOleDbCommand
Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load
Button1.Text() =»Читать из БД»
Button2.Text() =»Сохранить в БД»
End Sub
Private Sub ЧИТАТЬ(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
‘ Читать из базы данных:
DS =New DataSet
If CO.State = ConnectionState.Closed Then CO.Open()
DA =New OleDb.OleDbDataAdapter(«Select * From (БД телефонов)», CO)
CB =New OleDb.OleDbCommandBuilder(DA)
DA.Fill(DS,»БД телефонов»)
DataGridView1.DataSource = DS.Tables(«БД телефонов»)
End Sub

Private Sub СОХРАНИТЬ(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button2.Click
‘ Сохранить в базе данных:
COMMAND.CommandText = «UPDATE (БД телефонов) SET (Номер телефона) = ?, ФИО = ? WHERE ((Номер п/п) = ?)»
‘ Имя, тип и длина параметра:
COMMAND.Parameters.Add(«Номер телефона»,OleDbType.VarWChar, 50,»Номер телефона»)
COMMAND.Parameters.Add(«ФИО»,OleDbType.VarWChar, 50,»ФИО»)
COMMAND.Parameters.Add(NewOleDbParameter(«Original_Номер_п_п»,
OleDbType.Integer, 0, System.Data.ParameterDirection.
Input,False, CType(0,Byte), CType(0,Byte), «Номер п/п»,
System.Data.DataRowVersion.Original,Nothing))
DA.UpdateCommand = COMMAND
COMMAND.Connection = CO
Try
‘ Update возврашает количество измененных строк:
Dim kol As Integer = DA.Update(DS, «БД телефонов»)
MessageBox.Show(«Обновлено » & kol & » записей»)
Catch ex AsException
MessageBox.Show(ex.Message,»Недоразумение»)
End Try
End Sub
EndClass[/code]

Вначале импортируем (Imports) пространство имен System.Data.OleDb, это обеспечит более короткие объявления объектов и манипулирования ими. Далее, как видно, мы имеем три процедуры обработки событий: загрузки формы, щелчок на кнопке Читать из БД и щелчок на кнопке Сохранить в БД. Чтобы объекты DataSet,DataAdapter, Connection, CommandBuilder и Command были видны в этих трех процедурах, объявляем эти объекты внешними внутри класса Form1.

При программировании чтения из базы данных на сетку DataGridView1 мы использовали объект CommandBuilder для демонстрации возможности чтения данных с помощью этого объекта, хотя могли бы организовать чтение из базы данных на сетку DataGridView1 так, как это было показано в предыдущих программах.

Ссылка на основную публикацию
Adblock
detector