| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Добавление записи в НД |
| Автор: NieL 27.2.2009, 11:24 | ||||
Необходимо добавить запись в таблицу БД и установить ее текущей. Пока что cделал что-то типа:
Но тут возник вопрос, если с базой буде работать одновременно несколько десятков пользователей, какова вероятность нарваться не на "свою" записть (Q.Last). Или же лучше делать добавление через через TTable.
|
| Автор: Kbl4AH 27.2.2009, 11:30 |
| 2-й вариант имхо лучше... во-первых, не на свою не нарвешься, во-вторых, доп. запрос не требуется. |
| Автор: pseud 27.2.2009, 12:29 | ||
| оба варианта плохи: 1. Зачем Last если нам известен (я так понимаю уникальный) id? Почему тогда не Locate? 2. С детства аллергия на TTable. Добавлено через 1 минуту и 30 секунд -------- да и
Last можно сделать в выборке. а выборки в Q нет. |
| Автор: Deniz 27.2.2009, 12:36 | ||
NieL, а как насчет правил написания сообщения?
Kbl4AH, про TTable лучше вообще забыть. |
| Автор: NieL 27.2.2009, 12:51 | ||||||
link_id - не является уникальным id, он принимает значения в диапазоне 1..3, а Уникальный id (Item_id) генерится автоматически при добавлении. C
1. DBISAM 2. свой набор компонент постовляемый с базой (в принципе аналог BDE) |
| Автор: Deniz 27.2.2009, 13:21 |
| а там есть возможность получить id только что вставленной тобой записи? |
| Автор: NieL 27.2.2009, 13:31 | ||
Но ведь в этом случае есть шанс нарваться не на "свою" запись? |
| Автор: pseud 27.2.2009, 13:37 |
шанс мизерный |
| Автор: Kbl4AH 27.2.2009, 13:39 | ||
pseud, Deniz... причем здест Тейбл? Главное есть Датасет.... а если есть Датасет, то после
будет активна именно добавленная запись... или я чего-то не понимаю |
| Автор: NieL 27.2.2009, 13:43 | ||
Кажется нашел способ:
Но возможно в нем есть недостатки? |
| Автор: pseud 27.2.2009, 14:37 |
| Kbl4AH, возможно с логикой использования TTable все нормально. Но я не хочу его обсуждать впринципе. Потому как: Добавлено через 1 минуту и 45 секунд вопрос сугубо к спецам DBISAM. но что-то мне подсказывает, что select @@identity вернет следующее значение счетчика. |
| Автор: Kbl4AH 27.2.2009, 14:38 |
Я его сам никогда не использовал... Я про случай DBGrid-TDataSource-TDataSet |
| Автор: pseud 27.2.2009, 14:57 | ||||
чтоб сработал
DataSet должен быть с двунапарвленным курсором (тот самый TTable) именно этого я и не люблю. |
| Автор: NieL 27.2.2009, 15:03 |
| "Значение полю со свойством IDENTITY присваивается автоматически в момент создания новой записи. Новое значение - это последнее использованное значение плюс некоторая фиксированная величина. Обратите внимание, новое значение опирается не на максимальное значение в существующих записях, а на последнее использованное значение. Это значит, что записи с последним использованным значением физически может не существовать, тем не менее, это значение будет использовано.". В моем случае при каждом добавлении будет возвращено значение соответствующее значению уникальной записи, или я не прав? |
| Автор: Kbl4AH 27.2.2009, 15:13 |
а разве бывают DataSet с однонаправленным курсором? какие? |
| Автор: pseud 27.2.2009, 15:16 | ||||
повторяю: вопрос сугубо к спецам DBISAM. а теперь вопрос к тебе - транзакции поддерживаются? процедуры? Добавлено @ 15:21 давай отойдем от понятий "одно/двунаправленные". чтоб нас не обвинили в делитантстве. чем плох TTable - он открывает полный доступ первому открывшему таблицу и закрывает всем остальным. о многопользовательском режиме сразу можно забыть. Добавлено @ 15:23
Добавлено @ 15:24 да к тому же выгребает абсолютно все записи на клиента. блин несу получепуху от недостатка времени. обещал себе не трогать его и не буду. |
| Автор: Akella 27.2.2009, 16:33 | ||
А нет ли у этой СУБД поддержки returning?
|