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

Вниз

Kак пересортировать таблицу после изменения поля в самой таблице?   Найти похожие ветки 

 
Stanislav ©   (2006-08-21 12:06) [40]

Запрос всегда меньше 1000000 записей.
Никак не определяю, основное время занимает не сортировка, а перезапрос , ты же не сможешь отсортировать на сервере без перезапроса.
Имеется ввиду оперативная работа, отчет всегда строится на основании запроса к серверу.


 
Dok   (2006-08-21 12:54) [41]


> Запрос всегда меньше 1000000 записей.

а вот если у Вас 100 записей и сортировка по 10 полям, причем по разным направлением?


 
Stanislav ©   (2006-08-21 13:00) [42]

>а вот если у Вас 100 записей и сортировка по 10 полям, причем по разным >направлением?

Для этого есть индексы. Если сортировка не так уж важна, а занимает много времени, то небуду сортировать.
Но при 100 записях и правильно построеных индекасх запрос с сортировкой по 10 полям "летать" будет (а направление указывается в индексе)


 
evvcom ©   (2006-08-21 14:19) [43]

> [39] Dok   (21.08.06 10:37)

Теперь объясни, как от этого спасет твой способ, способ по вытягиванию на клиента всего "мильёна"?
P.S. А чтобы "умначая Машенька" не оказалась дурнячей в глазах директора, отчет надо строить по данным закрытого периода. И соответственно за ввод данных в закрытый период давать по рукам (программно, конечно :)). А если отчет строится по оперативным данным, то где-то в отчете так и писать "оперативные данные". Все это исправляется обычно после инцидента. :)


 
Dok   (2006-08-21 14:29) [44]


> Теперь объясни, как от этого спасет твой способ, способ
> по вытягиванию на клиента всего "мильёна"?

где я такое говорил? Я говорил что нужно сортировать на серваке а не клиентом.


 
Stanislav ©   (2006-08-21 15:09) [45]

Dok   (21.08.06 14:29) [44]

Сортировать нужно там где это будет более эффективно и нельзя сказать что эффективная сортировка только серверная или только клиентская.


 
Dok   (2006-08-21 15:26) [46]


> Stanislav ©   (21.08.06 15:09) [45]

убедил :)


 
Stanislav ©   (2006-08-21 15:28) [47]

:-)


 
Anatoly Podgoretsky ©   (2006-08-21 19:16) [48]

Dok   (21.08.06 10:37) [39]
Зашла Маша, включила прогу, ей загрузились на текущий момент данные. Она сидит себе сортирует, отчеты строит. Тут другая Катя доводила еще 10 записей. И после этого директор звонит Маше и говорит - Машенька а дайка мне отчет по том-то и том-то. Умначая Машенька печата отчет и бежит к директору с данными без введенных Кати.

И что, ну обнавила Маша данные, но пока она печатала и бежала, Катя с Олей навводили еще записей.
Надо просто в отчете поставить надпись - по состоянию на .....
И для скандалов в базе иметь поле типа временная метка.


 
MsGuns ©   (2006-08-22 09:22) [49]

>sniknik ©   (18.08.06 10:55) [13]
>> У ADOQuery строка SQL: "SELECT * FROM Nominal ORDER BY IndSort"
>после выполнения этого запроса
ADODataSet1.Sort:= "IndSort";

Нет. В Sort будет "", а "IndSort" только после

 ADODataSet1.Sort := "IndSort";


 
Anatoly Podgoretsky ©   (2006-08-22 09:28) [50]

Найди отличия
ADODataSet1.Sort:= "IndSort";
ADODataSet1.Sort := "IndSort";

Правильно, на один пробел в коде больше.


 
Anatoly Podgoretsky ©   (2006-08-22 09:28) [51]

Найди отличия
ADODataSet1.Sort:= "IndSort";
ADODataSet1.Sort := "IndSort";

Правильно, на один пробел в коде больше.


 
MsGuns ©   (2006-08-22 10:22) [52]

>Anatoly Podgoretsky ©   (22.08.06 09:28) [50]

Не совсем в тему, Анатолий.
Речь шла о том, что если в сиквеле запроса стоИт "ORDER BY IndSort", то после его открытия в св-ве Sort будет <пусто>, а то, что ты и Коля написал, там может появиться лишь если программно это туда засунуть.


 
MsGuns ©   (2006-08-22 10:30) [53]

В целом по сабжу:
Способ сортировки зависит от требования "интерактивности" проводимых в базе изменений.
Упрощенно может быть два режима:
1. "Интерактивный" или серверный.
После изменения каждой записи на клиенте, изменение посылается на сервер для "всеобщего обозрения", сам же НД нереоткрывется. В этом режиме все пользователи приложения видят одни и те же записи в НД, что соответствует требованию интерактивности.
В этом случае ничего не надо пересортировывать, т.к. после кадого поста НД перечитывается и, соответсвенно, пересортировывается.
Редактирование "гридом" не самый лучший способ реализации такого подхода, ибо требует больших накладок по обработке возникающих при редактировании непосредственно методами датасета событий., да и "тормозит" некисло, что делает работу пользователя некомфортной (и это мягко сказано).
Предпочтительнее реализация параллельной технологии: датасетом смотрим, квери правим, датасет переоткрываем и позиционируем


 
MsGuns ©   (2006-08-22 11:28) [54]

Второй способ - буферный или "клиентский".
Данные на клиенте кэшируются и по достижении какого-то предела или по требованию пользователя (кнопке) отсылаются на сервер. "Конкуренты" не видят изменений до тех пор, пока пакет не будет отослан и подтвержден клиентом-инициатором изменений.
Другими словами, каждый клиент видит только "свои" изменения и не видит "чужих".
Для имитации интерактивности (в данном случае, а именно для занятия каждой записью "своего" места в датасете соглано сортировке) можно использовать "локальную" сортировку, которая легко реализуется с помощью, например, TClientDataSet. Такие датасеты достаточно комфортны в режиме "гридного" редактирования, не "тормозят" и весьма похожи на знакомую каждому "освидченному" пользователю работу в Excel.
Однако здесь другая проблема - согласование пакетов корректур разных клиентов между собою. Иногда решается простой репликацией, а иногда - целыми схемами - в зависимости от решаемых задач. ИМХО, данная технология очень подходит для "документой" схемы работы с БД, когда два пользователя не могут (не должны) одновременно править один и тот же документ (накладную, счет-фактуру, лицевой счет и т.д.)

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


 
Anatoly Podgoretsky ©   (2006-08-22 11:42) [55]

MsGuns ©   (22.08.06 10:22) [52]
Это так, но твой код дает другую интерпритацию.


 
sniknik ©   (2006-08-22 20:16) [56]

MsGuns ©   (22.08.06 09:22) [49]

>>sniknik ©   (18.08.06 10:55) [13]
>>> У ADOQuery строка SQL: "SELECT * FROM Nominal ORDER BY IndSort"
>>после выполнения этого запроса
>ADODataSet1.Sort:= "IndSort";

>Нет. В Sort будет "", а "IndSort" только после

что нет? не надо делать ADODataSet1.Sort:= "IndSort"; после запроса, на том основании что оно после него равно ADODataSet1.Sort = ""???
читай, что написано то, заодно и то что ответ привел к решению. (ну хоть ктото правильно понял).


 
evvcom ©   (2006-08-25 09:22) [57]

> [53] MsGuns ©   (22.08.06 10:30)
> Редактирование "гридом" не самый лучший способ реализации
> такого подхода, ибо требует больших накладок по обработке
> возникающих при редактировании непосредственно методами
> датасета событий., да и "тормозит" некисло

Голые слова. Может руки кривые, раз тормозит некисло? Грид-то здесь причем? Грид только работает с датасетом, потому у тебя проблемы в датасете, но не в гриде.

> Предпочтительнее реализация параллельной технологии: датасетом
> смотрим, квери правим, датасет переоткрываем и позиционируем

Ну и чем этой "технологии" мешает грид?
MsGuns, такое впечатление, что ты где-то какой-то кусок знаний вырвал, попробовал, у тебя не все хорошо получилось, и на основании этого ты теперь даешь экспертные оценки.



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

Форум: "Базы";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.57 MB
Время: 0.054 c
2-1160033184
Fostr
2006-10-05 11:26
2006.10.22
CheckBox


2-1159964866
>>DEATH<<
2006-10-04 16:27
2006.10.22
Автаматизация сервера


2-1159803742
Juju
2006-10-02 19:42
2006.10.22
Как установить формулу в Excel?


15-1159422083
syte_ser78
2006-09-28 09:41
2006.10.22
pop3 по локальной сети


15-1159468057
Virgo_Style
2006-09-28 22:27
2006.10.22
ИИ. Каким бы вы хотели его видеть?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский