Light-electric.com

IT Журнал
16 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Currentdb openrecordset access

Currentdb openrecordset access

Описание
Создает новый объект Recordset и добавляет его в семейство Recordsets.

Параметры
наборЗаписей
Объектная переменная, представляющая открываемый объект Recordset.
объект
Объектная переменная, представляющая существующий объект, используемый при создании нового объекта Recordset.
источник
Выражение или переменная типа String, определяющая источник записей для нового объекта Recordset. В качестве источника записей можно указать имя таблицы или запроса, а также инструкцию SQL, которая возвращает записи. Для табличного объекта Recordset в базе данных Microsoft Jet в качестве источника допускается указание только имени таблицы.
тип
Необязательный. Константа, указывающая тип открываемого объекта Recordset:

  • dbOpenTable — Открытие табличного объекта Recordset (только в рабочей области ядра Microsoft Jet).
  • dbOpenDynamic — Открытие объекта Recordset динамического типа, аналогичного динамическому указателю ODBC (только в рабочей области ODBCDirect)
  • dbOpenDynaset — Открытие объекта Recordset типа динамического набора записей, аналогичного указателю ключевого набора записей ODBC
  • dbOpenSnapshot — Открытие объекта Recordset типа статического набора записей, аналогичного указателю статического набора записей ODBC
  • dbOpenForwardOnly — Открытие объекта Recordset типа статического набора записей с последовательным доступом

параметры
Необязательный. Произвольная комбинация следующих констант, задающих характеристики нового объекта Recordset:

  • dbAppendOnly — Пользователям разрешается только добавление новых записей в объект Recordset и запрещается изменение или удаление существующих записей (только для объектов Recordset типа динамического набора записей в рабочей области Microsoft Jet).
  • dbSQLPassThrough — Передача инструкции SQL для обработки источнику данных ODBC, подключенному к ядру Microsoft Jet (только для объектов Recordset типа статического набора записей в рабочей области Microsoft Jet)
  • dbSeeChanges — Генерация ошибки выполнения, если один пользователь изменил данные, редактируемые другим пользователем (только для объектов Recordset типа динамического набора записей в рабочей области Microsoft Jet). Это удобно в ситуациях, когда несколько пользователей имеют доступ для чтения/записи к одним и тем же данным.
  • dbDenyWrite — Запрет другим пользователям изменять или добавлять записи (только для объектов Recordset в рабочей области Microsoft Jet)
  • dbDenyRead — Запрет другим пользователям на чтение данных в таблице (только для объектов Recordset типа таблицы в рабочей области Microsoft Jet)
  • dbForwardOnly — Создание объекта Recordset типа статического набора записей с последовательным доступом (только для объектов Recordset типа статического набора записей в рабочей области Microsoft Jet). Данная константа включена только для совместимости с предыдущими версиями, вместо нее в аргументе тип следует использовать константу dbOpenForwardOnly
  • dbReadOnly — Запрет пользователям на внесение изменений в объект Recordset (только в рабочей области Microsoft Jet). Данная константа включена только для совместимости с предыдущими версиями, вместо нее следует использовать константу dbReadOnly в аргументе блокировки
  • dbRunAsync — Запуск асинхронного запроса (только в рабочей области ODBCDirect)
  • dbExecDirect — Запуск запроса без выполнения инструкции SQLPrepare с прямым вызовом инструкции SQLExecDirect (только в рабочей области ODBCDirect). Данный параметр нельзя использовать при открытии объекта Recordset на основе запроса с параметрами. Дополнительные сведения см. в руководстве по программированию Microsoft ODBC 3.0
  • dbInconsistent — Разрешение несогласованных обновлений (только для объектов Recordset типа динамического или статического набора записей в рабочей области Microsoft Jet)
  • dbConsistent — Разрешение только согласованных обновлений (только для объектов Recordset типа динамического или статического набора записей в рабочей области Microsoft Jet)

блокировки
Необязательный. Константа, определяющая тип блокировки объекта Recordset.

  • dbReadOnly — Запрет пользователям на внесение изменений в объект Recordset (настройка по умолчанию для рабочей области ODBCDirect). Использование константы dbReadOnly допускается только в одном из аргументов параметры или блокировки. Если задать эту константы в двух аргументах одновременно, возникает ошибка выполнения
  • dbPessimistic — Использование жесткой блокировки при определении возможности изменения объекта Recordset в многопользовательской среде. Страница, содержащая обрабатываемую запись, блокируется при вызове метода Edit (настройка по умолчанию для рабочей области Microsoft Jet)
  • dbOptimistic — Использование нежесткой блокировки при определении возможности изменения объекта Recordset в многопользовательской среде. Страница, содержащая обрабатываемую запись, блокируется при вызове метода Update
  • dbOptimisticValue — Использование нежесткой блокировки при конкурентном доступе на основании значений строк (только в рабочей области ODBCDirect)
  • dbOptimisticBatch — Включение режима пакетного обновления с нежесткой блокировкой (только в рабочей области ODBCDirect)

Замечания
В рабочей области ядра Microsoft Jet, если аргумент объект задает объект QueryDef или объект Recordset типа динамического набора записей или статического набора записей, а также, если аргумент источник задает инструкцию SQL или объект TableDef, представляющий присоединенную таблицу, то не допускается использование константы dbOpenTable в аргументе тип; в противном случае возникает ошибка выполнения. Если требуется использовать запрос к серверу SQL для присоединенной таблицы при подключении ядра Microsoft Jet к источнику данных ODBC, необходимо сначала указать в свойстве Connect базы данных, содержащей присоединенную таблицу, допустимую строку подключения ODBC. Для однократного прохода по объекту Recordset, открытому при подключении ядра Microsoft Jet к источнику данных ODBC, можно повысить быстродействие, задав константу dbOpenForwardOnly в аргументе тип.
Если аргумент объект задает объект Recordset типа динамического набора записей или статического набора записей, то новый объект Recordset является объектом того же типа. Если аргумент объект задает табличный объект Recordset, то новый объект является объектом Recordset типа динамического набора записей. Не допускается открытие нового объекта Recordset на основе статического набора записей с последовательным доступом или объектов Recordset ODBCDirect.
В рабочей области ODBCDirect возможно открытие Recordset, с указанием более одного запроса на выборку в аргументе источник, например:

Читать еще:  Process all access

В возвращенном объекте Recordset будут открыты результаты первого запроса. Чтобы открыть результаты следующих запросов, следует вызвать метод NextRecordset.
Пользователь имеет возможность с помощью средств ODBCDirect отправлять запросы DAO на различные серверы баз данных. При этом следует помнить, что разные серверы могут использовать различающиеся диалекты языка SQL. Поэтому из справочной системы исключена контекстная правка языка Microsoft Jet SQL, хотя интерактивная справочная система Microsoft Jet SQL по-прежнему доступна в меню. При использовании подключений ODBCDirect или запросов к серверу в приложения, использующих подключения через ядро Microsoft Jet, проверяйте по документации сервера, какой диалект языка SQL использует сервер базы данных.
Константа dbSeeChanges позволяет в рабочей области Microsoft Jet перехватывать при работе с записью изменения, вносимые в ту же запись другими пользователями. Например, если два пользователя начинают изменять одну и ту же запись, успешно выполнить обновление сможет только пользователь, первым вызвавший метод Update. При вызове метода Update вторым пользователем возникнет ошибка при выполнении. Аналогично этому, ошибка выполнения возникает, если второй пользователь пытается с помощью метода Delete удалить запись, в которую первый пользователь успел занести изменения.
Обычно, перехват такой ошибки должен приводить к программному обновлению содержимого полей и загрузке измененных значений. Если ошибка возникает при попытке удаления, программа должна вывести новое содержимое записи и сообщение, показывающее, что запись недавно была изменена. Программа должна запросить подтверждение на удаление измененной записи.
Кроме того, константу dbSeeChanges следует использовать, если пользователь открывает объект Recordset при подключении ядра Microsoft Jet к источнику данных ODBC, который является таблицей Microsoft SQL Server версии 6.0 (или более поздней) со столбцом IDENTITY, в противном случае может возникнуть ошибка.
В рабочей области ODBCDirect допускается выполнение запросов в асинхронном режиме, задаваемом константой dbRunAsync в аргументе параметры. Это позволяет приложению продолжать обработку других инструкций во время выполнения запроса в фоновом режиме. Однако пользователь не сможет в этом случае получить доступ к данным в объекте Recordset до завершения запроса. Чтобы определить, закончено ли выполнение запроса, следует проверить значение свойства StillExecuting нового объекта Recordset. Если выполнение запроса занимает больше времени, чем предполагается, пользователь имеет возможность прекратить выполнение с помощью метода Cancel.
Попытка открыть несколько объектов Recordset на основе одного источника данных ODBC » & lngPrice, где lngPrice = 125,50), то при попытке открыть объект Recordset возникает ошибка. Причина заключается в том, что число преобразуется в строковое значение с использованием текущей системной настройки, а в языке SQL распознается только американский символ разделителя целой и дробной части (десятичная точка).

Пример
Следующая программа использует метод OpenRecordset для открытия пяти объектов Recordset и отображения их содержимого. Для выполнения данной процедуры требуется процедура OpenRecordsetOutput.

Выполнение SQL запросов к текущей базе данных в среде VBA (Access)

В Microsoft Office Access поддерживается выполнение SQL запросов к текущей базе данных из программного кода на VBA. Рассмотрим, как это можно использовать при разработке приложений баз данных.

Так как запрос выполняется к той же самой базе данный в которой выполняется модуль VBA, для выполнения SQL запроса нет необходимости работать со стандартными в подобных случаях интерфейсами ADO, ODBC и т.д. Всё можно сделать при помощи объектной модели Access.

Как известно SQL запросы можно условно разделить на две большие группы:

  • Запросы, не возвращающие данных (INSERT, UPDATE, DELETE и т.д.);
  • Запросы возвращающие данные (запросы на выборку (SELECT)).
Запросы, не возвращающие данных

Для выполнения запросов к текущей базе данных служит метод Execute объекта CurrentDb. Этот метод принимает в качестве параметра строку с SQL запросом, который необходимо выполнить.

Это простейший запрос. Но, как быть с запросами, которые манипулируют теми или иными данными?

Такие запросы тоже можно выполнить. Для этого нужно просто сформировать соответствующую строку.

Так, например, может быть реализовано добавление записей в таблицу:

А, так их обновление:

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

Запросы на выборку

Метод Execute объекта CurrentDb не поддерживает выполнение запросов на выборку. Поэтому для них нужен другой подход.

Чтобы работать с выборкой данных необходимо воспользоваться объектом RecordSet, который можно создать при помощи метода OpenRecordSet объекта CurrentDb. Этот метод также принимает в качестве параметра строку с SQL запросом.

После создания RecordSet мы можем перебрать все записи, как это показано ниже.

Помимо простого перебора доступны несколько видов поиска. Но в основном используются два.

Первый вид поиска реализован в виде методов FindFirst, FindLast, FindNext и FindPrevious объекта RecordSet.

Первые два устанавливают курсор на соответственно первую и последнюю записи, соответствующие условию поиска. Условие поиска передаётся в качестве параметра в виде строки. Само условие задаётся по аналогии с предложением WHERE в обычном SQL запросе.

Методы FindNext и FindPrevious устанавливают курсор на следующую и предыдущую записи в соответствии с условием поиска, если такие записи существуют. Условие поиска для этих методов задаётся также, как и для FindFirst и FindLast.

Обратите внимание, что эти четыре метода именно устанавливают указатель на нужную запись, а не производят фильтрацию выборки. Таким образом количество записей выбранных SQL запросом остаётся неизменным.

В следующем примере перебор записей начнётся с записи, у которой id равен 234, так как курсор был перемещён к ней до начала обхода набора записей в цикле.

Читать еще:  Insert into access

Свойство Recordset (Набор записей)

Применение

Возвращает или задает объект ADO Recordset или DAO Recordset, который представляет собой источник записей для указанной формы, отчета, списка или поля со списком. Значение данного свойства доступно для чтения и записи.

выражение (обязательно). Выражение, возвращающее один из объектов из списка «Применение».

Замечания

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

Это свойство можно задать только с помощью кода Visual Basic для приложений (VBA).

Доступность для чтения и записи свойства Recordset определяется типом набора записей (ADO или DAO) и типом данных (Access или SQL), которые содержатся в нем.

Чтение и запись

Чтение и запись

Чтение и запись

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

Global rstSuppliers As ADODB.RecordsetSub MakeRW()DoCmd.OpenForm «Suppliers»Set rstSuppliers = New ADODB.RecordsetrstSuppliers.CursorLocation = adUseClientrstSuppliers.Open «Select * From Suppliers», _CurrentProject.Connection, adOpenKeyset, adLockOptimisticSet Forms(«Suppliers»).Recordset = rstSuppliersEnd Sub

Свойство Набор записей служит для следующих целей:

Связывание нескольких форм с общим набором данных. Это позволяет синхронизировать несколько форм. Например:

Set Me.Recordset = Forms!Form1.Recordset

Использование методов, не имеющих непосредственной поддержки в формах, вместе с объектом Recordset. Например, свойство Recordset можно использовать вместе с методами ADO Find или DAO Find в пользовательском диалоговом окне для поиска записи.

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

Изменение свойства Recordset также может привести к изменению свойств RecordSource (Источник записей), RecordsetType (Тип набора записей) и RecordLocks (Блокировка записей). Кроме того, некоторые связанные с данными свойства могут быть переопределены, например свойства Filter (Фильтр), FilterOn (Фильтр включен), OrderBy (Порядок сортировки) и OrderByOn (Сортировка включена).

Вызов метода Requery набора записей формы (например, Forms(0).Recordset.Requery ) может привести к превращению формы в свободную. Чтобы обновить данные в форме, привязанной к набору записей, следует задать для свойства RecordSource (Источник записей) формы само это свойство ( Forms(0).RecordSource = Forms(0).RecordSource ).

Если форма привязана к набору записей, при использовании команды «Фильтр по форме» возникает ошибка.

Пример

В следующем примере свойство Recordset используется для создания копии объекта Recordset из текущей формы. Затем в окне отладки печатаются имена полей.

В следующем примере свойство Recordset и объект Recordset используются для синхронизации набора записей с текущей записью формы. При выборе в поле со списком названия организации для поиска ее записи используется метод FindFirst, вызывающий отображение найденной записи в форме.

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

Выполнение SQL запросов к текущей базе данных в среде VBA (Access)

В Microsoft Office Access поддерживается выполнение SQL запросов к текущей базе данных из программного кода на VBA. Рассмотрим, как это можно использовать при разработке приложений баз данных.

Так как запрос выполняется к той же самой базе данный в которой выполняется модуль VBA, для выполнения SQL запроса нет необходимости работать со стандартными в подобных случаях интерфейсами ADO, ODBC и т.д. Всё можно сделать при помощи объектной модели Access.

Как известно SQL запросы можно условно разделить на две большие группы:

  • Запросы, не возвращающие данных (INSERT, UPDATE, DELETE и т.д.);
  • Запросы возвращающие данные (запросы на выборку (SELECT)).
Запросы, не возвращающие данных

Для выполнения запросов к текущей базе данных служит метод Execute объекта CurrentDb. Этот метод принимает в качестве параметра строку с SQL запросом, который необходимо выполнить.

Это простейший запрос. Но, как быть с запросами, которые манипулируют теми или иными данными?

Такие запросы тоже можно выполнить. Для этого нужно просто сформировать соответствующую строку.

Так, например, может быть реализовано добавление записей в таблицу:

А, так их обновление:

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

Запросы на выборку

Метод Execute объекта CurrentDb не поддерживает выполнение запросов на выборку. Поэтому для них нужен другой подход.

Чтобы работать с выборкой данных необходимо воспользоваться объектом RecordSet, который можно создать при помощи метода OpenRecordSet объекта CurrentDb. Этот метод также принимает в качестве параметра строку с SQL запросом.

После создания RecordSet мы можем перебрать все записи, как это показано ниже.

Помимо простого перебора доступны несколько видов поиска. Но в основном используются два.

Первый вид поиска реализован в виде методов FindFirst, FindLast, FindNext и FindPrevious объекта RecordSet.

Первые два устанавливают курсор на соответственно первую и последнюю записи, соответствующие условию поиска. Условие поиска передаётся в качестве параметра в виде строки. Само условие задаётся по аналогии с предложением WHERE в обычном SQL запросе.

Методы FindNext и FindPrevious устанавливают курсор на следующую и предыдущую записи в соответствии с условием поиска, если такие записи существуют. Условие поиска для этих методов задаётся также, как и для FindFirst и FindLast.

Читать еще:  Open database access

Обратите внимание, что эти четыре метода именно устанавливают указатель на нужную запись, а не производят фильтрацию выборки. Таким образом количество записей выбранных SQL запросом остаётся неизменным.

В следующем примере перебор записей начнётся с записи, у которой id равен 234, так как курсор был перемещён к ней до начала обхода набора записей в цикле.

How to work with recordset (Dao) in MS Access

Recordsets are objects that represent collections (sets) of records. Recordsets have many methods and properties to make working with the records in the collection easy. This page summarizes how to create and use DAO recordsets.

Open a recordset

There are several ways to create or get a recordset:

  • Create a new Recordset from a table or query in your database
  • Use the Recordset property of an Access object, such as a bound Form
  • Clone an existing recordset
  • Create a new Recordset by applying a Filter on an existing recordset

In the following sections these different approaches are shown. A small screencast will be included to show where to click to effortlessly get the code inserted.

Create a recordset from a table or query in the current database

The code below opens a recordset taken from a table in the current database

Click this to see how the code is created with just a few menu selections

In the screencast you see two actions taking place:

  1. Insert the OpenRecordset method from the DAO Database Object
  2. Insert the Name of a Table

Note: Code VBA automatically understands DAO OpenRecordset uses CurrentDb as the database.

Note: When you use OpenRecordset on a query or attached table Access defaults the Type property to dbOpenDynaset. When you OpenRecordset on a local table, it uses dbOpenTable by default. The Table type has different methods (e.g. Seek instead of FindFirst), but it cannot be used with attached tables. Consequently if you later, as good practice, split your database the tables become attached tables and the code is likely to fail. For this reason it is safer to just generally stick to dbOpenDynaset.

Add new record to DAO Recordset

To add a new record a recordset has to be be available. The adding of a record requires:

  1. AddNew : Start inserting a record
  2. Set the values of the fields of the record being created
  3. Update : Finalize the adding

Notes

  1. If a fieldname contains a space you must put it between square brackets.
  2. If you add a record to a recordset of type dynaset, the new record will appears at the end of the Recordset, regardless how the Recordset is sorted. To force the new record to appear in its properly sorted position, you can use the Requery method.

Read values from record

To read the field values from a record you first have to make it the current. Subsequently the value of a field can either be obtained using the .Fields method or shorter equivalents

Edit a record in a DAO Recordset

To edit a record in a recordset it first has to be made the current record. After that, changing the values of fields of a record requires:

  1. Edit : Indicate the current record is to be edited
  2. Set the values of the fields of the record being created
  3. Update : Finalize the adding

recordsetfindandedit

Check out this to see how the code is created with just a few menu selections

Move through a DAO Recordset — make record current

Moving through a recordset changes what is the ‘current’ record.

Find a record

The most direct way to move to a specific record is using the FindFirst method.

For best performance, the criteria should be in either the form «field = value» where field is an indexed field in the underlying base table, or «field LIKE prefix» where field is an indexed field in the underlying base table and prefix is a prefix search string (for example, «ART*» ).

After having found the record you can read or change the record’s field values as explained under Edit a record in a DAO Recordset.

Processing all records

Use the Move methods to move from record to record without applying a condition. When you open a Recordset, the first record is current. Using any of the Move methods (MoveFirst, MoveLast, MoveNext, or MovePrevious) causes an error if the recordset has no records, so you should test this condition before using a Move method. If, as usually is the case, you use the MoveNext in a loop as below this test is done with .EOF .

Delete a record

If you want to delete a record you first have to move to it (see above) making it the current. After that simply

When you use the Delete method, the Microsoft Access database engine immediately deletes the current record without any warning or prompting. Deleting a record does not automatically cause the next record to become the current record; to move to the next record you must use the MoveNext method.

CODE VBA — AGORA Software BV Copyright 1997-2019

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×