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

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

Переход из group или order by в обычный режим не теряя курсора. [D5, dBase, FoxPro, Paradox]


Tumcoat ©   (2003-11-03 04:58:00) 

Всем здрасьте!
В общем по теме уже думаю ясна суть вопроса. Допустим сделав:
Select ... group by ... или Select ... order by ...
я нашел нужную мне запись. Теперь допустим ее надо отредактировать. Но!!! Не group не order ни редактировать ни удалять записи не позволяют. Поэтому встает вопрос, как перейти в обычный режим так чтобы курсор остался на той же записи?

Заранее спасибо.


Deniz   (2003-11-03 12:58:00) [1]

Ни фига не понимаю!
>Tumcoat © (03.11.03 09:56) [12]
Я привел пример:
В таблице 3(три) записи (1, 2 и 3)
Сумма = 6, юзер запустил запрос и цитата "О Боже!, он увидел неправильные данные!" надо что бы было 7. Вопрос! Какая из 3(трех) записей (1, 2, 3) неправильная? Вот в чем вопрос!

И приведи свой пример!


DenK_vrtz   (2003-11-03 11:15:00) [2]

Вообще говоря, согласен с Zacho © (03.11.03 10:05) [15].
По жизни, о-это буква, 0 - это цифра, из этого, изменение данных должно, по идее, происходить на "исходном" наборе данных, а запрос с group by - это, грубо говоря, отчет. Так о каком изменении данных в отчете может идти речь?


Плохиш_   (2003-11-03 10:38:00) [3]

>Tumcoat © (03.11.03 09:56) [12]

Осталось только выяснить, в каком твоём примере фигурирует group by. А так только ошибка в днк.


paul_k   (2003-11-03 10:27:00) [4]

Господа зачем столько гемороя?
при необходимости изменить данные в гриде вызываем форму редактора, на подтверждение вешаем исполнение запроса на обновление.
И пользователь, уснув на клаве, ничего не изменит случайно, и изменить можно любую запись в таблице, зная её уникальный идентификатор


Zacho   (2003-11-03 10:05:00) [5]


> Tumcoat © (03.11.03 09:56) [12]

Ну и используй двазапроса - один с агрегатом, а второй без. Редактируй тот, который без агрегата, после этого запрос с агрегатом переоткрывай.
P.S. А ORDER BY вообще никаких проблем не создает, это всего лишь сортировка, а не агрегирование.


VAleksey   (2003-11-03 10:01:00) [6]


> exciter__ © (03.11.03 08:39)

Нафига???!!!
А если ему курсор около миллиона вернет?? Это абсолютно лишние телодвижения. Никакой пользы кроме тормозов :-)).

Ничего не нужно перевыполнять.

1) Для редактирования - надо сделать маску ввода и в нее передать значения текущих полей. А потом запросом обновить необходимую запись используя уникальный индекс или первичный ключ.
2) Для удаления просто написать нужный запрос :-)).
2) Если используется сортировка Order by то НД вполне может быть редактируемым если по полям сортировки существует индекс.


stud   (2003-11-03 09:58:00) [7]


> quantum

и ты спасен)))


Tumcoat   (2003-11-03 09:56:00) [8]


> Deniz © (03.11.03 09:07) [10]
> select Name, sum(Сnt) as Cnt from Table group by Name
> Name Cnt
> Валенок 6
>
> А надо :
> Name Cnt
> Валенок 7
>
> В исходных данных:
>
> Name Cnt
> Валенок 1
> Валенок 2
> Валенок 3


Объясняю на твоем примере. Есть записи валенок с 1-го по 6-ой включительно (заметь 7-го нету). Так вот ставим курсор на "Валенок 6" (который нужно исправить на "Валенок 7" или хотя бы удалить). И при переходе на запрос без group, курсор должен остаться на "Валенок 6", хотя база в итоге будет выглядеть например так:

Name Cnt
Валенок 3
Валенок 2
Валенок 4
Валенок 6
Валенок 1
Валенок 5


После редактирования так:

Name Cnt
Валенок 3
Валенок 2
Валенок 4
Валенок 7
Валенок 1
Валенок 5


или так:

Name Cnt
Валенок 3
Валенок 2
Валенок 4
Валенок 1
Валенок 5


stud   (2003-11-03 09:21:00) [9]

можно использовать грид, типа quantum. где можно силами грида "группировать" записи и отображать даннные различным способом тогда и редактировать можео и просматривать как душе угодно


Deniz   (2003-11-03 09:07:00) [10]

>Tumcoat © (03.11.03 08:15) [6]
Объясни особо умного вундеркинда, куда нужно по твоему мнению переместить курсор при сл. примере(ты не привел ни одного примера, поэтому придумал свой):

select Name, sum(Сnt) as Cnt from Table group by Name
Name Cnt
Валенок 6

А надо :
Name Cnt
Валенок 7

В исходных данных:

Name Cnt
Валенок 1
Валенок 2
Валенок 3

Какая из записей неправильная? И куда после этого поставить курсор? Или какую удалить?


Tumcoat   (2003-11-03 08:55:00) [11]


> exciter__ ©


Спасибо.


exciter__   (2003-11-03 08:39:00) [12]

Запомни значения полей, затем перевыполни запрос и сделай Locate в новом наборе данных. Это единственный разумный выход для твоей ситуации.


ЮЮ   (2003-11-03 08:39:00) [13]

особо умныt и вундеркинды полагают, что запрос с Group называется агрегирующим, потому что несколько записейтаблицы агрегируются в однув возвращаемом НД и не представляют как попасть на несколько записей одновременно.
В данном случае надо редактировать не записи возвращаемого НД, а записи из которых эта запись получена


Tumcoat   (2003-11-03 08:15:00) [14]

Ладно, для особо умных и вундеркиндов разъясняю:

Пользователь сделал группировку данных в базе (это реализуется через запрос с group или с order, в зависимоти от обстоятельств, и показывается через dbgrid), сразу скажу не знаю зачем это понадобилось пользователю, может для удобства просмотра, может просто моча ему в голову ударила, но он это сделал! Но вдруг, О Боже!, он увидел неправильные данные! Их надо срочно исправить или удалить к чертовой матери, чтоб глаза не мозолили. Но поскольку, при данном запросе (с group, например), это реализовать нельзя, надо срочно выкручиваться (на этот раз уже мне, а не пользователю), надо срочно убрать этот запрос (с group или с order), и заменить его простым (без group и без order), но так, чтобы курсор остался на той же самой записи, на которой и стоял.


Zacho   (2003-11-03 07:40:00) [15]


> Deniz © (03.11.03 07:39) [4]

Любой, любой, это точно :-) Вопрос в том, чтоименно надо редактировать :)


Deniz   (2003-11-03 07:39:00) [16]

>Zacho © (03.11.03 07:28) [3]
Ну на счет любогоэто сильно, но ... теоретически да.

>Tumcoat © (03.11.03 04:58)
>"...Теперь допустим ее надо отредактировать ..."
>Tumcoat © (03.11.03 07:24) [2]
>"Мне нужно не отредактировать..."

Ты уж определись чтотебе нужно.
А по вопросу положения курсора, запоминай ПК(первичный ключ), и потом переходи на него


Zacho   (2003-11-03 07:28:00) [17]


> Tumcoat © (03.11.03 07:24) [2]

Что такое "перейти" ? Нет никаких "режимов", есть запросы и возвращаемые ими result set"ы.
Используй два датасета, или с помощью TUpdateSQL можно сделать редактируемым TQuery с любымзапросом .


Tumcoat   (2003-11-03 07:24:00) [18]

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


Deniz   (2003-11-03 07:20:00) [19]

Group by нельзя отредактировать в принципе!
Order by редактируется легко. Для DBF с order by прикрути к Query UpdateObject=UpdateSQL и будет тебе счастье


Наверх

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