Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];

Вниз

Переход из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.012 c
1-65971
UniQ
2003-11-10 19:23
2003.11.20
TListView


14-66098
IronHawk
2003-10-28 12:11
2003.11.20
Какой тулзней можно писать видео-поток с


3-65739
Mamed
2003-10-31 16:37
2003.11.20
DBexpress


14-66084
Igit
2003-10-23 21:13
2003.11.20
DirectX. Графика в проектах Delphi. Краснов М.


4-66150
likeanangel
2003-09-26 11:29
2003.11.20
По поводу повторного использования





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский