Як вважати значення Лічильника

Питання та відповідь, напевно, давно відомі. Але я недавно почав переходити з ДАТ на АДО.
відкриваємо рекордсет. додаємо запис. ЯК дізнатися про призначення лічильника?
Не можу знайти ні в ЕсКуЕль Сервері, ні в Аксесі. Пробував і на віжуал СІ і віжуал Бейсике.
Якщо в Адо. То після оновлення пакетом поле лічильника залишається рівним 0.


У DAO так можна. Значення лічильника при програмуванні в Accesse на DAO формується відразу
rst as DAO.Recordset rst.Addnew ' вже є значення лічильника. наприклад key = rst("key") навіть Update можна зробити потім.
У ADO так не виходить. Рекордсет відв'язаний від бази даних. Після оновлення оновлюється рекордсет. Записи до бази потрапляють лише після виклику UpdateBatch. І лічильник оновлюється драйвером бази (наприклад, SQL або Jet). І ці оновлення назад до рекордсету не потрапляють.

Так, соррі, це з ДАТ та Джетом.

У MS SQL поле identity виходить таким запитом
- Спочатку вставляємо запис INSERT INTO.
-- Отримуємо значення вставленого idenitity SELECT SCOPE_IDENTITY()

Scope_identity звичайно працює. Але тільки в SQL server. Ітехніка роботи інша. Треба викликати процедуру, яка створить новий запис та поверне його номер. А питання чи можна було обійтися лише ADO рекрдсетом. Якщо програма повинна бути універсальною : тобто легко перемикатися з MDB на SQL server, то треба обійтися без вбудованих процедур.
У разі ДАТ допоможе: ADODB.Recordset.BatcHUpdate ADODB.Recordset.OriginalValue
У ADO це не працює.

Тоді напевно найкращий варіант взагалі не використовуватиме лічильник.
Створитипроцедуру, яка буде генерувати значення лічильника, а в таблиці зробити унікальний індекс, щоб ніхто не міг вставити однакові значення. Тобто при кожній вставці спочатку отримуємо значення лічильника (і само собою ми його знаємо). Про всяк випадок ловимо ексепшн при вставці.
Такий варіант буде універсальний IMHO. А написати для кожного SQL найбільш оптимальний варіант – це справа недовга.