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

Вниз

DBGrid   Найти похожие ветки 

 
Svin   (2003-11-20 08:54) [0]

Как выбрать все записи в DBGrid
DBGrid связана с DataSource


 
Zacho   (2003-11-20 09:07) [1]

В каком смысле выбрать ? Если отметить - то так:
DBGrid.DataSource.DataSet.First;
while not DBGrid.DataSource.DataSet.Eof do
begin
TDBGrid.SelectedRows.CurrentRowSelected:=true;
DBGrid.DataSource.DataSet.Next;
end;


 
don-do   (2003-11-20 09:19) [2]

>>Zacho © (20.11.03 09:07) [1]

В этом случае будет использовано много памяти, особенно если таблица большая, лучше использовать переменную, например

Tform1.AllSelected

И самому окрашивать записи.

Правда получать список нужно в этом случае самому, по нужде, а не позволять пользователю играть со свапом.


 
Zacho   (2003-11-20 09:28) [3]


> don-do © (20.11.03 09:19) [2]

А толку их просто окрашивать ? Посмотри, что такое TBookmarkList. И выбирать тысячи записей для отображения в гриде - моветон и издевательство над пользователем.


 
Svin   (2003-11-20 09:32) [4]

2Zacho
А без пробега по DBGrid никак нельзя?


 
Johnmen   (2003-11-20 09:39) [5]

А смысл ?


 
Zacho   (2003-11-20 09:40) [6]


> Svin (20.11.03 09:32) [4]

Разве что, действительно, окрашиванием записей вручную. Но смысл ?
И пробег не по DBGrid, а по подключенному к нему DataSet"у. Разница принципиальная.


 
Svin   (2003-11-20 09:42) [7]

Да это понятно, что по DataSet, только ведь долго это, если у меня там 600000 записей, взбесишься...


 
ЮЮ   (2003-11-20 09:47) [8]

>если у меня там 600 000 записей

А ты хочешь, чтобы пользователь "выбрав все" затем по одной снимал выделение с 599 000 записей? Что ты вообще хочешь добиться с помощью выделения?


 
Johnmen   (2003-11-20 09:47) [9]

>Svin

А смысл ?


 
mtihonov   (2003-11-20 09:50) [10]

Просто реплика!
Ну когда-же Вы, народ уйдете от DBFского мышления.
Есть SQL язык! Выбери что надо в запросе и делай все что надо с этой группой записей. Какой, извините идиот, будет просматривать в DBGrid с 600000 записей, вылавливать и отмечать нужные...


 
Danilka   (2003-11-20 09:51) [11]

[7] Svin (20.11.03 09:42)
а нафига ему столько? сколько рабочих месяцав понадобится, чтобы их все только просмотрть?


 
Svin   (2003-11-20 09:52) [12]

А если надо все, а пару не надо? :-(


 
Наталия   (2003-11-20 09:58) [13]

>Svin (20.11.03 09:52) [12]
>А если надо все, а пару не надо? :-(

"Не верю!" (с) Станиславский

Данные какого рода необходимо отобразить пользователю?


 
Svin   (2003-11-20 10:01) [14]

Телефоны


 
Danilka   (2003-11-20 10:03) [15]

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


 
Danilka   (2003-11-20 10:03) [16]

что он с таким кол-вом будет делать?


 
Наталия   (2003-11-20 10:04) [17]

И что пользователь будет делать с 600 000 телефонов? Просматривать их список на экране? Наверняка можно показывать не весь список этих телефонов, а выбирать их по какому-нибудь условию?


 
Svin   (2003-11-20 10:07) [18]

Нельзя... это программа-интерфейс для обновления базы данных по абонентам... если не нужно добавлять пару телефонов, а остальные добавить... и вообще вопрос не в этом, а в том, можно ли выбрать все сразу...?


 
Sergey13   (2003-11-20 10:09) [19]

2Наталия © (20.11.03 10:04) [17]
>И что пользователь будет делать с 600 000 телефонов?
Звонить всем подряд. 8-)


 
Наталия   (2003-11-20 10:10) [20]

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

Вот с этого места поподробнее... Зачем для обновления БД показывать её в Grid?


 
Zacho   (2003-11-20 10:11) [21]


> Svin (20.11.03 10:07) [18]

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


 
Svin   (2003-11-20 10:20) [22]

Да нет тут критериев, тут они чисто визуальные, это для администратора Call-Center"а.. ну не буду же я вам щас рассказывать полностью задачу, да и не могу... нельзя... вообщем пойду по пути №1


 
Danilka   (2003-11-20 10:25) [23]

бедные админы калл-центра. Svin надеюсь, тебя ждет легкая смерть, сразу задушат, без пыток.
а если серьезно, то с таким подходом, в лучем случае они промучаются недолго и закажут где-нибудь в другом месте решение задачи, а тебя выгонят.
В худшем для них случае - они будут мучиться долго, пока где-нибудь не увидят человечью альтернативу. Результат, правда, для тебя все равно будет одинаковым.


 
Zacho   (2003-11-20 10:29) [24]


> Svin (20.11.03 10:20) [22]

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


 
Svin   (2003-11-20 10:32) [25]

Блин, ну прям гении все.. SQL ипользуй и т.д., а то я его совсем не использую, пользуюсь примитивным select * from Table1... :-) при воможностях-то Transact SQL :-)
Нет, чтобы подсказать, начинают спрашивать фигню всякую и хамят...

>а если серьезно, то с таким подходом, в лучем случае они промучаются недолго и закажут где-нибудь в другом месте решение задачи, а тебя выгонят.
То-то я дурак такой.. столько лет тут работаю.. :-(


 
Zacho   (2003-11-20 10:39) [26]


> Svin (20.11.03 10:32) [25]

Да при чем тут гении - не гении ? Ты вот сам попробуй визуально найти нужную запись из 600000. Сколько дней на это уйдет ? Лично у меня такая программа сразу же в Recycled Bin оказалась бы.
И что подсказывать ?
Ну вот, например, решение: возьми TDBGridEh, там можно выделить/снять выделение со всех записей одним щелчком мышки. А толку ?


 
Svin   (2003-11-20 10:50) [27]

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


 
Danilka   (2003-11-20 10:57) [28]

>если не нужно добавлять пару телефонов, а остальные добавить

почему-бы просто не вывести стринг-лист, куда-бы они ручками забили эту пару телефонов?
зачем тащить все на клиента и вываливать в грид, когда нужна только пара телефонов?


 
Кулюкин Олег   (2003-11-20 10:59) [29]

2 Svin
Ну если уж они уперлись и хотят заставить человека отсматривать 600000 записей, разбейте набор данных на маленткие группы (записей по 1000-2000 :)
Пускай частями заливают.
+ добавьте кнопку "Залить все".


 
Zacho   (2003-11-20 11:08) [30]


> Danilka © (20.11.03 10:57) [28]

Был у меня эпизод, когда директор долго и настойчиво убеждал меня, что просто необходимо видеть всю номенклатуру товаров в гриде. В конце концов оказалось, что просто он имел в виду, что нужен поиск по штрих-коду по всей номенклатуре. И добавление найденого товара в накладную. Естественно, для этого грид вообще не нужен. :)
Может и в этом случае что-то аналогичное ?


 
Sergey13   (2003-11-20 11:10) [31]

2Svin (20.11.03 10:20) [22]
>ну не буду же я вам щас рассказывать полностью задачу, да и не могу...
При таких условиях, чего ты хочешь. Мы же твоих условий не знаем.

>нельзя...
Военная тайна? 8-)

>вообщем пойду по пути №1
А мы пойдем другим путем. (с) В.И.Ульянов (Ленин) 8-)


 
Danilka   (2003-11-20 11:12) [32]

[30] Zacho © (20.11.03 11:08)
:))
наверняка, что-то подобное. наверняка список пары телефонов которые не надо обновлять уже где-то есть, не только у оператора в голове.


 
Svin   (2003-11-20 11:15) [33]

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


 
Danilka   (2003-11-20 11:17) [34]

[33] Svin (20.11.03 11:15)
а нафига грид???
пусть ручками напишет эти две, хоть в мемо-поле, хоть в лист-боксе.
и радиобуттон: "обновить выбранные телефоны"/"обновить все, кроме выбранных телефонов".


 
Наталия   (2003-11-20 11:17) [35]

Svin (20.11.03 11:15) [33]
А если ему не нужно их просматривать, зачем их тогда в гриде отображать?


 
Svin   (2003-11-20 11:27) [36]

>а нафига грид???
>пусть ручками напишет эти две, хоть в мемо-поле, хоть в лист-боксе.
Хм...
А если он их не знает.. даже без если.. он из НЕ знает..

>А если ему не нужно их просматривать, зачем их тогда в гриде отображать?
диапазон от 1 до 600000... надо отображать..


 
Danilka   (2003-11-20 11:34) [37]

[36] Svin (20.11.03 11:27)
>он из НЕ знает..
А как тогда он глянув на номер узнает надо его обновлять или нет???


 
Кулюкин Олег   (2003-11-20 11:35) [38]


> А как тогда он глянув на номер узнает надо его обновлять
> или нет???

Вспомнит, что залил его вчера :))

2 Svin
600000 это максимум или обычное рабочее число?


 
Svin   (2003-11-20 11:38) [39]

>600000 это максимум или обычное рабочее число?
максимум...

>А как тогда он глянув на номер узнает надо его обновлять или нет???
Гы.. :-) по твоему а я только с телефонами работаю, а адреса, организации кому он принадлежит тут отсутствуют?


 
Zacho   (2003-11-20 11:44) [40]


> Svin (20.11.03 11:38) [39]

Значит критерии для выбора все-таки есть ! Вот и делайте фильтр по ним. Например, по конкретной улице, и/или по организациям, название которых начинается с такого-то слога и т.д.


 
Кулюкин Олег   (2003-11-20 11:45) [41]


> а адреса, организации кому он принадлежит тут отсутствуют?

Оператор будет их видеть, но как он определит, что такой адрус уже есть?
Он их помнит?


 
Danilka   (2003-11-20 11:46) [42]

хе-хе, вот и подошли, таки к критериям :))


 
Danilka   (2003-11-20 11:47) [43]

[41] Кулюкин Олег © (20.11.03 11:45)
самое страшное не это, а то, что ему придется просматривать 600"000 адресов, чтобы найти из них пару.


 
_sulent   (2003-11-20 11:48) [44]

Да не нужно париться, просто воспользоваться TbookMark, он все отметит записи, и связать его с таблицей. И никаких проблем не будет. Очень даже удобная штукенция


 
Кулюкин Олег   (2003-11-20 11:52) [45]


> Danilka © (20.11.03 11:47) [43]
> самое страшное не это, а то, что ему придется просматривать
> 600"000 адресов, чтобы найти из них пару.

Да, тяжно ему. :(


 
Zacho   (2003-11-20 11:54) [46]


> _sulent © (20.11.03 11:48) [44]

И как же это сделать ? :-)


 
_sulent   (2003-11-20 14:58) [47]

хм... это просто делается, дай бог памяти, у меня сейчас нету делфи на компе, но попробую воспроизвести все это безобразие :)))
... Хотя можно попробовать вот так, ставишь в DBGRid"е флажок Muliselect и можно работать с выбором данных, т.е. зажимаешь Ctrl и тыкаешь по записям, он их выбирает. Если нужно выбрать все записи, то тогда нажимаешь Ctrl+A. Выбирает все записи в сетке. Или можно воспользоваться TTable(Sender).SelectAll - тоже вариант, а потом обращаться к выбранным записям при помощи TBookMark, как это сделать, если нужно, я могу сказать завтра, потому как уже не помню как делал


 
_sulent   (2003-11-20 15:00) [48]

тьфу, перепутал TDBGrid(Sender).SelectAll;


 
Anatoly Podgoretsky   (2003-11-20 15:38) [49]

Ты когда ни будь пробовал просто прокрутить в гриде 600000 записей, допустим колесиком, у вас что мышки лишнии есть?


 
Anatoly Podgoretsky   (2003-11-20 15:39) [50]

Хотя если хочешь, то select phone from table


 
Danilka   (2003-11-20 15:41) [51]

[50] Anatoly Podgoretsky © (20.11.03 15:39)
ему этого мало. ему надо еще адреса и названия фирм - т.к. по ним оператор должен найти 2 из 600"000 вручную! :))


 
Zacho   (2003-11-20 15:43) [52]


> _sulent © (20.11.03 15:00) [48]

Нету такого. И не было никогда. Так что или вручную тыкаться по всем записям, или проходить по всему датасету в цикле. Использрвать что-нибудь типа TDBGridEh.
А "просто воспользоваться TbookMark, он все отметит записи" - не получиться. Все равно цикл по набору данных, иначе - никак.
Тем более, что TBookmark: string;


 
_sulent   (2003-11-21 08:10) [53]

Ну как нету, я делал, и у меня все работает! А зачем прокручивать, если просто выделить такое количество записей, то зачем мучиться, и глаза портить. Поставить Table.DisableControls, а по завершении включить, и все будет чпок!


 
Zacho   (2003-11-21 09:23) [54]


> _sulent © (21.11.03 08:10) [53]

Чего делал ? TDBGrid(Sender).SelectAll; ?
Да нету, нету у TDBGrid метода SelectAll !


 
Юрий   (2003-11-21 11:54) [55]

Svin, по моему решение должно быть таким (я и сам его использую.
правда на множестве 10-20 тысяч записей)
В Gride выводишь весь необходимый список, а под гредом делаешь строку
для задания условия поиска (только не нужно вызывать ее по комбинации
клавишь типф Ctrl-F, это поле должно быть постоянно доступным)
Далее если это Тел база, то однозначно нао искать по номеру,
вот в это поле номер и забиваешь, и вызываешь Locate (или что-то еще)
В Gride, если эта запись будет найдена, курсор сразу установится
на нее, дальше уже можешь делать с ней что угодно -:
сразу редактировать, запомнить ее номер или что-то еще
Так же ишется вторая, третья ... n-я необходимая запись,
В конце у тебя будет множество с требуемыми записями,

Я правильно понял задачу или нет?


 
Sandman25   (2003-11-21 12:30) [56]

Хочу посоветовать отображать 2 грида. В одном гриде (нижнем, например) отображаются все выбранные в текущий момент строки. Верхний грид используется для фильтра и переноса строки в нижний грид. Операции можно производить как со строками нижнего грида, так и верхнего.
То есть работа выглядит примерно так:
для верхнего грида указываем в Edit (с Label организация) что-то типа "юнеско" и нажимаем кнопку. По нажатию этой кнопки происходит создание запроса типа "select * from table where organ_name like :organ_nameэ; ParamByName("organ_name").AsString := trim(Edit.Text) + "%";Open; В верхнем гриде отображаются найденные записи. Пользователь находит нужную запись и либо производит с ней нужную операцию, либо отмечает ее, помещая тем самым в нижний грид (AppendRecord).
Нижний грид связан с ClientDataSet, для которого настроены поля и вызван CreateEmptyDataSet.
Для того, чтобы снять выделение, не надо искать запись повторно, а нужно всего лишь удалить текущую строку из нижнего грида.


 
Sandman25   (2003-11-21 12:36) [57]

Да, еще. Если нужно выделить строки, с которыми не нужно производить операции, то нужно их отправить в нижний грид, а затем перед выполнением операции пробежаться по этому гриду и занести их все во временную таблицу и при выполнении операции проверять and not exists (select * from temp_table where temp_table.id = ...)
И еще - перед выполнением операции можно задать условие фильтра по таблице, причем чтобы это делал пользователь.
insert into table2 select * from table1 where (условие фильтра) and not exists (select * from temp_table where temp_table.id = ...)
В таком случае никогда не понадобится отображать 600.000 записей. Разве что в случае, если нужно добавить 300.000 записей и не добавлять другие 300.00 записей и нет никаких различий между ними, кроме решения человека. Но я такоге не встречал и этому человеку не завидую :)


 
_sulent   (2003-11-21 15:16) [58]

Ну я завтра вывешу свой код, покажу как я делал, может я не то говорюю что нужно, и меня понять поэтому никто не может, но факт тот, что я действительно делал!



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

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

Наверх





Память: 0.59 MB
Время: 0.009 c
14-36826
Tornado
2003-11-19 12:28
2003.12.12
Консольные приложения


14-36814
ИдиотЪ
2003-11-19 13:43
2003.12.12
А кто модерирует модераторов ?


1-36592
BaDeVlad
2003-12-03 09:14
2003.12.12
Восстановление удаленного файла


3-36534
st_av
2003-11-21 01:58
2003.12.12
Описание EhLib


1-36677
McSimm2
2003-12-02 16:50
2003.12.12
представление числа в виде строки





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