![]() |
|
|
![]()
|
|
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Не советую использовать в том виде, в котором предлагается. Букмарка - это по сути указатель на строку в DataSet. И если его закрыли, то гарантировать, что все вернется на свои круги - нельзя. В хелпе прямо сказано - "Allocates a bookmark for the active record in the dataset.". А когда ты закрываешь DataSet, то букмарка указывает непонятно куда. В простейшем случае открыл/закрыл это срабатывает. Но копинуть глубже и можно поиметь проблемы. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
а если в таблице нет ключевого поля?
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Это не очень хорошее проектирование таблиц. По теории надо, чтобы любая запись в таблице могла быть однозначно идентифицирована. Это может быть естесственный ключ - но часто это набор полей и он может быть не маленьким. Представь сколько может быть Сидоровых Николаев Алексеевичей ? Этих полей маловато. Значит придется вводить еще и адреса, телефон. Вообщем нелегкое дело. Поэтому часто вводят (я всегда так делаю) специальное поле ID (на тут как хочешь называй), которое часто делается автоинкрементным и оно для каждой записи уникально. И искать проще, и апдейтить и удалять. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
ADO+MSSQL. Хранимка мне возвращает Поля: Нименование, цена, кол-во, цвет.
После изменения кол-ва, нужно переоткрыть НД, не потеряв тек. запись. Как быть? Вот я и пользуюсь закладками. Хотя и Locate тоже пользуюсь. Я же говорю - это моё дело, чем и как пользоваться. пока не глючит, а Вот если начнёт... |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Дык я не настаиваю. Просто высказываю свое мнение. А из хранимки ID тоже никто не мешает возвращать Ладно, скоро уже офтоп начнется и придет страшный модератор нам грозить. ЛУчше не будем его будить. Тс-с-с-с-с |
|||
|
||||
| Петрович |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Я уже писал. Закладки использовать можно.
Спасибо что напомнил что есть метод BookMarkValid. Без него, я иногда получал Exception. С ним, надеюсь, Exception быть не должно. Однако. В свое время, я вынужден был посмотреть как устроены закладки. По крайней мере реализация заклодок в ADO-компонентах такова, что на самом деле, закладка там это номер записи в наборе данных. Поэтому, если например имеется набор из шести записей:
а текущая запись в нем Витя. Предположим теперь что внешним запросом была удалена запись Петя. Соответственно, после выполнения приведенного тобой кода набор данных станет:
Но, текущей записью станет запись Коля вместо ожидаемой Витя! Можешь проверить. Добавлено @ 22:15
Вот когда речь идет именно иб изменении какой-либо записи, без изменения их количества, тогда закладки вполне подходят. Правда, если ты уверен что другой пользователь в это время не выполнил INSERT/DELETE из этой таблицы. -------------------- Все знать невозможно, но хочется |
||||||
|
|||||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
абсолютно согласен, хотя сам проверю это и сообщу. |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Проверил. Ошибок не выдает, но активная запись становиться, та которая стояла после удаляемой, т.е. Петрович прав.
Добавлено @ 10:11 А вот если удалять последнюю запись, то обязательно "вылетит птичка" Вывод, можно пользоваться не закладками, а DataSet.RecNo, а рекомендательно Locate. |
|||
|
||||
| Петрович |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Добавлено @ 11:31
А если сначала проверять BookMarkValid ? А то, самому лень тестить -------------------- Все знать невозможно, но хочется |
||||
|
|||||
| Akella |
|
||||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
нет, не описАлся. Я имел ввиду, что использование закладок и RecNo - одно и тоже Добавлено @ 14:14
а если сначала проверять, то всё будет в ажуре, иначе нафига ж нужна проверка Добавлено @ 14:15 вопрос лишь в том, что быстрее: закладки или RecNo??? |
||||
|
|||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 6 Всего: 55 |
Ну, нафига это вопрос риторический. На самом деле, нигде не сказано что присваивание закладки может вызвать исключение! Например про Locate вообще явным образом сказано что возвращает False если искомая запись не найдена. Но, как я уже писал в другом топике, это иногда вызывает исключение -------------------- Все знать невозможно, но хочется |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |