Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимальное обновление данных, нужен совет 
:(
    Опции темы
AntonSaburov
Дата 9.8.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата(dsergey @ 9.8.2005, 14:30)
что, освобождать не советуешь?

Не советую использовать в том виде, в котором предлагается. Букмарка - это по сути указатель на строку в DataSet. И если его закрыли, то гарантировать, что все вернется на свои круги - нельзя.

В хелпе прямо сказано - "Allocates a bookmark for the active record in the dataset.". А когда ты закрываешь DataSet, то букмарка указывает непонятно куда. В простейшем случае открыл/закрыл это срабатывает. Но копинуть глубже и можно поиметь проблемы.
PM MAIL WWW ICQ   Вверх
Akella
Дата 9.8.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



а если в таблице нет ключевого поля?
PM MAIL   Вверх
AntonSaburov
Дата 9.8.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата(dsergey @ 9.8.2005, 14:43)
а если в таблице нет ключевого поля?

Это не очень хорошее проектирование таблиц. По теории надо, чтобы любая запись в таблице могла быть однозначно идентифицирована. Это может быть естесственный ключ - но часто это набор полей и он может быть не маленьким.

Представь сколько может быть Сидоровых Николаев Алексеевичей ? Этих полей маловато. Значит придется вводить еще и адреса, телефон. Вообщем нелегкое дело. Поэтому часто вводят (я всегда так делаю) специальное поле ID (на тут как хочешь называй), которое часто делается автоинкрементным и оно для каждой записи уникально. И искать проще, и апдейтить и удалять.
PM MAIL WWW ICQ   Вверх
Akella
Дата 9.8.2005, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



ADO+MSSQL. Хранимка мне возвращает Поля: Нименование, цена, кол-во, цвет.
После изменения кол-ва, нужно переоткрыть НД, не потеряв тек. запись.
Как быть?
Вот я и пользуюсь закладками.

Хотя и Locate тоже пользуюсь. Я же говорю - это моё дело, чем и как пользоваться. пока не глючит, а Вот если начнёт...
PM MAIL   Вверх
AntonSaburov
Дата 9.8.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата(dsergey @ 9.8.2005, 15:11)
Я же говорю - это моё дело, чем и как пользоваться. пока не глючит, а Вот если начнёт...

Дык я не настаиваю. Просто высказываю свое мнение. А из хранимки ID тоже никто не мешает возвращать smile.

Ладно, скоро уже офтоп начнется и придет страшный модератор нам грозить. ЛУчше не будем его будить. Тс-с-с-с-с smile
PM MAIL WWW ICQ   Вверх
Петрович
Дата 9.8.2005, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Я уже писал. Закладки использовать можно.
Спасибо что напомнил что есть метод BookMarkValid. Без него, я иногда получал Exception. С ним, надеюсь, Exception быть не должно.
Однако. В свое время, я вынужден был посмотреть как устроены закладки. По крайней мере реализация заклодок в ADO-компонентах такова, что на самом деле, закладка там это номер записи в наборе данных. Поэтому, если например имеется набор из шести записей:
Код

Вася
Петя
Маша
Витя
Коля
Дима

а текущая запись в нем Витя.
Предположим теперь что внешним запросом была удалена запись Петя.
Соответственно, после выполнения приведенного тобой кода набор данных станет:
Код

Вася
Маша
Витя
Коля
Дима

Но, текущей записью станет запись Коля вместо ожидаемой Витя!
Можешь проверить.

Добавлено @ 22:15
Цитата(dsergey @ 9.8.2005, 16:11)
После изменения кол-ва, нужно переоткрыть НД, не потеряв тек. запись.

Вот когда речь идет именно иб изменении какой-либо записи, без изменения их количества, тогда закладки вполне подходят. Правда, если ты уверен что другой пользователь в это время не выполнил INSERT/DELETE из этой таблицы.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Akella
Дата 11.8.2005, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата
Правда, если ты уверен что другой пользователь в это время не выполнил INSERT/DELETE из этой таблицы.

абсолютно согласен, хотя сам проверю это и сообщу.
PM MAIL   Вверх
Akella
Дата 11.8.2005, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Проверил. Ошибок не выдает, но активная запись становиться, та которая стояла после удаляемой, т.е. Петрович прав. smile
Добавлено @ 10:11
А вот если удалять последнюю запись, то обязательно "вылетит птичка" smile (Exception smile ).

Вывод, можно пользоваться не закладками, а DataSet.RecNo, а рекомендательно Locate. smile smile
PM MAIL   Вверх
Петрович
Дата 11.8.2005, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(dsergey @ 11.8.2005, 11:07)
Вывод, можно пользоваться не закладками, а DataSet.RecNo, а рекомендательно Locate

smile. Про DataSet.RecNo ты случаем не описался? Как я писал, закладки на нем и построены. Соответственно, с ним те же проблемы что и с закладками.
Добавлено @ 11:31
Цитата(dsergey @ 11.8.2005, 11:07)
А вот если удалять последнюю запись, то обязательно "вылетит птичка"  (Exception  ).

А если сначала проверять BookMarkValid ? А то, самому лень тестить smile


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Akella
Дата 11.8.2005, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата
Про DataSet.RecNo ты случаем не описался?

нет, не описАлся. Я имел ввиду, что использование закладок и RecNo - одно и тоже smile
Добавлено @ 14:14
Цитата
А если сначала проверять BookMarkValid ?

а если сначала проверять, то всё будет в ажуре, иначе нафига ж нужна проверка smile
Добавлено @ 14:15
вопрос лишь в том, что быстрее: закладки или RecNo???
PM MAIL   Вверх
Петрович
Дата 11.8.2005, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(dsergey @ 11.8.2005, 15:13)
а если сначала проверять, то всё будет в ажуре, иначе нафига ж нужна проверка 

Ну, нафига это вопрос риторический. На самом деле, нигде не сказано что присваивание закладки может вызвать исключение!
Например про Locate вообще явным образом сказано что возвращает False если искомая запись не найдена. Но, как я уже писал в другом топике, это иногда вызывает исключение smile.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.