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

Вниз

Сортировка ADODataSet   Найти похожие ветки 

 
sniknik ©   (2007-04-17 14:21) [40]

> Зачем мне держать 10 справочников открытыми, по которым все время идет локейт, только для того, чтобы вывести их значения?
ну например для того, чтобы не закачивать с сервера лишних данных, экономить трафик в условиях его ограниченности.

к примеру работаешь с таблицей на 100 тыс или более у которой одно/несколько поле длинное и часто повторяющееся (вынесены в справочник)... ну например 20 вариантов на все записи первой.
как думаешь, что выгоднее 1 раз скачать все 20 дополнительных записей, а в таблице оригинале только индекс-ссылка(число) на эти записи, или тянуть с сервера 100тыс записей * длинна записи из справочника при запросе объединении. ???

p.s. не надо легковушку в плуг запрягать вместо трактора и все будет в порядке. а уж если запрягаете, то воздерживайтесь от комментариев типа "Лукап-поля которые реализованы в Делфе - большая пакость.".


 
Jan1   (2007-04-17 14:24) [41]


> Так вот корректно было бы получать в Наборе данных все поля,

Очень плохое заблуждение. Очень. Нужно создавать поля по требованию и делать перезапрос если юзвер добавил новые поля, если убрал, то делать перезапрос не надо.


 
Jan1   (2007-04-17 14:27) [42]


> ну например для того, чтобы не закачивать с сервера лишних
> данных, экономить трафик в условиях его ограниченности.

сидит себе пользователь грид скролирует, редактировать и не думает, а мы ему затянули все справочники. Вопрос - а зачем? Не проще ли по требованию?


> к примеру работаешь с таблицей на 100 тыс или более у которой
> одно/несколько поле длинное и часто повторяющееся (вынесены
> в справочник)... ну например 20 вариантов на все записи
> первой.
> как думаешь, что выгоднее 1 раз скачать все 20 дополнительных
> записей, а в таблице оригинале только индекс-ссылка(число)
> на эти записи, или тянуть с сервера 100тыс записей * длинна
> записи из справочника при запросе объединении. ???

чего-то не допонял... можно подробнее?


 
Jan1   (2007-04-17 14:34) [43]


> p.s. не надо легковушку в плуг запрягать вместо трактора
> и все будет в порядке. а уж если запрягаете, то воздерживайтесь
> от комментариев типа "Лукап-поля которые реализованы в Делфе
> - большая пакость.".

Скажите есть у Вас таблицы которые между собой завязаны и записей там по 100 тыс? Как пример, я приводил Контакт-Контрагент. Показываете ли Вы такую связку пользователю, если да то как? Через лукап или нет?


 
Megabyte ©   (2007-04-17 14:37) [44]


> Jan1  (17.04.07 13:55) [38]

Я тебя понял.
Но и

> sniknik ©  (17.04.07 14:21) [40]

тоже. Вот с ним согласен.


 
Jan1   (2007-04-17 14:54) [45]

2 Megabyte ©   (17.04.07 14:37) [44]
Для начального уровня создания приложений вполне, но никак не с промышленными базами. Так для курсовиков и небольших фирм... Без обид.


 
Kostafey ©   (2007-04-17 14:55) [46]

> Очень плохое заблуждение. Очень. Нужно создавать поля по
> требованию и делать перезапрос если юзвер добавил новые
> поля, если убрал, то делать перезапрос не надо.

Понятно, что нехорошо, но СУБД локальная практически нет требований к производительности.
Кроме того делать перезапросы при изменении сиска полей само по себе добавляет ручной
работы, но так и не отвечает на вопрос как настраивать такие глупости как DiplayLabel.
Ведь если у нас в Наборе данных будет разное количество полей (в зависимости от запросов
пользователя), то создавать TField в Наборе данных будет уже невозможно.

Это что же предлагаете динамически настраивать DiplayLabel в DBEhGrid в зависимости от
получаемого списка полей? Неужели действительно проще нельзя ?


 
Jan1   (2007-04-17 15:05) [47]


> Понятно, что нехорошо, но СУБД локальная практически нет
> требований к производительности.

Еще одно заблуждение :(


> Ведь если у нас в Наборе данных будет разное количество
> полей (в зависимости от запросов
> пользователя), то создавать TField в Наборе данных будет
> уже невозможно.

скакой это радости?


 
Kostafey ©   (2007-04-17 15:12) [48]

> скакой это радости?

А как? Мы насоздавали полей в наборе данных например все поля одной таблицы.
Настроили их свойства.
Открыли НД с полным набором полей, смотрим в DBGrid и радуемся.
Открыли НД с не полным набором полей получаем ошибку про те заранее введенные TFiled,
для которых в этом запросе не получены данные.


 
Jan1   (2007-04-17 15:18) [49]


> А как? Мы насоздавали полей в наборе данных например все
> поля одной таблицы.
> Настроили их свойства.
> Открыли НД с полным набором полей, смотрим в DBGrid и радуемся.
>

кто тебе мешает это сделать в рантайме?


 
Kostafey ©   (2007-04-17 15:22) [50]

> кто тебе мешает это сделать в рантайме?

Лень.

Да и вообще, программка того не стоит. Наверное...


 
Jan1   (2007-04-17 15:26) [51]


> Лень.

что ж трудно Вам прийдется...


 
Kostafey ©   (2007-04-17 15:32) [52]

> что ж трудно Вам прийдется...

<offtop>
Зря Вы так.
Автоматизация вообще появилась из-за человеческой лени.

Я надеялся, что есть болле простые решения. А от бывало делаешь что-то,
а потом оказывается то же самое можно было бы сделать в 2 раза проще, в
3 раза быстрее и результат был бы эффективнее, я так получается удаление
гланд через ухо и велосипедоизобретательство. Только и всего.
</offtop>


 
Megabyte ©   (2007-04-17 15:43) [53]


> Jan1  (17.04.07 14:54) [45]

2 Megabyte ©  (17.04.07 14:37) [44]
Для начального уровня создания приложений вполне, но никак не с промышленными базами. Так для курсовиков и небольших фирм... Без обид.

Да никаких обид, только, имхо, это не от масштаба зависит, а от конкретной потребности пользователей и устройства БД.


 
Jan1   (2007-04-17 15:46) [54]


> Я надеялся, что есть болле простые решения. А от бывало
> делаешь что-то,
> а потом оказывается то же самое можно было бы сделать в
> 2 раза проще, в
> 3 раза быстрее и результат был бы эффективнее, я так получается
> удаление
> гланд через ухо и велосипедоизобретательство. Только и всего.
>

есть, но они денег стоят. или самим писать или купить...


 
sniknik ©   (2007-04-17 15:46) [55]

> Скажите есть у Вас таблицы которые между собой завязаны и записей там по 100 тыс?
да, у меня и поболее есть (5-6 млн) и в них почти все поля берутся из справочников, поля "расшифровки признака", статус, адрес (город,область,регион), и т.д. по сравнению с размером основной все они мизер... (суть вся основная это просто различные комбинации ссылок на справочники)

> Показываете ли Вы такую связку пользователю, если да то как? Через лукап или нет?
по необходимости, и так и так бывает, внесение(/редактирование) полей обычно из лукапа, выбором (руками такие поля не даю забивать, вот те что принадлежат таблице пожалуйста (например адрес - "улица дом кв". они практически уникальны и в справочник не выносятся)).

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

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

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


 
Jan1   (2007-04-17 15:47) [56]


> Да никаких обид, только, имхо, это не от масштаба зависит,
>  а от конкретной потребности пользователей и устройства
> БД.

ну да или стакан на половину пустой или полон.
Или пользователю сказать - звыняйтэ, Ваш комп тормозит а поэтому ждите пока данные Вам прийдут и отсортируются. или Все-таки поискать глюки в программе и переделать...


 
sniknik ©   (2007-04-17 15:52) [57]

> Я надеялся, что есть болле простые решения.
убери вообще из грида предопределения столбцов, создадутся автоматом при открытии таблицы. а "дисплейлебел" можно заменить в событии afteropen таблицы... сделать массив соответствий  "имя поля"="русское название" по нему и заменить (а то и вообще в таблице держать. и пусть юзеры сами переводят. а если посложнее структуру записи сделать то можно и основные настройки держать... и все при единообразном подходе)


 
Jan1   (2007-04-17 15:53) [58]


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

ну и представим, сколько нужно сделать действий проге чтобы показать юзверю их значения? или один запрос к серверу, который это все вернет или 1 + запросы на справочники + локейты по ним. Страны, города - их я думаю не мало, а лишних операций Ваша программа сделай ой как много :(
А как вы сортировать собрались? или фильтровать? или пользователь в этом ограничен?


 
Jan1   (2007-04-17 15:54) [59]


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

опять же неудобство делфийского лукап-поля при больших(даже на 100 записах) это делать ой как не юзабительно :(


 
Jan1   (2007-04-17 15:56) [60]


> а если требование именно такое?

но только на редактирование а не на просмотр! вот нужно данные для отчета выбрать - Вы что опять будете лукап-поля тулить?


 
Kostafey ©   (2007-04-17 15:57) [61]

> [35] Jan1   (17.04.07 12:28)


> http://delphikingdom.ru/asp/viewitem.asp?catalogid=420

Странно. Сделал все как в статье.
Настроил
ADODataSetMeropr.Properties["Unique Table"].Value := "Meropr";
ADODataSetMeropr.Properties["Resync Command"].Value :=...

А программа ведет себя как в случае (как сказано в статье) если бы не было
настроено свойство Resync Command.
Т.е. изменяю поле FK_id, а прочие поля не изменяюся.


 
Jan1   (2007-04-17 15:58) [62]


> ADODataSetMeropr.Properties["Resync Command"].Value :=..
> .

что там?


 
Jan1   (2007-04-17 15:58) [63]

что профайлер говорит.


 
Kostafey ©   (2007-04-17 16:00) [64]

> массив соответствий  "имя поля"="русское название" по нему и заменить

А как же быть если этого поля не окажется в наборе данных?


 
Kostafey ©   (2007-04-17 16:01) [65]

> что там?

   ADODataSetMeropr.Properties["Resync Command"].Value :=
     "select * from                                                       "+
     "(                                                                   "+
     "  (                                                                 "+
     "    Meropr                                                          "+
     "    left join TipMeropr on TipMeropr.TMer_id = Meropr.Mer_TMer_id   "+
     "  )                                                                 "+
     "  left join Valute on  Valute.V_id = Meropr.Mer_V_id                "+
     ")                                                                   "+
     "left join Location on Location.L_id = Meropr.Mer_L_id               "+
     "where Meropr.Mer_id=?                                               ";


 
Jan1   (2007-04-17 16:02) [66]

а чего профайлер говорит?


 
Kostafey ©   (2007-04-17 16:04) [67]

> а чего профайлер говорит?

Я не что-то не понял. Что такое профайлер?


 
Jan1   (2007-04-17 16:05) [68]

C:\Program Files\Microsoft SQL Server\80\Tools\Binn\profiler.exe


 
Jan1   (2007-04-17 16:06) [69]


> where Meropr.Mer_id=

Mer_id- ПК Meropr?


 
Kostafey ©   (2007-04-17 16:07) [70]

> C:\Program Files\Microsoft SQL Server\80\Tools\Binn\profiler.exe

Эта штука у меня, конечно есть, но в данном случае я с Access работаю.


 
Jan1   (2007-04-17 16:08) [71]

у тебя в топике MS SQL написано


 
Kostafey ©   (2007-04-17 16:08) [72]

> [69] Jan1   (17.04.07 16:06)
>
> > where Meropr.Mer_id=
>
> Mer_id- ПК Meropr?

Mer_id - уникальный ключ таблицы Meropr.


 
Kostafey ©   (2007-04-17 16:10) [73]

> у тебя в топике MS SQL написано

А :).
Тпик-то не мой. Я его поднял потому что там про LookUp-поля было написано.
С них-то все и началось.


 
sniknik ©   (2007-04-17 16:12) [74]

> А как же быть если этого поля не окажется в наборе данных?
пропускаешь и ничего не делаешь...

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


 
Kostafey ©   (2007-04-17 16:21) [75]

> пропускаешь и ничего не делаешь...

Тоже верно. :) Спасибо, это получилось.


 
Kostafey ©   (2007-04-17 16:33) [76]

> [61] Kostafey ©   (17.04.07 15:57)
> > [35] Jan1   (17.04.07 12:28)
>
>
> > http://delphikingdom.ru/asp/viewitem.asp?catalogid=420
>
> Странно. Сделал все как в статье...

Повторил для "пустого проекта" - то же самое.
Значения своств
ADODataSetMeropr.Properties["Unique Table"].Value := "Meropr";
ADODataSetMeropr.Properties["Resync Command"].Value :=...
задаются при Form1.Show


 
sniknik ©   (2007-04-17 16:40) [77]

> ADODataSetMeropr.Properties["Unique Table"].Value := "Meropr";
> ADODataSetMeropr.Properties["Resync Command"].Value :=...
это все? а где "Update Resync"? по умолчанию только автоинкремент обновляется.

либо твоя ресинк команда с ошибкой


 
Kostafey ©   (2007-04-17 16:42) [78]

> [76] Kostafey ©   (17.04.07 16:33)

О! Получилось. Написал:
procedure TForm1.ADODataSet1AfterPost(DataSet: TDataSet);
begin
 ADODataSet1.Refresh;
end;
И стало все хорошо изменяться. Так правильно?


 
Kostafey ©   (2007-04-17 16:47) [79]


> это все? а где "Update Resync"? по умолчанию только автоинкремент
> обновляется.

А как "Update Resync" использовать ?


 
sniknik ©   (2007-04-17 16:48) [80]

> Так правильно?
нет, должно само. и потом ты перезапрашиваешь весь рекордсет, а ресинк команда только одну запись.



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

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

Наверх





Память: 0.63 MB
Время: 0.043 c
4-1170871502
Efir
2007-02-07 21:05
2007.07.15
Отловить клик мыши на форме


2-1182332495
Новичек
2007-06-20 13:41
2007.07.15
Возвращаемое значение.


3-1176698721
pavel_guzhanov
2007-04-16 08:45
2007.07.15
Перестал работать скрипт


6-1165997624
LFRT
2006-12-13 11:13
2007.07.15
Команды клиент сокета


15-1181739730
авыф
2007-06-13 17:02
2007.07.15
Convert





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