Dima |
Отправлено: 21.08.2003, 14:42 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
Как узнать значение ключа у только-что введенной записи?
Записи (типа лога) вводятся в таблицу с первичным ключом причем записи достаточно однотипные, в другую таблицу вводится расшифровка этих записей с внешним ключом. |
|
iAlexander |
Отправлено: 21.08.2003, 17:00 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
А запись вводится средствами Билдера типа
Table->Append()
...
Table->Post()
?
ну тогда после добавления взять да сделать
AnsiString KeyValue = Table->FieldByName("YourKey")->AsString;
Но: либо это поле должно быть в списке полей Table, либо таковой спислк должен быть пуст вообще. |
|
Гость_Dima |
Отправлено: 21.08.2003, 19:44 |
|
Не зарегистрирован
|
QUOTE (Dima @ 21/08/2003, 15:44) | Как узнать значение ключа у только-что введенной записи?
Записи (типа лога) вводятся в таблицу с первичным ключом причем записи достаточно однотипные, в другую таблицу вводится расшифровка этих записей с внешним ключом. |
BD MS SQL Server
Записи вводятся с помощью Insert |
|
iAlexander |
Отправлено: 22.08.2003, 14:20 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
В данном случае разницы нет. Post(), кажется, не перемещает указатель активной записи, а Insert() как раз и позиционирует его на вставляемую, так что после Post'a делай
AnsiString KeyValue = Table->FieldByName("YourKey")->AsString;
или ->AsInteger; |
|
Dima |
Отправлено: 25.08.2003, 08:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
Я наверно не совсем правильно выразился.
Все вставки происходят через Query. Загружать таблицу в память по мойму не очень эффективно. Это всеволишь лог! да и таблицы большие.
На данный момент у меня только одно решение. Я после Insert-а делаю Selct на выборку максимального индекса из таблицы. Вставить Select непосредственно в Insert не получается, т.к. запросы динамические (Insert Into tbl (nn,mm) Value(?,?))
Есть ли другие решения ? |
|
LeeMouse |
Отправлено: 04.09.2003, 11:27 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 79
|
Это НЕ решение... Полный инкоррект при совместном доступе. Используй хранимую процедуру для вставки, которая будет возвращать тебе ключ вставленной записи.
Подсказка: на стороне серверна есть волшебная функция SCOPE_IDENTITY(), которая корректно отдаёт поле со свойством identity для только что вставленной записи. |
|
Monster |
Отправлено: 15.09.2003, 10:32 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 10
|
Если ключевое поле у тебя — Identity, то LeeMouse прав: лучшее, это SCOPE_IDENTITY(). Если нет, то единственный способ — открыть транзакцию, заблокировать всю таблицу, добавить запись, считать максимальный индекс, закрыть транзакцию(блокировка снимется автоматически).
Это надежный способ, но осложнения от него, ты надеюсь представляешь... |
|
Dima |
Отправлено: 19.09.2003, 08:51 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
Большое спасио LeeMouse. Всё работает. |
|