Форум: "Базы";
Текущий архив: 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.019 c