Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

insert


Страницы:   1 2

Ihtiandr ©   (2003-02-18 18:02:00) 

Когда делаю команду Insert новая запись вставляется перед текущей. Хотелось-бы чтобы вставлялась после текущей. Подскажите пожалуйста.


Desdechado   (2003-02-20 14:09:00) [1]

народ, ушли от темы

2 MsGuns © (19.02.03 21:10)
>Вообще не давать редактировать в гриде, а все делать через
>обычные контролы. Запись добавлять запросом, после этого
>"освежать" НД в гриде.
На клиент-сервер это не очень похоже. Особенно если мне нужно уменьшить траффик (а всякие "освежания" его сильно раздувают) или сохранять все пачкой (CachedUpdates). Короче, интерфейсные решения могут быть разные. Иногда удобнее дать пользователю редактировать грид, чтобы у него все перед глазами было, а не только карточка на 1 строчку.

Повторюсь, я вышел из положения StringGrid"ом.

А автора все не видно ...


MsGuns   (2003-02-20 10:57:00) [2]

>Anatoly Podgoretsky © (20.02.03 10:52)

С продвинутыми пользователями так и бывает в основном. Но где их набрать на всех-то нас, продвинутых ?:)
Намного чаще ситуация обратная, когда есть чел (бух, например), которая говорит : "сделайте мне вот так и никак иначе, в противном случае идите вы...". И делаем


Anatoly Podgoretsky   (2003-02-20 10:52:00) [3]

Товарно денежные, просит ввести вводим, просит после этого убрать убираем, перед первым пунктом предупреждаем о последствиях его решения и как правило первый пункт не наступает.


MsGuns   (2003-02-20 10:41:00) [4]

>Соловьев © (20.02.03 09:35)
>не ну мы для них же и работаем, и они нам платят деньги :)

Конечно, но если отношения с заказчиком товарно-денежные. Если же административно-бюрократические, то прав, как всегда, Anatoly Podgoretsky ©


Соловьев   (2003-02-20 09:35:00) [5]

2 DarkGreen ©
не ну мы для них же и работаем, и они нам платят деньги :)


DarkGreen   (2003-02-20 05:20:00) [6]

Извеняюсь за оффтоп, но все таки:
Проблемы с пользователем решает только веревка и мыло, либо для себя, либо для него...


Anatoly Podgoretsky   (2003-02-19 22:02:00) [7]

Решает одназначно, да еще так, что потом пользователь просит убрать эту нумерацию, но сам же просил возможность произвольного упорядочивания.


MsGuns   (2003-02-19 21:52:00) [8]

>Anatoly Podgoretsky © (19.02.03 21:46)
>Последний метод полностью решает все проблемы с пользователем.

Ах, если бы, если бы ...


Anatoly Podgoretsky   (2003-02-19 21:46:00) [9]

Последний метод полностью решает все проблемы с пользователем.


MsGuns   (2003-02-19 21:37:00) [10]

Есть еще и такое 2 способа. Я их применял именно в случаях, когда юзер требовал, "чтоб было видно, как я вводил". В основном это касалось деталов.

Способ 1. (записей детала немного - например, сложная проводка по документу)

1.Добавляется поле в первичный ключ как integer
2.При вставке-удалении записи тупо перенумеровываются простым перебором след.образом.
- при удалении - сверху вниз
- при вставке - снизу вверх с начальным инкрементом самому нижнему
(если вставка непосредственно в грид, то номер добавляемой записи = номер предыдущей, перед добавлением запомненной+1, затем запись копируется в память, НД дается Cancel, записи перенумеровываются с учетом "дырки" для номера новой записи. После этого AppendRecord запомненной записи)

Перед пересчетом грид от НД отсоединять, после - присоединять
Работает незаметно для глаза

Способ 2 (в детале может быть много записей)
1.Добавляется поле в первичный ключ как extended с расчетом на большую дробь
2.Перед вставкой запоминаются значения этого поля смежных записей. Номер вставлляемой вычисляется по несколько вычурному алгоритму. Смысл вычислений

Пред. запись След.запись Добавляемая

1 5 2
1 2 1.1
1 1.1 1.01
1. 1.2 1.1

Есть один недостаток у обоих методов (особенно у первого) - при работе с одним подмножеством детала одновременно нескольких пользователей. Я решал это принципом "один документ может редактировать один чел".

А есть самый "надежный" и уж точно самый нехлопотливый способ. Добавляешь поле "Номер пп" и даешь его на откуп Юзеру. Пусть вводит какой надо ! Если хочет переместить, то пусть и редактит все перемещаемые !

Для некоторых документов, например накладных, счетов и т.п. такое требование, ИМХО, справедливо !


MsGuns   (2003-02-19 21:13:00) [11]

Если принципиально важна последовательность в гриде, то либо спец.поле (типа Номер ПП в гриде), либо, действительно StringGrid
с произвольным "тасканием" строк. Только мне, как и Соловьеву, тоже не совсем понятно, на фига это надо ?


MsGuns   (2003-02-19 21:10:00) [12]

1. Отказаться от стандартного DB-навигатора или что-там в этом роде.
2. "Повесить" {Ctrl+Ins}/{Ins} на экшин, "реагирующий" на добавление
3. Реализация вставки (экшина) по принципу
- Переход на след. запись, если Eof, то Append, если нет, то Insert

А лучше:

Вообще не давать редактировать в гриде, а все делать через обычные контролы. Запись добавлять запросом, после этого "освежать" НД в гриде. Перед добавлением запрос на повтор ключей. Так, кстати, корректнее относительно любого движка, особенно BDE


Desdechado   (2003-02-19 21:04:00) [13]

2 Соловьев © (19.02.03 18:32)
Поверь, такие задачи действительно есть. Например, без использования мастер-деталь в одном гриде показать типа

000 Гадюкино 10
Ванюкино 20
001 Петрухино 18

и если хочу добавить строку перед петрухиным для показа кучкой с ванюкиным.

2 Anatoly Podgoretsky © (19.02.03 19:23)
Мало. Но я с такой проблемой сталкивался, поэтому, имхо, понял, о чем речь.

2 Автор
Что ж ты имел ввиду?


Anatoly Podgoretsky   (2003-02-19 19:23:00) [14]

Desdechado © (19.02.03 12:15)
Ну в его вопросе на удивление мало конкретности, дело не в том, даже если база позволяет такое понятие как последовательность хранения, то лучше этим понятием не пользоваться.


Соловьев   (2003-02-19 18:32:00) [15]


> Локальный кэш

а внешний кэш?(масляно масляный) :)
Я думаю, проблема не в то что доступ через BDE, а в том что нужно Ihtiandr ©, зачем ему показывать юзеру, что вроде эта запись стоит за той...


Desdechado   (2003-02-19 18:11:00) [16]

запросом через БДЕ


Соловьев   (2003-02-19 12:16:00) [17]

2 Desdechado ©
А в кэш как данные попадают?


Desdechado   (2003-02-19 12:15:00) [18]

2 Anatoly Podgoretsky © (19.02.03 12:04)
Речь, как я понял, идет о локальной выборке, а не о способе хранения в БД.
Локальный кэш обслуживается БДЕ.


Anatoly Podgoretsky   (2003-02-19 12:04:00) [19]

Это не проблема реализации БДЕ, о нем в вопросе вообще нет ни слова, а проблема конечной базы, для большинства это понятие совсем не существует.


Desdechado   (2003-02-19 11:52:00) [20]

Это особенность реализации БДЕ. Побороть я не смог это в свое время, поэтому просто пересел на StringGrid.
Если бы в БДЕ было INSERT после текущей записи, то проблема стала бы с точностью наоборот (особенно как вставить запись в НАЧАЛО отображаемой выборки).


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо