Объект recordset не является обновляемым access - Новости с мира ПК
Vvmebel.com

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

Объект recordset не является обновляемым access

Базы данных и ADO Работа с полями объекта Recordset в ADO/VBA

9.5.4 Коллекция Fields и объекты Field

Работа с полями объекта Recordset в ADO/VBA, коллекция Fields и объекты Field, свойства Name и Value

Главное содержание Recordset — это то, что лежит в ячейках на пересечении строк (в Recordset они называются записями — records и представлены соответствующими объектами Record) и столбцов. В Recordset столбцы называются полями — объектами Field, которые сведены в коллекцию Fields. Объекты Record используются нечасто — поскольку имен у них нет, а переходить между записями проще при помощи свойств и методов самого объекта Recordset — AbsolutePosition, Find(), Move() и т.п. Коллекция же Fields и объекты Field используются практически в каждой программе.

У коллекции Fields все свойства стандартные, как у каждого объекта Collection:

  • Count — сколько всего столбцов в Recordset
  • Item — возможность вернуть нужный столбец (объект Field) по имени или номеру. Поскольку это свойство является свойством по умолчанию, то можно использовать код, как в нашем примере: rs.Fields(«CompanyName»). Есть еще один вариант синтаксиса для обращения к этому свойству:

Методы же имеются как стандартные, так и специфические:

  • Append() — возможность добавить новый столбец в Recordset. Delete() — соответственно, удалить столбец. Обе команды разрешено выполнять только на закрытом Recordset (пока не был вызван метод Open() или установлено свойство ActiveConnection).
  • Update() — сохранить изменения, внесенные в Recordset (будет произведена попытка создать новый столбец на источнике данных, если источник данных по каким-то причинам принимать эти изменения отказался, возникнет ошибка), CancelUpdate() — отменить изменения, внесенные в Recordset.
  • Refresh() — загадочный метод, который ничего не делает (о чем честно написано в документации). Обновить структуру Recordset данными с источника можно только методами самого объекта Recordset.
  • Resync() — работает только для коллекции Fields объекта Record (не Recordset), обновляя значения в строке.

Намного больше интересных свойств у объекта Field:

  • ActualSize — реальный размер данных для текущей записи, DefinedSize — номинальный размер данных для столбца (в байтах), в соответствии с полученной с источника информацией.
  • Attributes — возможность определить битовую маску для атрибутов столбца (допускает ли пустые значения, можно ли использовать отрицательные значения, можно ли обновлять, используется ли тип данных фиксированной длины и т.п.)
  • Name — просто строковое имя столбца. Для столбцов, полученных с источника, доступно только на чтение.
  • NumericScale и Precision — значения, которые определяют соответственно допустимое количество знаков после запятой и общее максимальное количество цифр, которое можно использовать для представления значения.
  • Value — самое важное свойство объекта Field. Определяет значение, которое есть в столбце (если мы пришли через коллекцию Fields объекта Record, то для этой записи, если через Fields объекта Recordset — то для текущей записи). Пример применения — в нашей строке для поиска. Доступно и на чтение, и на запись (в зависимости от типа указателя). ADO позволяет работать с большими двоичными данными (изображения, документы, архивы), что очень удобно. OriginalValue — значение, которое было в этом столбце до начала изменений, UnderlyingValue — значение, которое находится на источнике данных (пока мы работали с Recordset, оно могло быть изменено другой транзакцией, и поэтому OriginalValue и UnderlyingValue могут не совпадать). Свойство Value — это свойство по умолчанию, поэтому эти две строки равноценны:
  • Status — значение, отличное от adFieldOK (значение 0) означает, что поле было недавно программно добавлено в Recordset или при добавлении возникла ошибка на источнике данных.
  • Type — тип данных в соответствии с приведенной в документации таблицей. Например, для типа данных nvarchar возвращается 202.

У объекта Field есть только два метода — AppendChunk() и GetChunk(). Оба этих метода используются только для работы с большими двоичными типами данных (изображениями, документами и т.п.), когда работать обычными способами через свойство Value не получается.

Свойство 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 в пользовательском диалоговом окне для поиска записи.

Читать еще:  Агрегатные функции access

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

Изменение свойства 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 при разных условиях.

AccessConnection

В Access 2002 появилось новое свойство CurrentProject.AccessConnection.
В проекте adp не имеет значения что использовать: CurrentProject.AccessConnection или CurrentProject. Connection, там это равнозначные свойства.
Различия проявляются при использовании в базе данных mdb. Вот что показывает окно отладки:

? CurrentProject.Connection
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:Мои документыAccess XP2002.mdb

? CurrentProject.AccessConnection
Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:Мои документыAccess XP2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0

Т.е. CurrentProject.Connection использует только одного провайдера — Microsoft Jet OLEDB provider. А CurrentProject.AccessConnection использует двух провайдеров: одного для доступа к данным(параметр в строке подключения Data Provider) и другого сервис провайдера — Microsoft.Access.OLEDB.10.0. Вот этот самый другой и является сутью новшества.

Про ограничения нового сервис провайдера говорить не буду, хочу выделить только достоинства. С появлением в Access 2000 свойства формы Recordset, появилась возможность указать форме в качестве источника данных рекордсет DAO/ADO. Однако редактировать через интерфейс формы можно было только рекордсет DAO. Так вот, появление нового свойства CurrentProject.AccessConnection, а если говорить более обобщенно, нового сервис провайдера Microsoft.Access.OLEDB.10.0, сняло это ограничение в Access 2002. Теперь для того, чтоб указать форме в качестве источника данных рекордсет ADO, который будет обновляемым через интерфейс формы, необходимо чтобы Connection, в котором будет открыт этот рекордсет, использовал не только провайдера данных, но и сервис провайдера Microsoft.Access.OLEDB.10.0. Частным случаем этого правила является свойство CurrentProject.AccessConnection. Его удобно применять для открытия рекордсетов ADO, по таблицам текущей базы данных, с последующей их передачей формам в качестве источника данных.
Информации из MSDN по свойству CurrentProject.AccessConnection хватило для того, чтобы, поняв суть нововведения, использовать ее для работы с источниками данных, не присоединенными к базе данных, т.е. там, где CurrentProject.AccessConnection не может быть применен.
Привожу два примера, демонстрирующих использование в формах Access 2002 редактируемых рекордсетов ADO по разным источникам данных:

Sub Кmdb()
‘Пример подключения к другому mdb через отдельный Connection
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = «Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:Мои документыAccess XP2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0»
con.Open
rst.Open «Table1», con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
End Sub

Sub КSQL()
‘Пример подключения к SQL Server через отдельный Connection
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = «Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=VAKSHUL;User ID=sa;Initial Catalog=Динамика;Data Provider=SQLOLEDB.1»
con.Open
rst.Open «Table1», con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
End Sub

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

Сказанное ранее хочу дополнить результатами дополнительных экспериментов.

1.
Имеется «родная» mdb таблица. Таблица имеет первичный ключ.
Подключение через ADO к этой таблице, создав новый конекшн или используя CurrentProject.AccessConnection, дает одинаковый результат — результирующий набор в форме редактируемый.
_________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = «Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:Мои документыAccess XP2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0»
con.Open
rst.Open «Table2», con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
___________
___________
Dim rst As New ADODB.Recordset
rst.Open «Table2», CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
___________

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

2.
Имеется не присоединенная к mdb базе таблица SQL Sever. Таблица имеет первичный ключ.
Подключение через ADO к этой таблице в результате дает редактируемый набор в форме.
___________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = «Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=VAKSHUL;User ID=sa;Initial Catalog=Динамика;Data Provider=SQLOLEDB.1»
con.Open
rst.Open «tbl», con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
___________

Удалим в таблице первичный ключ.
Результат подключения через ADO к этой таблице в результате дает НЕ редактируемый набор в форме.

3.
Имеется присоединенная к mdb базе таблица формата dbf. При присоединении было указано поле, выполняющего функцию поля первичного ключа.
Подключение через ADO к этой таблице, создав новый конекшн или используя CurrentProject.AccessConnection, дает одинаковый результат — результирующий набор в форме редактируемый.
__________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = «Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=False;Data Source=D:Мои документыAccess XP2002.mdb;User ID=Admin;Data Provider=Microsoft.Jet.OLEDB.4.0»
con.Open
rst.Open «comptyp», con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
__________
__________
Dim rst As New ADODB.Recordset
rst.Open «comptyp», CurrentProject.AccessConnection, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
__________

Читать еще:  Подключение odbc access

Переприсоединим таблицу dbf к базе без указания поля первичного ключа.
Результат в обоих способах подключения одинаковый — результирующий набор в форме Не редактируемый.

4.
Имеется не присоединенная к mdb базе таблица dbf. Таблица, естественно, не имеет первичного ключа.
Подключение через ADO к этой таблице в результате дает HE редактируемый набор в форме.
____________
Dim rst As New ADODB.Recordset
Dim con As New ADODB.Connection
con.ConnectionString = «Provider=Microsoft.Access.OLEDB.10.0;Data Provider=MSDASQL.1;Extended Properties=»»DSN=Belch_dbf;UID=;PWD=;SourceDB=D:Мои документыdbfProd_dbfs;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;»»»
con.Open
rst.Open «select * from comptyp», con, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst
_____________

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

Объект Recordset;

Объект Recordset представляет полный набор записей таблицы данных или результат выполненной команды. В любое время объект Recordset ссылается только на одну запись из текущего набора. Объекты Recordset можно создавать независимо от ранее созданных объектов Connection путем указания метода Open в строке команды. Когда ADO создает объект Connection, он не устанавливает соответствие между этим объектом и переменными объекта. Кроме того, при открытии составного объектаRecordset нужно отдельно создать и открыть объект Connection; это назначит свойство для переменной объекта. Если не используется переменная объекта, когда открывается объект Recordset, то ADO создает новый объект Connection для каждого нового объекта Recordset, даже если пропущена эта операция. Объекты Recordset используют для управления данными на уровне записей. При использовании ADO, почти всегда управление данными происходит с помощью объектов Recordset. Все объекты Recordset строятся с использованием записей (строк) и полей (столбцов). Возможно использование четырех различных типов курсора при открытии объектаRecordset:

Установить необходимый тип курсора можно с помощью свойства CursorType объекта Recordset или указать одноименный аргумент при вызове метода Open. Если пользователь не определил тип курсора, то ADO по умолчанию открывает курсор типа Forward-onlycursor. Пользователь может создавать столько объектов Recordset, сколько ему нужно. Различные объекты Recordset могут обращаться к одним и тем же таблицам и записям, не конфликтуя при этом. При создании объекта Recordset текущая запись отмечается как первая запись, а свойства BOF и EOF устанавливаются False. Если не существует ни одной записи, то свойство RecordCount устанавливается в 0, а свойства BOF и EOF устанавливаются True. Наряду с методом Moveможно использовать методы MoveFirst, MoveLast, MoveNext и MovePrevious, а также свойства AbsolutePosition, AbsolutePage и Filter для переопределения текущей записи. При использовании курсора типа Forward-onlycursor можно пользоваться только методом MoveNext. При использовании метода Move для обращения к каждой записи, нужно использовать свойства BOFи EOF для определения достижения начала или конца объекта Recordset. Объект Recordset поддерживает два способа обновления данных: прямое и пакетное. При прямом обновлении все изменения в данных записываются в основной источник данных сразу же после вызова метода Update. В случае пакетного обновления, провайдер сначала кэширует все произведенные изменения, а затем одним вызовом метода UpdateBatch пересылает их в базу данных. После вызова метода UpdateBatch для проверки возможного конфликта данных используется свойство Status. Заметим, что пакетный метод обновления можно использовать только при двух типах курсора: Keysetcursor и Staticcursor.

Коллекция Fields содержит все объекты Field объекта Recordset. Каждый объект Field соответствует столбцу во множестве Recordset. Используя свойство Value объекта Field, можно устанавливать или возвращать данные для текущей записи. Используя коллекции, методы и свойства объекта Field, можно выполнять следующие действия:

  • возвращать имя поля с помощью свойства Name;
  • просматривать или изменять данные во множестве Recordset с помощью свойства Value;
  • возвращать основные характеристики поля, используя свойства Type, Precision и NumericScale;
  • возвращать объявленный размер поля с помощью свойства DefinedSize;
  • возвращать действительный размер данных во взятом поле с помощью свойства ActualSize;
  • используя свойство Attribute, определить типы функций, которые можно выполнить с данным полем;
  • с помощью методов AppendChunk и GetChunk, управлять значениями полей, содержащих длинную двоичную или текстовую информацию;
  • используя свойства OriginalValue и UnderlyingValue, разрешать разногласия в значениях полей при пакетном обновлении данных.

Для обращения к объекту Field в коллекции по порядковому номеру или имени используются следующие способы:

Использование объекта 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сделанные изменения вносятся в таблицу.

Читать еще:  Access vba recordset примеры

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

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

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

Примеры использования методов 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».

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

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

Dim S As String

S = «SELECT * INTO [_v2] FROM [_v4] WHERE (([_v4].nn 0))»

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

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector