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