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

Вниз

Аналог следующего update на Access-e   Найти похожие ветки 

 
Dmitry S ©   (2008-08-05 18:28) [0]

MySQL:

SET @i=0;
UPDATE `table` SET `field`=(@i:=@i+1) WHERE ... ORDER BY [name];

Как сделать тоже самое на Access-e?
Устно говоря, задача такая: пронумеровать по порядку таблицу в при определенной сортировке.


 
Dmitry S ©   (2008-08-05 18:40) [1]

кавычки у name, конечно, должны быть другие.


 
Johnmen ©   (2008-08-05 21:35) [2]

Странного желаете, барин...


 
Сергей М. ©   (2008-08-06 08:33) [3]


> Как сделать тоже самое на Access-e?


Что подразумевается под Access - контейнерный формат или само приложение ?

А вообще см. [2] )


 
Dmitry S ©   (2008-08-06 10:22) [4]


> Что подразумевается под Access - контейнерный формат или
> само приложение ?

Standart Jet DB через ADO имею ввиду :)


> Странного желаете, барин...

А что странного? Очень удобно.


 
Сергей М. ©   (2008-08-06 10:26) [5]


> Standart Jet DB


Нет там такого аналога.


 
Dmitry S ©   (2008-08-06 10:36) [6]


> Сергей М. ©   (06.08.08 10:26) [5]

Есть идеи как выполнить задачу?


 
Сергей М. ©   (2008-08-06 10:49) [7]

Сначала поясни, в чем заключается "удобство" ..


 
Dmitry S ©   (2008-08-06 11:20) [8]

Я об использовании переменных вообще.
Например, решение данной задачи я пока не вижу проще, точнее вообще пока никак не вижу, кроме как выполнить запрос SELECT, пронумеровать вручную, а потом несколько UPDATE-ов.


 
Dmitry S ©   (2008-08-06 11:27) [9]

Вот такой, например, вариант еще:

UPDATE [table] SET [pos]=0 WHERE <...>;

UPDATE [table] SET [pos]=1 + (SELECT COUNT(*) FROM [table] WHERE <...> AND [pos]<>0) WHERE <...> ORDER BY <...>;



Если, конечно, Jet поддерживает UPDATE ... ORDER BY ...;


 
stas ©   (2008-08-06 11:29) [10]

Dmitry S ©   (06.08.08 11:20) [8]
А вчем смысл задачи?
может пойдет просто добавления поля счетчика? или нумерация на клиенте?


 
Сергей М. ©   (2008-08-06 11:30) [11]


> Dmitry S ©   (06.08.08 11:20) [8]


Скажи, зачем тебе понадобилась нумерация на серверной стороне ?


 
Ega23 ©   (2008-08-06 11:39) [12]

Делай нумерацию на клиенте. Нафига на сервере-то?


 
Dmitry S ©   (2008-08-06 11:52) [13]

Есть документ, в нем строки, грубо говоря. Строки в документе структурированы в виде дерева.

[doc] - таблица документов (Поля: doc_id, name, ...)
[line] - таблица строк (Поля: line_id, doc_id, linegroup_id, pos, name, ...)
[linegroup] - таблица для задания структуры. Она общая для всех документов. (Поля: linegroup_id, linegroupparent_id, name).

В line содержатся строки всех документов. Принадлежность строки документу определяется полем doc_id.

Построим дерево строк какого либо документа таким образом, что ветки одного уровня и родителя были отсортированы по алфавиту, строки каждой ветки также отсортированы по алфавиту. Далее, представим дерево в TreeView. Необходимо пронумеровать строки сверху вниз в том порядке, в каком они встречаются в TreeView.
Данная нумерация должна быть без разрывов, потому что должна восприниматься человеком, как нумерация по-порядку.

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

Вот в общих чертах.


 
sniknik ©   (2008-08-06 11:54) [14]

сделать можно, правда с ограничениями...
первое - уникальные значения у сортируемого поля/полей. (фактически требуется наличие ключа, чего в [0] и далее не видно)

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

> SET @i=0;
> UPDATE "table" SET "field"=(@i:=@i+1) WHERE ... ORDER BY [name];
вот какой смысл?
пронумеровать физически в таблице часть данных (имеется WHERE) если по определению sqlсерверу на любую нумерацию плевать. т.е. серверу это не нужно.
пользователю? а ему оно нафиг? ктото например пронумеровал в таблице всех с именем "сергей", и тут же, с именем "марина", или вообще не с именем а всех женского пола... что ему даст тот бардак, что в результате будет в этй "нумерации"? или предполагается выборку делать сразу после нумерации? тогда почему не нумеровать именно выборку (тем более там это уже есть), нафига сохранять бессмысленные вне контекста результаты в базу?

> Вот в общих чертах.
не убедительно. не обьясняет нафига оно физически в базе.


 
sniknik ©   (2008-08-06 12:07) [15]

до меня дошло!
он пытается сделать идентификацию записей по порядковому номеру (для чего нужны ключи ему видимо неведомо...).
> и этот номер нужен при такой выборке.
тот же номер у него и для показу пользователю...
> потому что должна восприниматься человеком, как нумерация по-порядку.


 
Dmitry S ©   (2008-08-06 12:54) [16]


> до меня дошло!

Не правильно дошло, зря ветку переместил.

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

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

А также для быстрого поиска строки с определенным номером. Пользователь вводит номер, по которому осуществляется поиск. Строить дерево при этом очень накладно :(

И вообще вопрос не о том, как планировать структуру БД, а вполне конкретный: Как пронумеровать по порядку таблицу при определенной сортировке?


 
Ega23 ©   (2008-08-06 12:58) [17]


> Как пронумеровать по порядку таблицу при определенной сортировке?


Вот смотри. Я получил НД на клиент. Дальше я могу сделать с ним всё, что хочу. Могу наложить фильтр, тогда часть записей скроется. Могу наложить правило(а) сортировки. Причём применять их по банальному OnTitleClick грида. И каждый раз порядок представления НД будет другим.

Так что ты хочешь получить?


 
Medbe}I{onok XML ©   (2008-08-06 12:59) [18]

Пользователь вводит номер, по которому осуществляется поиск.

Юзер ввел десять и надо найти десятую запись?
Для этого не надо ничего нумеровать.


 
Сергей М. ©   (2008-08-06 13:00) [19]


> Как пронумеровать по порядку таблицу при определенной сортировке?


Нумеруй себе на здоровье на клиентской стороне, зачем для своих странностей привлекать сервер-то ?

Сервер тебе отдал НД в требуемой тебе сортировке, получи его и пронумеруй полученное как тебе надо, в чем проблема-то ?)


 
Medbe}I{onok XML ©   (2008-08-06 13:01) [20]

в чем проблема-то ?)

проблема у него в кислоте. дезоксирибонуклеиновой


 
Dmitry S ©   (2008-08-06 13:05) [21]


> Ega23 ©   (06.08.08 12:58) [17]

Вот к примеру задачи такая:
1. Необходимо напечатать 10 строк начиная с N-ой - делается просто с помощью LIMIT-а или его аналога, если он есть в Access-е.

2. А, например, необходимо напечатать строки определенной группы (т.е. записи выбраны не очевидным условием WHERE), а при печати строки важно выводить ее номер. А изза 10 строк тащить из базы еще 15000 (в среднем), нумеровать, а потом фильтровать не хочется - это долго. Поэтому мной и было решено поместить эти данные в таблицу.


 
Dmitry S ©   (2008-08-06 13:06) [22]


> Сервер тебе отдал НД в требуемой тебе сортировке, получи
> его и пронумеруй полученное как тебе надо, в чем проблема-
> то ?)

см [21].2


 
Ega23 ©   (2008-08-06 13:09) [23]


> 2. А, например, необходимо напечатать строки определенной
> группы


Блин. Я нихрена не понял, что тебе всё-таки надо.


 
Medbe}I{onok XML ©   (2008-08-06 13:10) [24]

а при печати строки важно выводить ее номер.

Нумерация на печати делается средствами репортера.


 
Johnmen ©   (2008-08-06 13:11) [25]


>  Необходимо напечатать 10 строк начиная с N-ой - делается
> просто с помощью LIMIT-а или его аналога

Хм... Как связан предикат LIMIT с печатью?
:)


 
Dmitry S ©   (2008-08-06 13:15) [26]

Удалено модератором


 
Medbe}I{onok XML ©   (2008-08-06 13:15) [27]

ну как как.
печатать же можно только то, что видишь в гриде.
"что вижу, то и пою"


 
Ega23 ©   (2008-08-06 13:16) [28]


> Оно вам надо, знать для чего я это делаю? Если делаю, значит
> оно так нужно мне. Какие еще проблемы?


Да делай, кто мешает-то? Ты сначала проблему сформулируй. из твоего [21] нихрена не понятно.


 
Medbe}I{onok XML ©   (2008-08-06 13:16) [29]

Если делаю, значит оно так нужно мне.

нужно нумеровать строки - нумеруй. в шаблоне отчета.


 
Сергей М. ©   (2008-08-06 13:18) [30]


> записи выбраны не очевидным условием WHERE


Это еще что за зверь ?)


> изза 10 строк тащить из базы еще 15000


А никто и не заставляет тебя их всех тащить.

С другой стороны, как юзер узнает , что ему нужно оперировать с M записями, начиная с N-ной, пока он не увидит все K записей, среди которых фигурируют эти самые N интересующих его записей ?


 
sniknik ©   (2008-08-06 13:19) [31]

> Какие еще проблемы?
хотели реально помочь...

с описанными ограничениями
UPDATE [table]
SET [field]=DSum(1, "[table]" , "name<="""+table.name+"""")


 
sniknik ©   (2008-08-06 13:20) [32]

> с описанными ограничениями
вернее с одним... на второе плюнул. ;(


 
Dmitry S ©   (2008-08-06 13:21) [33]


> Ega23 ©   (06.08.08 13:16) [28]

Я упростил задачу до минимума еще в [0], зачем усложнять?

Специально для Medbe}I{onok XML. В данной задаче не используются ни компоненты-отчеты, ни даже DB-компоненты, за исключением самого TADOConnection, конечно.


 
Сергей М. ©   (2008-08-06 13:22) [34]

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


 
Medbe}I{onok XML ©   (2008-08-06 13:22) [35]

а кто здесь недавно про печать строк говорил?


 
Medbe}I{onok XML ©   (2008-08-06 13:24) [36]

В данной задаче не используются ни компоненты-отчеты

то есть цикл и вывод на tprinter ?
Монопенисуально.
Текущий номер строки все равно есть.


 
Ega23 ©   (2008-08-06 13:29) [37]


> Я упростил задачу до минимума еще в [0], зачем усложнять?


Я ещё раз тебя спрашиваю:

Я получил на клиент НД в таком виде:

ID  Name  Value
__ _____  ____
1  A        18
2  B        15
3  C        44


Теперь на клиенте я отсортировал эти данные по Value (имею право)

ID  Name  Value
__ _____  ____
2  B        15
1  A        18
3  C        44


Нумерация сбилась нафиг.
Вопрос: зачем её тянуть с сервера, если на клиенте один хрен придётся перестраивать? Это и удобнее и проще и идеологически более правильно.


 
Dmitry S ©   (2008-08-06 13:32) [38]


> С другой стороны, как юзер узнает , что ему нужно оперировать
> с M записями, начиная с N-ной, пока он не увидит все K записей,
>  среди которых фигурируют эти самые N интересующих его записей
> ?

Легко.
Пример из жизни: Ты печатаешь Word-документ из 1000 страниц с нумерацией. На 300ой странице принтер дает сбой. Ты видишь, что последняя страница 299, нужно ли тебе видеть все остальные страницы, чтобы продолжить печать, или достаточно в диалоге печати задать диапазон печати "300-1000"? Понимаешь о чем я?


> sniknik ©   (06.08.08 13:19) [31]

Вот это уже интереснее. Задача усложняется еще тем, что простым name<=""table.name"" тут не обойтись, потому что в задаче сортировка задается по полям двух таблиц. Но от этого уже можно исходить! Спасибо.


 
Medbe}I{onok XML ©   (2008-08-06 13:38) [39]

чтобы продолжить печать, или достаточно в диалоге печати задать диапазон печати "300-1000"? Понимаешь о чем я?

inputbox("скажите начальный номер" .....)

dataset.MoveBy();
while not eof do
вывод на принтер;
инкремент номера строки;
next;
end;


 
Dmitry S ©   (2008-08-06 13:40) [40]


> Ega23 ©   (06.08.08 13:29) [37]

Думаю проблема в понимании самого смысла данного поля. Назову его по другому. Не порядковый номер, а позиция, которая строго определена определенными условиями.
И когда пользователь сортирует таблицу по полю Value, он все равно видит позицию такой, какая она есть.
Просто так совпало, что позиция - это номер строки при определенной сортировке. А так это такое же поле как и Name и Value.



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

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

Наверх




Память: 0.58 MB
Время: 0.016 c
15-1217235189
Ega23
2008-07-28 12:53
2008.09.21
Посоветуйте книжку по основам Java-Script


2-1218446900
REX2008
2008-08-11 13:28
2008.09.21
Подключение звукового файла


6-1189334897
Tramal
2007-09-09 14:48
2008.09.21
Как убрать все HTML теги


2-1217913860
lewka
2008-08-05 09:24
2008.09.21
Размер HTML- кода (трафик)


2-1218215765
Rimdus
2008-08-08 21:16
2008.09.21
Работа с датами