Відкриття recordset в ado

Відкриття 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.

Схожі статті