Vvmebel.com

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

Access vba добавить запись в таблицу

Добавление записей в таблицу без использования встроенного запроса в VBA/Access

Я совершенно не знаком с VBA. Мне сказали добавить записи в таблицу, используя форму и кнопку «Сохранить» и получили некоторые очень простые инструкции. Хотя я достиг этого с помощью встроенного запроса, мне сказали следовать некоторым строгим методам, таким как использование QueryDef/QueryDefs и.Parameters.

До сих пор я пытаюсь создать очень простой проект, чтобы понять концепции, но я не могу добавить запись в пустую таблицу. Если таблица не пуста (я вручную вношу запись), всякий раз, когда я нажимаю кнопку «Сохранить» для сохранения новых записей, количество добавленных записей как-то удваивается с каждым экземпляром. Например, когда я сохраняю в первый раз, добавляется 1 запись, добавляются 2 раза 2 записи одного типа, добавляются 3 раза 4 и так далее.

Таблица (tbl_test) имеет 2 поля → ID(primary key), Source(Long Text) and Reg No (Number). реестра ID(primary key), Source(Long Text) and Reg No (Number).

Запрос (qry_test) выполняется с помощью функции добавления, и мне сказали добавить выражения, которые делают этот код таким:

Форма имеет 2 поля для Source (txt_Source) и Reg No (txt_RegNo), которые имеют пустые источники записи (Unbound). Кнопка «Сохранить» имеет следующую процедуру:

У меня нет знаний о VBA и с радостью принимаю ЛЮБОЙ помощи. Было бы здорово, если бы я получил какой-то исходный код, который объяснит все подробности о сохранении записей из форм и их редактировании, используя данные querydef, parameter и recordset.

Добро пожаловать в StackOverflow!

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

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

Если я создаю форму ввода данных, которая предназначена для сбора новых данных для новых записей 1-в-время, запрос добавления не подходит для этой цели.

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

Первой и самой важной особенностью формы в этом контексте, вероятно, является свойство источника записи формы. Когда вы создаете новую форму, зайдите в конструкторское представление формы и откройте лист свойств формы (клавиша F4). На вкладке «Данные» листа свойств формы вы найдете свойство источника записи:

Источник записи по существу соединяет вашу форму с набором записей, будь то записи в объект таблицы, объект запроса или строка запроса sql.

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

Похоже, что ничего не случилось с вашей формой, но если теперь вы откроете панель «Добавить существующие поля» (alt + F8), вы заметите, что поля, связанные с вашей таблицей tbl_Test, доступны вам:

Перетащите их в подробный раздел вашей формы.

Затем введите свою форму в форму:

По сути, то, что вы и ваши пользователи видите, является первой пустой записью в вашем tbl_Test, но отображается на форме.

Ввод данных в эти поля в форме.

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

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

На этом этапе вы, вероятно, задаете несколько вопросов:

Когда я заполнил поля для записи в моей форме, как мне сохранить эту запись?

Об этом можно сказать больше, но для краткости я бы рекомендовал использовать командную кнопку для запуска некоторого vba для сохранения записи; аналогично тому, что вы сделали, но используя свойство Dirty вместо использования запроса append:

Здесь событие click VBA для моего примера кнопки сохранения:

Me.Dirty — это логическая (истинная или ложная) настройка для формы; по умолчанию автоматически изменяется значение True, когда пользователь меняет что-то в форме. Чтобы сохранить эти изменения, для параметра Me.Dirty должно быть установлено значение False.

Me.Dirty немного похож на качели на овечьей ручке. Когда пастух ставит овечку (данные) в ручку (форму), они откроют ворота пера. Открытые ворота похожи на форму Me.Dirty , устанавливаемую на True. Чтобы заблокировать овец (данные), ворота должны быть закрыты или в случае форм, для свойства Me.Dirty должно быть установлено значение False. VBA выше, по сути, проверяет, открыт ли ворота и если он должен закрыть его.

Как перейти к новой записи в форме после сохранения текущего?

Опять же, я бы дал пользователю кнопку команды для этого и запустил VBA в своем клик-событии:

Здесь VBA для перехода на новую запись:

Резюме

Существует гораздо больше возможностей, чем то, что я здесь изложил, например:

  • проверка данных до их сохранения
  • проверка других событий формы (например, закрытие), чтобы гарантировать, что ввод данных не потерян
  • переход на существующую запись

Но, надеюсь, то, что я вам дал, по крайней мере указывает на вас в лучшем направлении. Удачи!

VBA: Добавление/Удаление/Изменение/Обновление записей в таблицах Access

Добавление записи в таблицу Access
Пользователи А и Б вводят информацию о перемещениях товаров в форму. Фактическое добавление записи в таблицу Access возложено на макрос AddTransfег.
При добавлении записи в таблицу Access макрос AddTransf ег выполняет следующую последовательность действий.
1. Создание объекта соединения.
2. Создание объекта набора данных для обращения ктаблице tblTransfer.
3. Вызов метода AddNew для добавления новой записи в таблицу tblTransfer.
4. Установка значения каждого поля новой записи таблицы tblTrans f ег.
5. Вызов метода Update для внесения изменений в базу данных.
6. Закрытие объектов набора данных и соединения.
Ниже приведен код метода AddTransfег.

Читать еще:  Типы данных в ms access

Извлечение записей из таблицы Access
Чтобы извлечь записи из таблицы Access, определите набор данных, указав в качестве источника строку SQL-запроса, задающую требуемый критерий отбора. Скопировать записи из таблицы Access на рабочий лист Excel поможет метод Excel VBA CopyFromRecordset. Следующий макрос извлекает из таблицы tblTransfer все записи, в которых значение поля Отправлен равно False, и помещает их на рабочий лист. Строка f rmTransConf. Show выводит на экран пользовательскую форму, которая применяется для обновления записей и рассматривается в следующем разделе.

Метод CopyFromRecordset копирует на рабочий лист Excel только строки с данными, а строку заголовка необходимо создавать вручную. Результат выполнения макроса GetUnsentTransfers до отображения пользовательской формы показан на рис. 19.3.

Обновление записей таблицы Access
Чтобы обновить существующую запись таблицы Access, создайте набор данных, содержащий одну-единственную запись. Обычно для этого необходимо, чтобы пользователь выбрал требуемую запись (а значит и ее уникальный идентификатор — ключ) с помощью формы. Измените значение требуемого поля с помощью свойства Fields и внесите обновленную запись в базу данных с помощью метода Update. Рассмотренный ранее макрос GetUnsentTransfers помещает записи таблицы tblTransfer на рабочий лист, а затем выводит на экран пользовательскую форму frmTransConf. Метод инициализации формы User Form_Initialize загружает все записи с текущего рабочего листа в список, поддерживающий множественный выбор (значение свойства MultiSelect равно True):

Форма, показанная на рис. 19.4, отображает записи, соответствующие неотправленным товарам. Чтобы изменить значение поля Отправлен требуемых записей с Fa] se на True, выделите их и щелкните на кнопке Подтвердить.

Ниже приведен код, выполняющийся в результате щелчка на кнопке Подтвердить. Ключевым фрагментом этого кода является создание SQL-запроса, использующегося для отбора единственной записи таблицы tblTransfer с помощью поля Идентификатор.

Удаление записей таблицы Access
Чтобы удалить существующую запись таблицы Access, создайте SQL-код, удаляющий запись на основе значения ее уникального идентификатора. Установите соединение с базой данных и выполните SQL-код с помощью метода Execute, как показано ниже:

Access vba добавить запись в таблицу

Dim rstCurr As DAO.Recordset
Dim dbsCurr As Database

Set dbsCurr = Access.CurrentDb
Set rstCurr = dbsCurr.OpenRecordset(«Имя таблицы», dbOpenDynaset)

rstCurr.AddNew
rstCurr.Fields(«Имя поля«).Value = Time$
rstCurr.Update

Me!Поле1.SetFocus
rstCurr.Fields(«Имя поля«).Value = Me!Поле1.Text

Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Несколько не понимаю, что имеется ввиду под словом «окно» и про подчинённость.
Если нужно одновременное открытие какого-то количества форм, то можно сделать так:

Private Sub Form_Open(Cancel As Integer) ‘ Обработчик открытия одной из форм
DoCmd.OpenForm («Форма2«)
DoCmd.OpenForm («Форма3«)
End Sub

А чем не подходит то, что я предложил выше?

А вобщем, нельзя ли конкретнее: что есть и что хотелось бы получить.

А значения куда вводятся. в таблицу, в Едит или ещё куда-нибудь

Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Объяви глобальную переменную и её будет видно во всех модулях проекта:
Public B As DAO.Recordset

Если у тебя просто строка, то объяви переменную

—— Модуль 1 ———
public B as string дальше
b = Значение на выходе запроса (строка)

т.е. у тебя значение из запроса попадёт куда нужно.

З.Ы. Если мы опять друг-друга не поняли, то приведи пример куска программы где тебе нужно это сделать.

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Как закопировать таблицу из одной БД в другую ?
Как закопировать наново и как добавить к уже существующей таблице?
я так понял что работа с таблицами полностью реализовано в АДО ?

Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ‘ В ADO так делается
‘ ========================================
‘ в модуле
Public cn As New ADODB.Connection
Public cm As New ADODB.Command
Public rs As New ADODB.Recordset

‘ в модуле
sub MakeConnect()
cn.Open «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» & App.Path & _
«База.mdb;Mode=ReadWrite;Persist Security Info=False»

Set cm.ActiveConnection = cn

Set rs.ActiveConnection = cn
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
end sub

‘ ========================================
‘ в модуле формы

‘ обновление записи
Private Sub btnUpdate_Click()
rs!Поле_1 = Me.Text1.Text
rs!Поле_2 = Me.Text2.Text
rs!Поле_3 = Me.Text3.Text

rs.Update
End Sub

‘ добавление записи
Private Sub btnNew_Click()

On Error Resume Next

cm.Execute
rs.Requery
rs.MoveLast

‘ удаление записи по условию
Private Sub btnDel_Click()
On Error Resume Next
Dim m_CurRec As Long

Dim Response As Integer
Dim Msg As String, Title As String

Msg = «Вы действительно хотите удалить текущую запись ?»
Title = «Внимание»
Response = MsgBox(Msg, vbYesNo + vbCritical + vbDefaultButton2, _
Title)
If Response <> vbYes Then
Exit Sub
End If

m_Bookmark = rs.Bookmark
cm.CommandText = «delete from Таблица_1 where Поле_3='» & me.Text3.Text & «‘
cm.Execute

‘ загрузка обновленного рекордсета
Call LoadDataFromDB

‘ возврат к нужной записи
If m_CurRec >= rs.RecordCount Then
rs.MoveLast
Else
rs.Bookmark = m_Bookmark
End If
End Sub

‘ удаление всех записей
Private Sub btnDelAll_Click()
On Error Resume Next
Dim Response As Integer
Dim Msg As String, Title As String
Msg = «Вы действительно хотите удалить все записи »
Title = «Внимание»
Msg = Msg & » из базы ?»

cm.CommandText = «delete from Таблица_1»

Response = MsgBox(Msg, vbYesNo + vbCritical + vbDefaultButton2, _
Title)
If Response <> vbYes Then ‘ User chose Yes.
Exit Sub
End If

Читать еще:  Как активировать гиперссылку в powerpoint

Call LoadDataFromDB
End Sub

‘ заргрузка данных в рекордсет и датагрид
Private Sub LoadDataFromDB()
Dim sCmd As String

On Error Resume Next

sCmd = «SELECT Поле_1,Поле_2,Поле_3 from Таблица_1»

If rs.State = adStateOpen Then
rs.Close
End If

Set DataGrig1.DataSource = rs

Добавлено
‘ открытие множества форм frmMyForm

Добавление записей в таблицу с помощью запроса на добавление

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

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

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

В этой статье

Обзор

Запрос на добавление обеспечивает выборку записей из одного или нескольких источников данных и копирование выбранных записей в существующую таблицу.

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

Преимущества использования запроса на добавление

Используя запрос для копирования данных, можно выполнять указанные ниже операции.

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

Просмотр выбранных данных перед копированием. Можно просмотреть выбранные данные в режиме таблицы и внести необходимые изменения перед их копированием. Это особенно удобно, если запрос содержит условия или выражения и вам необходимо несколько попыток для правильного выбора данных. Запрос на добавление нельзя отменить. Если сделана ошибка, придется либо восстанавливать базу данных с помощью резервной копии, либо исправлять ошибку вручную или с помощью запроса на удаление.

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

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

Основные этапы создания запроса на добавление

Создание запроса на добавление включает следующие основные этапы.

Создание запроса на выборку. Сначала выделите данные, которые вы хотите скопировать. При необходимости в запрос на выборку можно вносить изменения и выполнять его до тех пор, пока не будут выбраны нужные данные для копирования.

Преобразование запроса на выборку в запрос на добавление. Когда выборка будет готова, можно изменить тип запроса для Добавление.

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

Предварительный просмотр и выполнение запроса на добавление записей. Перед добавлением записей можно переключиться в режим таблицы для предварительного просмотра добавляемых записей.

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

Создание и выполнение запроса на добавление

В этой статье

Этап 1. Создание запроса на выборку записей для копирования

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

На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

Откроется окно конструктора запроса и диалоговое окно Добавление таблицы.

Дважды щелкните таблицы или запросы с записями, которые нужно скопировать, а затем нажмите кнопку Закрыть.

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

1. Таблица «Основные средства» в окне конструктора запросов

2. Бланк запроса

Дважды щелкните каждое поле, которое требуется добавить. Выбранные поля появятся в строке Поле бланка запроса.

Типы данных полей исходной таблицы должны быть совместимы с типами данных полей в конечной таблице. Текстовые поля совместимы с большинством других типов полей. Числовые поля совместимы только с числовыми полями. Например, можно добавить числа в текстовое поле, но нельзя добавить в числовое поле текст.

Кроме того, можно использовать в качестве поля выражение (например, =Date() для автоматического возврата текущей даты), а также настраивать данные выборки в бланке с помощью выражений, содержащих поля таблицы или запроса. Например, если в таблице назначения есть поле, в котором хранится четырехзначный год, а в исходной таблице — регулярное поле даты и времени, можно использовать функцию DatePart с исходным полем, чтобы выбрать только год.

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

Читать еще:  Не устанавливается powerpoint 2020

При необходимости можно ввести одно или несколько условий в строке Условие отбора бланка. В приведенной ниже таблице представлены некоторые примеры условий, а также результаты их применения.

Добавление записей в таблицу без использования встроенного запроса в VBA/Access

Я совершенно не знаком с VBA. Мне сказали добавить записи в таблицу, используя форму и кнопку «Сохранить» и получили некоторые очень простые инструкции. Хотя я достиг этого с помощью встроенного запроса, мне сказали следовать некоторым строгим методам, таким как использование QueryDef/QueryDefs и.Parameters.

До сих пор я пытаюсь создать очень простой проект, чтобы понять концепции, но я не могу добавить запись в пустую таблицу. Если таблица не пуста (я вручную вношу запись), всякий раз, когда я нажимаю кнопку «Сохранить» для сохранения новых записей, количество добавленных записей как-то удваивается с каждым экземпляром. Например, когда я сохраняю в первый раз, добавляется 1 запись, добавляются 2 раза 2 записи одного типа, добавляются 3 раза 4 и так далее.

Таблица (tbl_test) имеет 2 поля → ID(primary key), Source(Long Text) and Reg No (Number). реестра ID(primary key), Source(Long Text) and Reg No (Number).

Запрос (qry_test) выполняется с помощью функции добавления, и мне сказали добавить выражения, которые делают этот код таким:

Форма имеет 2 поля для Source (txt_Source) и Reg No (txt_RegNo), которые имеют пустые источники записи (Unbound). Кнопка «Сохранить» имеет следующую процедуру:

У меня нет знаний о VBA и с радостью принимаю ЛЮБОЙ помощи. Было бы здорово, если бы я получил какой-то исходный код, который объяснит все подробности о сохранении записей из форм и их редактировании, используя данные querydef, parameter и recordset.

Добро пожаловать в StackOverflow!

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

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

Если я создаю форму ввода данных, которая предназначена для сбора новых данных для новых записей 1-в-время, запрос добавления не подходит для этой цели.

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

Первой и самой важной особенностью формы в этом контексте, вероятно, является свойство источника записи формы. Когда вы создаете новую форму, зайдите в конструкторское представление формы и откройте лист свойств формы (клавиша F4). На вкладке «Данные» листа свойств формы вы найдете свойство источника записи:

Источник записи по существу соединяет вашу форму с набором записей, будь то записи в объект таблицы, объект запроса или строка запроса sql.

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

Похоже, что ничего не случилось с вашей формой, но если теперь вы откроете панель «Добавить существующие поля» (alt + F8), вы заметите, что поля, связанные с вашей таблицей tbl_Test, доступны вам:

Перетащите их в подробный раздел вашей формы.

Затем введите свою форму в форму:

По сути, то, что вы и ваши пользователи видите, является первой пустой записью в вашем tbl_Test, но отображается на форме.

Ввод данных в эти поля в форме.

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

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

На этом этапе вы, вероятно, задаете несколько вопросов:

Когда я заполнил поля для записи в моей форме, как мне сохранить эту запись?

Об этом можно сказать больше, но для краткости я бы рекомендовал использовать командную кнопку для запуска некоторого vba для сохранения записи; аналогично тому, что вы сделали, но используя свойство Dirty вместо использования запроса append:

Здесь событие click VBA для моего примера кнопки сохранения:

Me.Dirty — это логическая (истинная или ложная) настройка для формы; по умолчанию автоматически изменяется значение True, когда пользователь меняет что-то в форме. Чтобы сохранить эти изменения, для параметра Me.Dirty должно быть установлено значение False.

Me.Dirty немного похож на качели на овечьей ручке. Когда пастух ставит овечку (данные) в ручку (форму), они откроют ворота пера. Открытые ворота похожи на форму Me.Dirty , устанавливаемую на True. Чтобы заблокировать овец (данные), ворота должны быть закрыты или в случае форм, для свойства Me.Dirty должно быть установлено значение False. VBA выше, по сути, проверяет, открыт ли ворота и если он должен закрыть его.

Как перейти к новой записи в форме после сохранения текущего?

Опять же, я бы дал пользователю кнопку команды для этого и запустил VBA в своем клик-событии:

Здесь VBA для перехода на новую запись:

Резюме

Существует гораздо больше возможностей, чем то, что я здесь изложил, например:

  • проверка данных до их сохранения
  • проверка других событий формы (например, закрытие), чтобы гарантировать, что ввод данных не потерян
  • переход на существующую запись

Но, надеюсь, то, что я вам дал, по крайней мере указывает на вас в лучшем направлении. Удачи!

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