Использование объекта Recordset. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Использование объекта Recordset.



Recordset — это объект, который используется для выполнения операций с записями. Семейство Recordsets содержит все открытые объекты Recordset в открытой базе данных. При закрытии объекта Recordset он удаляется из памяти и из семейства Recordsets. Объекты Database, TableDef и QueryDef включает метод OpenRecordset.

Recordset можно открыть, указав в методе OpenRecordset объекта Database название соответствующей таблицы или воспользовавшись методом OpenRecordset объекта TableDef:

Dim dbsNorthwind As Database

Dim rstEmployees As Recordset

Set dbsNorthwind = OpenDatabase("Northwind.mdb")

Set rstEmployees = dbsNorthwind.OpenRecordset("Employees", dbOpenDynaset)

После открытия объекта Recordset необходимо определить, какие записи доступны. Если в Recordset нет ни одной записи, то его свойства BOF (Beginning Of File — начало файла) и EOF (End Of File — конец файла) установлены в True. Если EOF установлено в False, то Recordset имеет хотя бы одну запись. Если записи существуют, то при открытии Recordset будет выполнено позиционирование на первой записи.

Используя метод Move, можно построить цикл, обращающийся к каждой следующей записи в объекте Recordset. Метод MoveLast используется для позиционирования к последней записи Recordset. Для перемещения к предыдущей записи используется метод MovePrevious, пока свойство BOF не будет установлено в True. Метод MoveFirst может быть использован для позиционирования к первой записи.

Метод Edit информирует Jet о том, что в текущей записи происходят изменения. При использовании метода Update сделанные изменения вносятся в таблицу.

Для добавления записей используйте метод AddNew. Этот метод применяется в комплексе с методом Edit при добавлении новых записей. Как и в случае с методом Edit, записи будут присоединены к таблице после применения метода Update.

Для удаления текущей записи используйте метод Delete.

После того как обработка объекта Recordset будет завершена, закройте его, воспользовавшись методом Close. Этот метод удаляет объект Recordset из семейства Recordsets и делает объект Recordset недействительным.

Некоторые методы:

AddNew Creates a new record for an updatable Recordset object. With rstTemp .AddNew !FirstName = strFirst !LastName = strLast .Update .Bookmark =.LastModified End With
CancelUpdate Cancels any pending updates for a Recordset object. With rstEmployees .CancelUpdate MsgBox "Record not modified." End With
Close Closes an open DAO object. dbsNorthwind.Close
Delete Recordset objects deletes the current record in an updatable Recordset object. With tdfTemp If strCommand = "APPEND" Then .Fields.Append.CreateField(strName, _ varType, varSize) Else If strCommand = "DELETE" Then.Fields.Delete strName End If End With
Edit Copies the current record from an updatable Recordset object to the copy buffer for subsequent editing. With rstTemp .Edit !FirstName = strFirst !LastName = strLast .Update .Bookmark =.LastModified End With
FindFirst Locates the first, last, next, or previous record in a dynaset- or snapshot-type Recordset object that satisfies the specified criteria and makes that record the current record. If recordset contains more than one record that satisfies the criteria, FindFirst locates the first occurrence, FindNext locates the next occurrence, and so on. strCountry = _ Trim(InputBox("Enter country for search.")) If strCountry = "" Then Exit Do With rstCustomers .MoveLast .FindFirst strCountry If.NoMatch Then MsgBox "No records found with " & _ strCountry & "." Exit Do End If
FindLast    
FindNext    
FindPrevious    
Move Moves the position of the current record in a Recordset object. With rstOutput Do While Not.EOF Debug.Print,.Fields(0),.Fields(1) .MoveNext Loop End With
MoveFirst    
MoveLast    
MoveNext    
MovePrevious    
OpenRecordset Creates a new Recordset object and appends it to the Recordsets collection. Dim wrkODBC As Workspace Dim conPubs As Connection Set wrkODBC = CreateWorkspace("", "admin", "", dbUseODBC) Set conPubs = wrkODBC.OpenConnection("",,, _ "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers")
Update Saves the contents of the copy buffer to an updatable Recordset object.

Некоторые свойства:

AbsolutePosition Sets or returns the relative record number of a Recordset object's current record. strMessage = "Employee: " &!LastName & vbCr & _ "(record " & (.AbsolutePosition + 1) & _ " of " &.RecordCount & ")"
Bookmark Sets or returns a bookmark that uniquely identifies the current record in a Recordset object. If IsEmpty(varBookmark) Then MsgBox "No Bookmark set!" Else .Bookmark = varBookmark End If
Bookmarkable Returns a value that indicates whether a Recordset object supports bookmarks, which you can set by using the Bookmark property.
EditMode Returns a value that indicates the state of editing for the current record.
LastModified Returns a bookmark indicating the most recently added or changed record. .Bookmark =.LastModified
Name Sets or returns a user-defined name for a DAO object. For an object not appended to a collection, this property is read/write. Set dbsNorthwind = OpenDatabase("Northwind.mdb") With dbsNorthwind Set qdfNew =.CreateQueryDef() qdfNew.Name = "NewQueryDef" qdfNew.SQL = "SELECT * FROM Employees" .QueryDefs.Append qdfNew Debug.Print "Names of queries in " &.Name .QueryDefs.Delete qdfNew.Name .Close End With
NoMatch Indicates whether a particular record was found by using the Seek method or one of the Find methods
RecordCount    
RecordStatus Returns a value indicating the update status of the current record if it is part of a batch update dbRecordUnmodified, dbRecordModified, dbRecordNew, dbRecordDeleted, dbRecordDBDeleted
Sort Sets or returns the sort order for records in a Recordset object .Sort = "LastName, FirstName"
Type Sets or returns a value that indicates the operational type or data type of an object. dbBigInt, dbBinary, dbBoolean, dbByte и т. п.
Updatable Returns a value that indicates whether you can change a DAO object.

 

Примеры использования методов DAO.

Sub Find ()
'--------------------------------------------------------
' Поиск записей в таблице " tblPeoples " Будем искать записи, у которых в поле LastName находиться значение "Иванова" и печатать в окне отладки ID _ People найденных записей и их количество Проход по всей таблице. ЭТОТ МЕТОД НЕ ЯВЛЯЕТСЯ ОПТИМАЛЬНЫМ!!!
'--------------------------------------------------------
Dim db As Database
Dim rs As Recordset
Dim str As String
Dim lngRecordCount As Long
'Счетчик найденных записей

Set db = CurrentDb
Set rs = db. OpenRecordset (" tblPeoples ", dbOpenDynaset)
str = ""
lngRecordCount = 0
If rs. RecordCount <> 0 Then
rs. MoveFirst
Do Until rs. EOF
'Если текущая запись удовлетворяет условию...
If rs![ LastName ] = "Иванова" Then
'Инкримируем счетчик найденных записей
lngRecordCount = lngRecordCount + 1
str = str & rs![ ID _ People ] & ", "
End If
rs. MoveNext
Loop
str = str & vbCrLf & "Всего найдено записей: " & _
lngRecordCount
Else
str = "Таблица "" tblPeoples "" не содержит записей."
End If
Debug. Print str
rs. Close
db. Close
End Sub

Option Compare Database
Option Explicit


Sub Cycle01_1()
'--------------------------------------------------------
' Цикл по записям таблицы "tblPeoples" от начала до конца
'--------------------------------------------------------
'База данных
Dim db As Database
'Набор записей
Dim rs As Recordset
'Строка
Dim str As String
'Количество записей в наборе записей
Dim lngRecordCount As Long
' db - текушая база данных
Set db = CurrentDb

Set rs = db.OpenRecordset("tblPeoples", dbOpenDynaset)
' rs - набор записей на основе таблицы "tblPeoples"
' При инициализации набора записей мы можем точно определить, есть ли в этом наборе записи или нет.
' Свойство " RecordCount " набора записей посли его инициализации, по идее, должна сождержать количество записей набора, однако это не так. Если в наборе есть записи это свойство отлично от нуля, но не содержит их количество. Для определения количества записей необходимо перейти на последнюю запись набора, и после этого в свойстве " RecordCount " будет находиться количество записей набора. Если в наборе rs есть записи...
If rs. RecordCount <> 0 Then
rs. MoveLast
' Переходим на последнюю запись (чтобы " RecordCount " содержало верное значение)

lngRecordCount = rs. RecordCount
' Считываем количество записей в переменную

rs. MoveFirst 'Переходим на первую запись набора
' Заполняем текстовую переменную str количеством записей
str = "Количество записей в таблице "" tblPeoples "": " & lngRecordCount & vbCrLf

'Свойство EOF (End Of File) набора записей становиться истинным ПОСЛЕ последней 'записи набора,точно как и свойство BOF (Begin Of File) становиться истинным ПЕРЕД 'первой записью набора. Цикл "Пока не кончатся записи в наборе rs "
Do Until rs. EOF
'Добавляем в переменную str имнена полей, их
' значения и символ перевода строки
str = str & " ID _ People: " & rs![ ID _ People ] & vbCrLf
str = str & " ID _ RecordStatus: " & rs![ ID _ RecordStatus ] & vbCrLf
str = str & " LastName: " & rs![ LastName ] & vbCrLf
str = str & " FirstName: " & rs![ FirstName ] & vbCrLf
str = str & " MiddleName: " & rs![ MiddleName ] & vbCrLf
str = str & " PeopleSex: " & rs![ PeopleSex ] & vbCrLf
str = str & " BirthDate: " & rs![ BirthDate ] & vbCrLf
str = str & "------------" & vbCrLf
rs. MoveNext
'Переходим на следующую запись
Loop
'Конец цикла
Else
'Если записей нет...
' Заполняем текстовую переменную str сообщением об отсутствии записей
str = "Таблица "" tblPeoples "" не содержит записей."
End If
'Печатаем содержимое переменной str в окне отладки
Debug. Print str
rs. Close
'Закрываем переменную набора записей
db. Close
'Закрываем переменную базы данных
End Sub

 

Программирование в формах.

Определяя имя для поля, элемента управления или объекта, полезно проверить, не совпадает ли это имя с именем свойства или другого элемента, используемого Microsoft Access; в противном случае иногда могут возникать неверные результаты. Например, при ссылке на значение поля «Name» в таблице «NameInfo» с использованием конструкции NameInfo.Name будет возвращаться значение свойства таблицы Имя (Name), а не значение поля «Name».

Простейшим способом обойти неопределенность в именах является использование оператора! вместо оператора. (точка) в ссылках на значения полей, элементов управления и объектов:

[NameInfo]![Name]

Пример запроса, созданного как текстовая строка плюс значения текстовых переменных. Запрос выбирает из таблицы «_ v 2» в таблицу «_ v 4» те записи, значение поля nn в которых больше нуля и меньше значения переменной целого типа var _ numb.

Dim S As String

S = "SELECT * INTO [_v2] FROM [_v4] WHERE (([_v4].nn<=" + Str(var_numb) + _

")and([_v4].nn>0))"

DoCmd. RunSQL S

Классическая фраза, которой приходится завершать функцию, если в результате ваших действий значения некоторых полей в форме должны измениться, а этого почему-то не видно:

Forms![Моя форма].Refresh

Работа с элементом «поле со списком» (Элемент управления на странице доступа к данным, щелчок по кнопке-стрелке которого приводит к раскрытию списка, в котором можно выбрать значение или ввести его прямо в поле с клавиатуры).

Окно свойств для поля со списком, который взят из работающей формы и содержит названия стран. Эти названия берутся из таблицы countries с помощью соответствующего запроса.

 

Установка исходных данных для поля (текст в строке свойств «источник строк»):

SELECT countries.country, countries.name_rus, countries.currency_rus FROM countries;

При этом из трёх столбцов видимым является только второй.

Установка начального значения для поля со списком из программы:

Private Sub Form_Open(Cancel As Integer)

var_country.SetFocus

var_country.SelText = " Россия "

End Sub

Реакция на событие «После обновления»:

Private Sub var_country_AfterUpdate()

info_1.Caption = var_country.Column(1)

Forms![Основная форма].Refresh

End Sub



Поделиться:


Последнее изменение этой страницы: 2017-02-08; просмотров: 1309; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.179.119 (0.019 с.)