Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.20;
Скачать: CL | DM;

Вниз

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

 
Tumcoat ©   (2003-11-03 04:58) [0]

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

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


 
Deniz ©   (2003-11-03 07:20) [1]

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


 
Tumcoat ©   (2003-11-03 07:24) [2]

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


 
Zacho ©   (2003-11-03 07:28) [3]


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

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


 
Deniz ©   (2003-11-03 07:39) [4]

>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:40) [5]


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

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


 
Tumcoat ©   (2003-11-03 08:15) [6]

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

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


 
ЮЮ ©   (2003-11-03 08:39) [7]

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


 
exciter__ ©   (2003-11-03 08:39) [8]

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


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


> exciter__ ©


Спасибо.


 
Deniz ©   (2003-11-03 09:07) [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

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


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

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


 
Tumcoat ©   (2003-11-03 09:56) [12]


> 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:58) [13]


> quantum

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


 
VAleksey ©   (2003-11-03 10:01) [14]


> exciter__ © (03.11.03 08:39)

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

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

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


 
Zacho ©   (2003-11-03 10:05) [15]


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

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


 
paul_k ©   (2003-11-03 10:27) [16]

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


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

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

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


 
DenK_vrtz ©   (2003-11-03 11:15) [18]

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


 
Deniz ©   (2003-11-03 12:58) [19]

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.11.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
6-66044
Dankin
2003-09-20 02:38
2003.11.20
Вот такой вопрос. Может кто знает как можно узнать номер телефона


3-65757
IBNovice
2003-10-30 14:10
2003.11.20
violation FOREIGN KEY


4-66176
bar
2003-09-24 15:08
2003.11.20
Можно ли в RichView вставить кнопку


14-66092
Style
2003-10-24 16:22
2003.11.20
Вот решил написать web-интерпретатор а стоит ли??


3-65751
P0tia
2003-10-31 15:39
2003.11.20
Можно ли в таблицу запихнуть иконку?