![]() |
|
![]() ![]() ![]() |
|
ArtemRubtsov |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
БД MS SQL
компонент ADOQuery Есть задача добавить запись в таблицу БД, при этом для нее будет сгенерировано некое уникальное значение счетчика Вопрос как получить значение этого счетчика для добаваляемой записи, чтобы потом эту запись можно было найти по этому уникальному ID? так не работает, выдает ошибку в строке 5, пишет что поле ID не найдено
Это сообщение отредактировал(а) ArtemRubtsov - 20.11.2007, 23:02 |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
Примерно так
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
не знаю как в MS SQL, но в Oracle есть Sequencies
попробуем без всяких примочек, как если бы мы работали с Paradox
хотя мой совет - использовать процедуру, в которой: 1. сделать инсерт 2. вернуть ID а то ведь первый ExecSQL мог и не выполниться Добавлено через 55 секунд имеется ввиду процедуру SQL сервера -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
а если между
и
Произойдёт: 1. Исключение 2. добавление новой записи другим клиентом |
||||
|
|||||
pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
Akella, поэтому я и написал:
которая после инсерта вернет ID -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
ArtemRubtsov |
|
||||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
спасибо я попробую так |
||||
|
|||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
ArtemRubtsov, попробуй мой код весь запихать в ADOQuery и выполнить Open
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
SergXPI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 28.9.2005 Где: г.Харьков Репутация: нет Всего: нет |
Я использую следующий прием.
При вставке новой записи в любое поле типа String пишу 'новая запись' (можно написать все что угодно). Суть в том, что по этой записи ты сможеш всегда идентифицировать новую запись и определить ее ID
для БД MS SQL суть таже, нужно только синтаксис поменять Это сообщение отредактировал(а) SergXPI - 22.11.2007, 17:30 |
|||
|
||||
Deniz |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
SergXPI, нельзя так делать, если кто-то в тот же момент добавит - будет 2, 3, 4 и т.д. новых записей.
Вариант может пройти только если есть возможность прямо управлять транзакциями с определенным уровнем изоляции и коммитеть только после выборки ID. Вместо 'новая запись' на клиенте можно 1 раз сгенерировать GUID и ставить уже его. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
SergXPI |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 28.9.2005 Где: г.Харьков Репутация: нет Всего: нет |
Если пользователей несколько, тогда
где, N - уникальный номер пользователя |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |