Remkomplekty.ru

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

Recordset vba excel

Базы данных и ADO Открытие Recordset в ADO/VBA

9.5.1 Открытие Recordset

Открытие Recordset, метод Open(), передача запроса при открытии Recordset

Обычно следующий этап после установки соединения — создание объекта Recordset и работа с ним.

Что такое объект Recodrset? Само слово Recodrset расшифровывается как Set of Records, то есть набор записей. Проще всего представить его как табличку (аналогичную таблицам в Excel), которая находится в оперативной памяти компьютера. Однако у Recordset есть принципиальные отличия от таблиц Excel:

  • Excel не следит за «строгостью» таблиц. На предприятиях часто можно встретить таблицы, в середину которых вставлены, например, промежуточные итоги по группам или заметки. Recordset — это «строгая» таблица. В ней четко определены столбцы и строки и разрывов она не допускает (хотя какие-то значения на пересечении строк и столбцов вполне могут быть пустыми);
  • в таблице Excel в одном столбце без проблем можно использовать самые разные значения — числовые, даты времени, строковые, формулы и т.п. В Recordset для каждого столбца определяется тип данных и значения в этом столбце должны соответствовать этому типу данных.

Recordset обычно создается на основе данных, полученных с источника (но может быть создан и заполнен вручную), в которых предусмотрены столбцы (Fields) и строки (Row). Создание объекта Recordset и заполнение его данными с источника в самом простом варианте выглядит так (подразумевается, что мы открыли при помощи объекта cn соединение с учебной базой данных Northwind на SQL Server):

Dim rs As New ADODB.Recordset

rs.Open «customers», cn

Убедиться, что Recordset действительно создан и существует, можно, например, при помощи строки

При открытии Recordset вполне могут возникнуть ошибки, поэтому рекомендуется, как обычно, использовать обработчик ошибок. Специальной коллекции Errors в Recordset не предусмотрено, поэтому придется обойтись стандартным объектом Err.

В нашем примере мы открыли таблицу Customers целиком. Однако это — не единственный (и не лучший) способ извлечения данных с источника. Для метода Open() рекомендуется использовать запрос на языке SQL. Например, в нашем случае можно было бы использовать такой код:

rs.Open «select * from dbo.customers», cn

Почему запрос использовать лучше:

  • есть возможность указать фильтр Where (условие — обязательно в одинарных кавычках) и скачать в Recordset не все записи, а только нужные вам;
  • есть возможность точно так же ограничить число возвращаемых столбцов — опять-таки сокращение объема передаваемых данных и уменьшение расхода памяти;
  • есть возможность использовать джойны, функции SQL, сортировку на источнике данных и множество полезных дополнительных возможностей.

Очень часто в реальных приложениях текст запроса «склеивается» из кусочков, которые поступают из разных мест. Например, пользователь выбрал в ниспадающем списке имя заказчика — и для события Change для ниспадающего списка тут же сработала процедура, которая выполнила запрос на SQL Server, получив данные для этого заказчика, и присвоила полученные значения другим элементам управления. В нашем случае соответствующая строка кода может выглядеть так:

rs.Open » select * from dbo.customers Where CompanyName = » & «‘» & ComboBox1.Value _ & «‘» , cn

Набор символов «‘» — это одинарная кавычка внутри двух двойных. Такая конструкция нужна, чтобы текст запроса мог выглядеть, например, так:

select * from dbo.customers Where CompanyName = ‘Alfreds Futterkiste’

Причина проста — в языке SQL строковые значения нужно заключать в одинарные кавычки.

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

И еще один практический момент. Конечно, для работы с базами данных знать язык запросов SQL очень полезно. Литературы по нему очень много, и его вполне реально освоить за несколько дней. Однако, если вы — обычный пользователь и не имеете об языке SQL никакого представления, ничего страшного. Просто открывайте таблицы целиком без всяких запросов — все остальное можно будет сделать средствами VBA.

Recordset vba excel

Замечания
Объект Recordset представляет набор записей в основной таблице или набор записей, который получается в результате выполнения запроса.
Объекты Recordset используются для обработки данных в базе данных на уровне записи. При работе с объектами доступа к данным (DAO) почти все операции выполняются с помощью объектов Recordset. Каждый объект Recordset состоит из записей (строк) и полей (столбцов). Существуют объекты Recordset пяти типов:

  1. Объект Recordset типа таблицы — программное представление основной таблицы; используется для добавления, изменения или удаления записей из отдельной таблицы базы данных (только в рабочей области Microsoft Jet).
  2. Объект Recordset типа динамического набора записей — набор обновляемых записей, полученный в результате выполнения запроса. Объект Recordset типа динамического набора записей позволяет добавлять, изменять или удалять записи в основной таблице или таблицах. В объекте Recordset этого типа динамического набора могут содержаться поля из одной или нескольких таблиц базы данных. Этот тип объектов соответствует указателю ключевого набора записей ODBC.
  3. Объект Recordset типа статического набора записей — статическая копия набора записей, используемая для поиска данных или создания отчетов. Объект Recordset типа статического набора записей может содержать поля из одной или нескольких таблиц базы данных, но не допускает обновления полей. Этот тип объектов соответствует указателю статического набора записей ODBC.
  4. Объект Recordset типа статического набора записей с последовательным доступом — аналогичен статическому набору записей с тем лишь исключением, что в нем отсутствует указатель. Пользователь имеет возможность прокручивать записи только вперед. Это повышает быстродействие в ситуациях, когда достаточен однократный проход по набору записей. Этот тип объектов соответствует указателю набора записей с последовательным доступом ODBC.
  5. Объект Recordset динамического типа результирующий набор записей запроса по одной или нескольким основным таблицам, в котором допускается добавление, изменение или удаление записей. В таком объекте Recordset отображаются записи, добавляемые, удаляемые или изменяемые в основных таблицах другими пользователями. Этот тип объектов соответствует динамическому указателю ODBC (только в рабочей области ODBCDirect).

При создании нового объекта Recordset тип объекта определяется с помощью аргумента тип метода OpenRecordset.
В рабочей области Microsoft Jet, если аргумент тип не задан, механизм DAO пытается создать тип объекта Recordset с максимально возможными функциональными характеристиками, начиная с таблицы. Если таблицу создать не удается, делается попытка создать динамический набор записей, затем статический набор записей и наконец, набор записей с последовательным доступом.
В рабочей области ODBCDirect, если аргумент тип не задан, механизм DAO пытается создать тип объекта Recordset, обеспечивающий максимально быстрое выполнение запроса, начиная с набора записей с последовательным доступом. Если объект этого типа создать невозможно, механизм DAO делает попытку создать статический набор записей, затем динамический набор записей, и наконец, объект Recordset динамического типа.
При создании объекта Recordset на основе неприсоединенного объекта TableDef в рабочей области Microsoft Jet создаются объекты Recordset типа таблицы. На основе присоединенных таблиц или таблиц в базах данных ODBC, подключенных к ядру Microsoft Jet, могут быть созданы только объекты Recordset типа динамического набора записей или статического набора записей.
Новый объект Recordset автоматически добавляется в семейство Recordsets при открытии объекта и автоматически удаляется из семейства при закрытии объекта.
При описании в программе объекта Recordset и содержащего его объекта Database с помощью объектных переменных необходимо обеспечить, чтобы эти переменные имели одинаковую область определения или одинаковое время жизни. Например, при описании общей переменной, представляющей объект Recordset, необходимо обеспечить, чтобы переменная, представляющая объект Database, содержащий объект Recordset, также была общей, либо описать эту переменную в процедуре Sub или Function с ключевым словом Static.
В приложении допускается определение произвольного числа объектных переменных, представляющих объект Recordset. Разные объекты Recordset могут иметь доступ к одним таблицам, запросам и полям без возникновения конфликтов.
Объекты Recordset типа динамического набора записей, статического набора записей и статического набора записей с последовательным доступом сохраняются в локальной оперативной памяти. Если в оперативной памяти не хватает места, ядро базы данных Microsoft Jet сохраняет избыточные данные в каталоге временных файлов на диске. Если и этот объем окажется недостаточным, возникает перехватываемая ошибка.
Объекты Recordset по умолчанию помещаются в семейство Fields. Используемым по умолчанию свойством объекта Field является свойство Value (значение). Эти используемые по умолчанию характеристики позволяют упростить программу.
Если созданный объект Recordset содержит записи, то текущей записью становится первая запись. Если записи в объекте отсутствуют, свойство RecordCount получает значение 0, а свойства BOF и EOF значение True.
Изменить положение указателя текущей записи позволяют методы MoveNext, MovePrevious, MoveFirst и MoveLast. Для объектов Recordset типа статического набора записей с последовательным доступом поддерживается только метод MoveNext. При выполнении цикла по всем записям с помощью методов Move («прохода» по объекту Recordset) свойства BOF и EOF используются для проверки начальной и конечной границы объекта Recordset.
Для объектов Recordset типа динамического статического набора записей в рабочей области Microsoft Jet допускается также использование методов группы Find, таких как FindFirst, позволяющих найти запись, удовлетворяющую определенным условиям. Если запись не обнаруживается, свойство NoMatch получает значение True. Для объектов Recordset типа таблицы допускается сканирование записей с помощью метода Seek.
Тип созданного объекта Recordset задается свойством Type, а возможность изменения записей в объекте определяется свойством Updatable.
Сведения о структуре основной таблицы, такие как имя и тип данных каждого поля (объект Field) и индекса (объект Index) сохраняются в объекте TableDef.
При ссылках на объект Recordset используют его порядковый номер в семействе или значение свойства Name (имя):
Для одного источника данных или базы данных допускается открытие нескольких объектов Recordset, что приводит к образованию повторяющихся имен в семействе Recordsets. В этом случае необходимо присваивать объекты Recordset объектным переменным и ссылаться на них по именам переменных.

Читать еще:  Excel две строчки в одной ячейке

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

9.5 Объект Recordset и коллекция Fields

Открытие Recordset, метод Open(), передача запроса при открытии Recordset

Обычно следующий этап после установки соединения — создание объекта Recordset и работа с ним.

Что такое объект Recodrset? Само слово Recodrset расшифровывается как Set of Records, то есть набор записей. Проще всего представить его как табличку (аналогичную таблицам в Excel), которая находится в оперативной памяти компьютера. Однако у Recordset есть принципиальные отличия от таблиц Excel:

  • Excel не следит за «строгостью» таблиц. На предприятиях часто можно встретить таблицы, в середину которых вставлены, например, промежуточные итоги по группам или заметки. Recordset — это «строгая» таблица. В ней четко определены столбцы и строки и разрывов она не допускает (хотя какие-то значения на пересечении строк и столбцов вполне могут быть пустыми);
  • в таблице Excel в одном столбце без проблем можно использовать самые разные значения — числовые, даты времени, строковые, формулы и т.п. В Recordset для каждого столбца определяется тип данных и значения в этом столбце должны соответствовать этому типу данных.

Recordset обычно создается на основе данных, полученных с источника (но может быть создан и заполнен вручную), в которых предусмотрены столбцы (Fields) и строки (Row). Создание объекта Recordset и заполнение его данными с источника в самом простом варианте выглядит так (подразумевается, что мы открыли при помощи объекта cn соединение с учебной базой данных Northwind на SQL Server):

Dim rs As New ADODB.Recordset

rs.Open «customers», cn

Убедиться, что Recordset действительно создан и существует, можно, например, при помощи строки

При открытии Recordset вполне могут возникнуть ошибки, поэтому рекомендуется, как обычно, использовать обработчик ошибок. Специальной коллекции Errors в Recordset не предусмотрено, поэтому придется обойтись стандартным объектом Err.

В нашем примере мы открыли таблицу Customers целиком. Однако это — не единственный (и не лучший) способ извлечения данных с источника. Для метода Open() рекомендуется использовать запрос на языке SQL. Например, в нашем случае можно было бы использовать такой код:

rs.Open «select * from dbo.customers», cn

Почему запрос использовать лучше:

  • есть возможность указать фильтр Where (условие — обязательно в одинарных кавычках) и скачать в Recordset не все записи, а только нужные вам;
  • есть возможность точно так же ограничить число возвращаемых столбцов — опять-таки сокращение объема передаваемых данных и уменьшение расхода памяти;
  • есть возможность использовать джойны, функции SQL, сортировку на источнике данных и множество полезных дополнительных возможностей.

Очень часто в реальных приложениях текст запроса «склеивается» из кусочков, которые поступают из разных мест. Например, пользователь выбрал в ниспадающем списке имя заказчика — и для события Change для ниспадающего списка тут же сработала процедура, которая выполнила запрос на SQL Server, получив данные для этого заказчика, и присвоила полученные значения другим элементам управления. В нашем случае соответствующая строка кода может выглядеть так:

rs.Open » select * from dbo.customers Where CompanyName = » & «‘» & ComboBox1.Value _ & «‘» , cn

Набор символов «‘» — это одинарная кавычка внутри двух двойных. Такая конструкция нужна, чтобы текст запроса мог выглядеть, например, так:

select * from dbo.customers Where CompanyName = ‘Alfreds Futterkiste’

Причина проста — в языке SQL строковые значения нужно заключать в одинарные кавычки.

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

И еще один практический момент. Конечно, для работы с базами данных знать язык запросов SQL очень полезно. Литературы по нему очень много, и его вполне реально освоить за несколько дней. Однако, если вы — обычный пользователь и не имеете об языке SQL никакого представления, ничего страшного. Просто открывайте таблицы целиком без всяких запросов — все остальное можно будет сделать средствами VBA.

Читать еще:  Com excel application

Как в Access на VBA выгрузить Recordset в Excel?

Всем привет! Материал сегодня будет посвящен рассмотрению возможности Access выгружать Recordset в Excel на VBA. Данный способ достаточно простой и предполагает использование Recordset как формы, так и специально созданного объекта.

Ранее мы с Вами уже рассматривали возможность выгрузки данных из Access в Excel в материале «Выгрузка данных из Access в шаблон Word и Excel», но там мы использовали специально созданный шаблон, что не совсем удобно, если например, нам необходимо выгрузить просто набор данных с заголовками полей.

Также если кого интересует, недавно мы рассматривали возможность выгрузки данных из базы MS SQL Server в формат CSV (текстовый файл с разделителями) с помощью VBA Access в материале «Экспорт данных в CSV файл из Microsoft SQL Server, используя Access 2003».

Сейчас я покажу простой пример реализации возможности выгружать наборы данных с заголовками из базы MS SQL Server средствами VBA Access в Excel.

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

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

Примечание! В качестве примера источником данных у меня будет выступать MS SQL Server 2012 Express, а в качестве клиента ADP проект Access 2003. Также на компьютере клиенте установлен Microsoft Office 2010.

Исходные данные

Допустим, на сервере у нас есть таблица TestTable.

И она содержит следующие данные.

Также допустим, что в ADP проекте Access у нас есть форма, источником данных которой выступает наша тестовая таблица TestTable.

Код VBA для выгрузки Recordset формы в Excel

Сначала давайте рассмотрим пример выгрузки объекта Recordset формы в Excel. Для этого добавляем на форму кнопку, для примера я ее назвал RSExportInExcel. В обработку события нажатие кнопки вставляем следующий код, я его прокомментировал:

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

Примечание! Свойства HorizontalAlignment и VerticalAlignment могут не работать, если на компьютере не установлен Microsoft Office 2010, поэтому в случае возникновения ошибок связанных с этими свойствами просто закомментируйте их.

Код VBA для выгрузки объекта Recordset в Excel

Теперь давайте напишем код, который позволяет выгружать объект Recordset, данные которого получены, скажем с помощью запроса к базе данных. Для этого добавьте еще одну кнопку (я ее назвал RSExportInExcel2) и вставьте немного модифицированный код:

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

На этом у меня все! Надеюсь, материал был Вам полезен, пока!

Recordset vba excel

In the ADODB Recordset .filter is a property.
Enter the filter criteria as string in the property .Filter. Concatenate the filter criteria for each field with the operators AND and OR.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«first field», «first record»)
.AddNew Array(0,1), Array(«first field», «second record»)
.Update

.Filter= » text_001=’first field’ AND text_002<>‘second record’ «

The actual filter can be removed by assigning the value 0 to the property .Filter.
The property .RecordCount will now show the number of all records in the ADODB Recordset.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«first field», «first record»)
.AddNew Array(0,1), Array(«first field», «second record»)
.Update

.Filter= » text_001=’first field’ AND text_002<>‘second record’ «

There are 4 methods to save the contents of an ADODB RecordSet.

In VBA the data can be retrieved as a string
— c00 = .GetString

In VBA data can be retrieved as an Array
— sn = .GetRows

In Excel data can be written into a worksheet
— Range.CopyFromRecordset

Data can be saved as XML-file or as ADTG-file
— .Save

You can read the complete recordset and put it into a string using the method .Getstring.
That string can be assigned to a variable.
The default record separator is vbCrLf: Chr(13) & Chr(10).
The default field separator is a TAB: vbTab: Chr(9).
In the 3rd argument of the method .Getstring you can specify the field separator.
In the 4th argument you can specify which record separator should be used.

The method .GetRows stores the values in the Recordset into a 2-dimensional Array.

If the Excel VBA library is in memory we can use the Excel function Transpose.
Caveat 1 : the data shouldn’t contain any NULL values. Transpose can’t handle those.
Caveat 2 : the upper limit to the data is approx. 5200. An Array greater than that can’t be transposed by this Excel function.

The Excel function Transpose is restricted to approx. 5200 records.
The ActiveX Listbox has no such constraints.
A Listbox can be populated by its property .List or .Column.
Those properties can be read too.
The .List property results in an Array that is the transposed property .Column Array and vice versa.
To transpose an Array you assign it to the property .List en read it by its property .Column, or the other way around.

Based on the resulting Array of .GetRows we can create a new empty Array, switching rows and columns.
Then the corresponding values can be entered into the new Array.

sn = .GetRows
ReDim sq(UBound(sn, 2), UBound(sn))

For j = 0 To UBound(sn, 2)

The method .Getrows has the option to specify the number of records that should be retrieved.
If you leave the fist argument empty, all records in the Recordset will be read.
If you specify the number of records to be retrieved in the first argument, the position from which these records should be read is required too.
The second argument serves that purpose.
In the second argument the actual recordpointer is represented by 0
The first record is indicated by 1
The last record is indicated by 2

Read 3 records from the recordset, starting at the first record

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.AddNew Array(0,1), Array(«field 3.1», «third record»)
.AddNew Array(0,1), Array(«field 4.1», «fourth record»)
.AddNew Array(0,1), Array(«field 5.1», «fifth record»)
.Update

The method .Getrows reads all fields by default.
You can use the third argument to return only a selection of fields.
In the third argument of the method .Getrows you can enter the field name of the field that should be returned.
That can be ‘hard coded’ of by referring to the property .Name of a field.

Читать еще:  Как округлить сумму в excel

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open
.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.Update

sn = .GetRows(,, .Fields(0).Name )

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.Update

sn = .GetRows(,,Array (.Fields(0).Name,.Fields(1).Name ))

If you want to restrict the fields to be read you need an Array containing field names.
In that Array you can also determine the order in which the fields and their data will be presented.
This offers an opportunity to control the resulting Array by row and by column completely.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Fields.Append «text_003», 129, 90
.Open

.AddNew Array(0,1,2), Array(«field 1.1», «first record»,»old»)
.AddNew Array(0,1,2), Array(«field 2.1», «second record»,»new»)
.Update

sn = .GetRows(,,Array( .Fields(2).Name,.Fields(0).Name ))

Excel has its own method to retrieve data form a recordset.
This method is bound to a cell in a worksheet.
The data in all records starting from the ‘actual’ record ( = recordpointer) will be copied into the worksheet.
If you need all records in the recordset you will have to move the recordpointer to the first record in the recordset.
In this method the recordset will be referred to by its property .DataSource.
In the second argument of the method .CopyFromRecordset you can specify the maximum number of records to be retrieved.
In the third argument the maximum number of fields.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.Update

The method .Save in the ADODB Recordset library saves the recordset as a file.
In the first argument of this method: the fullname (path and file name) of the file.
In the second argument which kind of file you want to save.
By default the method saves the file as .ADTG (Advanced Data Table Gram) file.
The ADODB.recordset library can open an ADTG file very simply.
The method .Save can’t overwrite or replace a file.
If a file already exists .Save will generate an error.
So check the file’s existence before saving it.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open
.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.Update

If Dir(» G:OFexample.adtg «)=»» Then .save » G:OFexample.adtg «

Enter the constant ‘adPersistXML’ or the value 1 in the 2nd argument of the method .Save to save the Recordset als an XML file.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.Update

If Dir(» G:OFexample.XML «)=»» Then .save » G:OFexample.XML «, 1

The contents of an Excel worksheet can be transformed into an ADODB recordset.
The method .Save can save this Recordset as an XML file.
So you can convert an Excel worksheet into an XML file in 2 lines of VBA Code.

.Save » G:OFconversion.xml «, 1

We have to distinguish between records that are part of an independent Recordset and records that are part of a linked file.

The method .delete deletes a record.
By default, if the argument of the method is empty, the method deletes the ‘active’ record.
If the argument is 1, the method performs its default deletion.
The method deletes created records before they have been added by the method .Update or when they are already part of the recordset (after .Update).

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)

.Delete ‘ deletes the second record
.Update

.Delete ‘ deletes the active (first) record

To delete several records at the same time the argument of the method .Delete has the value 2.
It looks as if this is only possible in combination with the .Filter property.

To delete records that have not yet been added to the recordset by the method .Update.
In this case we use the .Filter property to filter all records that have not yet been added to the database.
The .Filter value to filter these is adFilterPendingRecords (1)

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)

.Filter = 1
.Delete 2
.Filter =0

First we have to filter all records in the recordset.
In this case the only way to do so is to set the value of .Filter to 1.
Then we can apply the method .Delete with its argument value = 2.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.Update

.Filter = 1
.Delete 2
.Filter = 0

If you use a loop you can delete each ‘actual’ record with the default .delete method, without any specified argument.
You don’t need a filter either.

.Fields.Append «text_001», 129, 120
.Fields.Append «text_002», 129, 80
.Open

.AddNew Array(0,1), Array(«field 1.1», «first record»)
.AddNew Array(0,1), Array(«field 2.1», «second record»)
.Update

In order to be able to delete/adapt a record you must be authorised.
The property .LockType sets the authorisation.
The default value of .Locktype is ReadOnly adLockReadOnly (1).
As soon as you open a file you can set the user’s authorisation by .Locktype in the 4th argument of the .Open method.
If the property .Locktype is set to 2 (adLockPessimistic) the user is authorised to adapt/delete a linked record.

In a linked Access file records will be deleted immediately in the Access file.
If the linked file is an XML file you will have to save the file using .Save.

In a linked Access file records will be deleted immediately in the Access file.
In the case of an ADTG file the recordset must be saved first using .Save.

I wasn’t able to find a method to delete a record in a linked CSV-file.
The following code errors out in the line that contains .Delete.

There is a workaround to delete records in a CSV file.
Use a filter in the SQL string or the property .Filter in the ADODB.Recordset.
Then the non filterd records will be ‘deleted’.
You can’t write the result to the linked file directly.
Store the filtered result in a variable, close the recordset and replace the linked file by the values in the variable.
Or you can save the filtered result in a new CSV file.

In the SQL command

CreateObject(«scripting.filesystemobject»).createtextfile(» G:OFexample.csv «).write c00

I wasn’t able to find a way to delete a record in a linked Excel file.
The following code errors out in the line that contains .Delete.

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